5

画像の DCT (離散コサイン変換) を計算する Matlab の関数に取り組んでいます。私のコードで何が機能していないのかわかりませんが、同じ番号の出力画像が得られました。この式を 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
4

1 に答える 1

3

x と y の内側のループでは、image_t の正しい場所から読み取っていません。処理で使用するためにローカル ブロックを左上隅として k,l の場所にコピーしましたが、内側のループでは常に image_t の左上隅として 1,1 で始まる同じブロックから読み取っています。

于 2013-09-29T02:13:13.130 に答える