我在Matlab中使用一个函数来计算图像的DCT(离散余弦变换).我不知道我的代码中有什么不起作用,但我得到了一个具有相同编号的输出图像.我想在DCT中使用这个公式.
请任何想法.
function image_comp = dctII(image, b)
[h w] = size(image);
image = double(image) - 128;
block = zeros(b,b);
image_t=zeros(size(image));
for k=1:b:h
for l=1:b:w
image_t(k:k+b-1,l:l+b-1)= image(k:k+b-1,l:l+b-1);
for u=1:b
for v=1:b
if u == 0
Cu = 1/sqrt(2);
else
Cu = 1;
end
if v == 0
Cv = 1/sqrt(2);
else
Cv = 1;
end
Res_sum=0;
for x=1:b;
for y=1:b
Res_sum = Res_sum + ((image_t(x,y))*cos(((2*x)+1)*u*pi/(2*b))*cos(((2*y)+1)*v*pi/(2*b)));
end
end
dct= (1/4)*Cu*Cv*Res_sum;
block(u,v) = dct;
end
end
image_comp(k:k+b-1,l:l+b-1)=block(u,v);
end
end
end
Run Code Online (Sandbox Code Playgroud)
在 x 和 y 的内部循环中,您没有从 image_t 中的正确位置读取。您已将本地块复制到以 k,l 作为左上角的位置以用于处理,但在内部循环中,您始终从与 image_t 中的左上角从 1,1 开始的同一块中读取。
| 归档时间: |
|
| 查看次数: |
10766 次 |
| 最近记录: |