如何使用Sallee的代码从MATLAB中找到量化系数?(How can I find quantized coefficients from MATLAB using Sallee's code?)
首先,我承认这是一个家庭作业问题。 但是,我好像被卡住了。 我需要使用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_coef运行两次,因为上面的quant_tables数据点有两个元素。 然而,对于如此大的图像,这似乎是非常少量的系数。 在这方面,比我更有知识的人能指出我正确的方向吗? 在哪里/如何从jpeg图像中提取量化系数?
First, I admit that this is a homework question. However, I seem to be stuck. I need to get all quantized coefficients from a jpeg image using Phil Sallee's JPEG Toolbox (link listed at the bottom of the table under an "update" heading)(I'll be building a histogram, but that part I can handle once I can get to the data I need). I have a JPEG image that is about 5 MB in size and get back this data when I run it through Sallee's code:
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
How do I get the quantized coefficients from this image? At first I tried something like this to just spit out the coefficients so I could see what I was dealing with:
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_coef is run twice because there are two elements to the quant_tables data point above. However, this seems like a very low amount of coefficients for such a large image. Can someone more knowledgeable than me in this regard point me in the right direction? Where/how do I pull the quantized coefficients from a jpeg image?
原文:https://stackoverflow.com/questions/9090997
更新时间:2020-02-14 08:51
最满意答案
这将打开一个文件,拉出亮度,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);
This will open a file, pull off the luminance, Cr and Cb arrays, and the two quantization arrays. It will then quantize luminance, Cr and Cb into their own variables.
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-02
相关问答
如果您想最大限度地减少操作,可以遵循以下几点: n = 6;
k = 1:n;
result = [1 cumprod((n-k+1)./k)]
>> result
result =
1 6 15 20 15 6 1
这要求每个系数的操作非常少,因为每个系数都是利用先前计算的系数获得的。 如果考虑对称性,可以将操作次数减少大约一半: m1 = floor(n/2);
m2 = ceil(n/2);
k = 1:m2;
result =
...
“MATLAB桌面上的Mike”有一篇关于折叠单元格的文章 。 There's a post from 'Mike on the MATLAB Desktop' about folding cells.
如果您的多项式是单个变量的函数,则可以使用sym2poly如示例y^2 : syms y
p = 2*y^2+3*y+4;
c = sym2poly(p)
返回 c =
2 3 4
如果你真的想要其他顺序的系数,请使用fliplr(c) 。 如果你打算使用多项式,那么最好不要创建一个名为poly的变量,这是你可能想要使用的函数的名称。 如果您确实需要处理多个变量中的多项式,则可以在Matlab中使用MuPAD函数。 以下是如何使用MuPAD的coeff来获得它们在(
...
我怀疑通过截断系数,你已经更改了多项式。 您可以通过检查以下代码(当您在工作区中已经有x和y时)自己查看效果。 P = polyfit(x,y,8); % fitted polynomial
P2 = [-0.05446 1.088 -8.762 36.2 -80.85 94.32 -52.21 12.21 -0.0814]; % your coefficients
toString = @(x,pat)(sprintf(pat,x));
fix = @(x,pat)(str2double(to
...
您可以为此使用split功能。 使用is_past = split((d1-et),'time')> 0; 而不是is_past = (d1-et)>0; You can use split function for this purpose. Use is_past = split((d1-et),'time')> 0; instead of is_past = (d1-et)>0;
在我看来,不需要外部工具,方便的cftool可以在大多数情况下帮助您。 它将生成以下功能: function [fitresult, gof] = expfit(x, y, z)
[xData, yData, zData] = prepareSurfaceData( x, y, z );
% Set up fittype and options.
ft = fittype( 'c0 + c1.* exp(-(c2 .* x)) + c3.* (y.^1);', 'independent', {
...
这将打开一个文件,拉出亮度,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_in
...
您可以使用lookfor搜索本地文档。 这将搜索内置函数的文档以及路径上的任何用户定义函数。 默认情况下,它将仅搜索每个函数/类的文档的第一行。 lookfor(searchString)
如果要搜索整个帮助注释块,则需要使用-all标志 lookfor(searchString, '-all')
如果搜索字符串只有一个单词,则可以使用命令语法 lookfor
lookfor -all
You can use lookfor to search the l
...
两个问题 用IMGRADIENT计算的'gmag'和'gdir'具有双数据类型。 因此,如果你想这样显示它们,MATLAB会将它们视为强度图像,并期望它们在[0 1]范围内。 因此,我们需要规范化'gmag'和'gdir',稍后会在代码中显示。 如果您希望保存这些图像,MATLAB需要UINT8数据类型,并且值必须位于[0 255]范围内。因此,在保存之前,您需要将其乘以255然后转换为UINT8。 码 image = imread('gray_image.bmp');
[gmag, gdir]
...
在聊天中,我们发现您的问题与矩阵代数有关 您想要在A_moved获得的是x坐标乘以a加上y坐标乘以一个常数b 。 你已经在M和N有这个坐标,所以你可以获得A_moved A_moved = (a*M) + (b*N);
它将保持与A相同的形状 On the chat we found that your problem was matrix algebra related What you want to obtain in A_moved is the x coordinate multipl
...