2

首先,我承认这是一道作业题。但是,我似乎被困住了。我需要使用Phil Sallee 的 JPEG 工具箱(在表格底部的“更新”标题下列出的链接)从 jpeg 图像中获取所有量化系数(我将构建一个直方图,但我可以处理这部分一旦我可以获取我需要的数据)。我有一个大小约为 5 MB 的 JPEG 图像,当我通过 Sallee 的代码运行它时会取回这些数据:

  image_width: 3000
  image_height: 4000
  image_components: 3
  image_color_space: 2
  jpeg_components: 3
  jpeg_color_space: 3
  comments: {}
  coef_arrays: {[4000x3000 double]  [2000x3000 double]  [2000x3000 double]}
  quant_tables: {[8x8 double]  [8x8 double]}
  ac_huff_tables: [1x2 struct]
  dc_huff_tables: [1x2 struct]
  optimize_coding: 0
  comp_info: [1x3 struct]
  progressive_mode: 0

如何从此图像中获取量化系数?起初我尝试了这样的方法来吐出系数,这样我就可以看到我在处理什么:

pic = jpeg_read(image)
img_coef = pic.quant_tables{pic.comp_info(1).quant_tbl_no}
img_coef = pic.quant_tables{pic.comp_info(2).quant_tbl_no}

img_coefquant_tables运行两次,因为上面的数据点有两个元素。然而,对于如此大的图像,这似乎是一个非常低的系数。在这方面比我知识渊博的人可以为我指明正确的方向吗?我在哪里/如何从 jpeg 图像中提取量化系数?

4

2 回答 2

0

看来您拥有所需的信息。从您提供的数据来看,JPEG 工具包似乎解码了系数并将它们加载到“coef_arrays”中。您的图像具有水平二次采样;这由颜色系数阵列表示为亮度宽度的一半。3 个数组代表 (Y, Cr, Cb)。有 2 个量化表,因为一个用于 Y 分量,另一个用于 Cr 和 Cb 分量。为了对系数进行反量化,您需要将 quant_tables[] 数组的正确元素与每个系数相乘。例如,系数数组的元素 [8, 10] 应乘以 quant_table 的元素 [0,2]。8x8 量化阵列在每组 8x8 系数中重复使用。通常这些是曲折的顺序,

于 2012-02-01T05:48:09.093 回答
-1

这将打开一个文件,提取亮度、Cr 和 Cb 数组以及两个量化数组。然后它将亮度、Cr 和 Cb 量化为它们自己的变量。

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
lqcof = quantize(lum,lum_qtable);
bqcof = quantize(cb,cho_qtable);
rqcof = quantize(cr,cho_qtable);
于 2012-02-02T03:43:30.740 回答