如何对dct系数进行直方图显示双量化效果?

时间:2014-03-29 15:15:38

标签: matlab histogram dct quantization

我想要做的是用于图像的量化DCT系数的直方图,以检测双量化效应。当我使用hist(x)时,它会将其分类为10s,如果我将其更改为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 个答案:

答案 0 :(得分:1)

首先,无需量化系数。其次,可以通过绘制某些频率的直方图来观察效果。您需要遍历块中的各个位置并查找模式。绘制直方图的FFT有助于。

这是matlab代码:

var final = [],
  temp_obj = {};

for (var i = 0; i < obj.length; i++) {

  var splitted = obj[i].split(":")[0]
  if (obj[i] != null && obj[i] != '') {
    temp_obj["name"] = splitted;
  }

  final.push(temp_obj);

}

console.log(final)

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