==问题已解决==
此代码将为您提供dct2输出。
我正在努力改进我自己的代码
谢谢。
%Get the size of the input image
[m, n] = size(image);
output = zeros(m,n);
for u = 0:m-1
for v = 0:n-1
if u==0
a=sqrt(1/8);
else
a=sqrt(2/8);
end
if v==0
b=sqrt(1/8);
else
b=sqrt(2/8);
end
temp = 0;
for x = 0:m-1
for y = 0:n-1
temp = (cos((((2*x)+1)*pi*u)/(2*m))*cos((((2*y)+1)*pi*v)/(2*n)));
end
end
output(u+1,v+1) = a*b*temp;
end
end
答案 0 :(得分:1)
如果您尝试将其与Matlab函数dct2
进行比较,则代码存在两个问题。为了记录,您可以打开并分析文件以了解Matlab正在做什么。
在这两种情况下,您都不遵循以下公式:
a和b需要是n的函数:
if u==0
a=sqrt(1/n);
else
a=sqrt(2/n);
end
if v==0
b=sqrt(1/n);
else
b=sqrt(2/n);
end
您需要将temp
字词乘以图片值(您没有这样做):
temp = temp+(image(x+1,y+1))*(cos((((2*x)+1)*pi*u)/(2*m))*cos((((2*y)+1)*pi*v)/(2*n)));
我没有解决性能问题,你真的应该自己研究一下。