Matlab:创建我自己的dct2

时间:2012-11-21 11:05:29

标签: matlab

==问题已解决==

此代码将为您提供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

1 个答案:

答案 0 :(得分:1)

如果您尝试将其与Matlab函数dct2进行比较,则代码存在两个问题。为了记录,您可以打开并分析文件以了解Matlab正在做什么。

在这两种情况下,您都不遵循以下公式:

  1. 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
    
  2. 您需要将temp字词乘以图片值(您没有这样做):

    temp = temp+(image(x+1,y+1))*(cos((((2*x)+1)*pi*u)/(2*m))*cos((((2*y)+1)*pi*v)/(2*n)));
    
  3. 我没有解决性能问题,你真的应该自己研究一下。