Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何将正交多项式变换应用于图像压缩?_Matlab_Image Compression - Fatal编程技术网

Matlab 如何将正交多项式变换应用于图像压缩?

Matlab 如何将正交多项式变换应用于图像压缩?,matlab,image-compression,Matlab,Image Compression,我正在研究基于正交多项式变换的图像压缩。我的输入图像是256*256的灰度图像。我把这个图像分成4乘4的块。然后在每个块上应用正交多项式算子。但我没有得到正确的系数。 例如: 如果我有输入图像的块4x4: I=[5 11 8 10;9 8 4 12; 1 10 11 4;19 6 15 7]; 对于n=4,我的多项式运算符是: [M] = [p0 p1 p2 p3]=[1 -3 1 -3;1 -1 -1 9;1 1 -1 -9;1 3 1 3] 找到外部产品后: [20 -24 24 -16

我正在研究基于正交多项式变换的图像压缩。我的输入图像是256*256的灰度图像。我把这个图像分成4乘4的块。然后在每个块上应用正交多项式算子。但我没有得到正确的系数。 例如:

如果我有输入图像的块
4x4

I=[5 11 8 10;9 8 4 12; 1 10 11 4;19 6 15 7];
对于
n=4
,我的多项式运算符是:

[M] = [p0 p1 p2 p3]=[1 -3 1 -3;1 -1 -1 9;1 1 -1 -9;1 3 1 3]
找到外部产品后:

[20 -24 24 -16; -24 84 -80 24;24 -80 84 -24;-16 24 -24 20]
当我将此应用于输入图像块时,我的答案是:

[-396 172 88 -104; 1012 -248 -376 616 -972 320 436 -552; 492 -104 4 172]
这是错误的。应该是

[140 0 -6 -10; 32 -112 2 -174; 22 -30 8 -40;34 -54 84 -8]
我做错了什么

下面给出了寻找正交多项式算子的MATLAB代码

clc
clear all
close all
ID=imread('cameraman.tif');  % input image
I=double(ID);
imshow(ID);
[r,c]=size(I);
y1=zeros(r,c);
x=1:4;
n=4;
mu=(n+1)/2;
p0=[1 1 1 1];
p1=x-mu;
p2=(x-mu).^2-(n.^2-1)/12;
p3=(x-mu).^3-((x-mu)*(3*n.^2-7))/20;
P=[p0;p1; p2; p3];
N=[1 1 1 1;-1.5 -0.5 0.5 1.5;1 -1 -1 1;-0.3 0.9 -0.9 0.3];
M=[1 1 1 1;-3 -1 1 3;1 -1 -1 1;-3 9 -9 3]; % after sacling
v=M';
O=M.*v;
T=O'; % Orthogonal polynomial operator
 for i=1:4:r
  for j=1:4:c
    y1(i:i+3,j:j+3)=I(i:i+3,j:j+3).*(double(T));
    end
 end
 figure,imshow(uint8(y1))
 y1

好的,那么你的代码在哪里向我们展示了你的尝试?为什么不正确?告诉我们。根据规则:“寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题说明的问题对其他读者没有用处。请参阅:我提到了寻找正交多项式运算符的代码在您的示例中,您的代码没有生成
M
,也没有显示如何应用运算符。请提供一个完整的例子来说明您遇到的问题。好的,现在我在这里写代码,请告诉我哪里做错了