2014-03-29 25 views
2

我想要做的是對圖像量化DCT係數的直方圖,以檢測雙量化效應。當我使用hist(x)時,它會將其分類到10s,如果我將它更改爲hist(x,20)或30,它並不真正顯示DQ效果。那麼有沒有更好的方法呢? 這裏是代碼:MATLAB的如何做dct係數的直方圖顯示雙量化效果?

im = jpeg_read('image'); 
% Pull image information - Lum, Cb, Cr 
lum = im.coef_arrays{im.comp_info(1).component_id}; 
cb = im.coef_arrays{im.comp_info(2).component_id}; 
cr = im.coef_arrays{im.comp_info(3).component_id}; 
% Pull quantization arrays 
lqtable = im.quant_tables{im.comp_info(1).quant_tbl_no}; 
cqtable = im.quant_tables{im.comp_info(2).quant_tbl_no}; 
% Quantize above two sets of information 
qcof = quantize(lum,lqtable); 
bqcof = quantize(cb,cqtable); 
rqcof = quantize(cr,cqtable); 
hist(qcof,30); %lum quantized dct coefficient histogram 

回答

1

首先,沒必要量化的係數。其次,可以通過繪製某些頻率的直方圖來觀察效果。你需要通過塊中的各種位置並尋找模式。繪製直方圖的FFT有助於。

這裏是MATLAB代碼:

imJPG2 = jpeg_read('foto2.jpg'); 
lum = imJPG2.coef_arrays{imJPG2.comp_info(1).component_id}; 
for i = 1:8 
    for j = 1:8 
     r = lum(i:8:end, j:8:end); 
     histogram(r(:), 'binmethod','integers'); 
     pause(); 
    end 
end 

更多細節和背景可以在本文中找到:http://www.sciencedirect.com/science/article/pii/S0031320309001198