如何为DCT系数制作直方图以展示双重量化效应?

3

我想做的是针对图像进行量化DCT系数的直方图,以检测双重量化效应。当我使用hist(x)时,它会将其分类为10个区间,如果我将其更改为hist(x,20)或30,则无法真正显示DQ效果。那么有没有更好的方法呢?下面是Matlab代码:

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个回答

2

首先,无需量化系数。其次,可以通过绘制某些频率的直方图来观察效果。您需要在块中穿过各种位置并寻找模式。绘制直方图的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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接