-2

==问题解决了==

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

1 回答 1

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)));
    

我还没有解决性能问题,你真的应该自己研究一下。

于 2012-11-21T15:17:57.710 回答