1

私はチェビシェフモーメントの初心者です。画像のモーメントを計算し、そのモーメントから画像を再構成するコードをプログラムしました。このコードが正しいかどうか疑問に思います。

function t = momentdernier(n,N)

i=0;

if (i==0)
    for j=1:N
        t(i+1,j) = 1;
    end
    i=i+1;
end

if(i==1 && i<=n)
    for j=1:N
        t(i+1,j) = ((2*j)+1-N)/N  ;
    end
    i=i+1;
end

while(i >= 2 && i<=n  )
    for j=1:N 
        t(i+1,j) = ((((2*i)-1)*t(2,j)*t(i,j)) - ((i-1)*(1-(((i-1).^2)/(N.^2)))*t(i-1,j)))/i;
    end
    i=i+1;
end

end


**function val=ro(n,N)**

val=1;

for i=0:n-1
    val=val*(1-((i*i)/(N*N)));
end

val=val*N/(2*n+1);

end

% チェビシェフモーメントの計算:

function T=tchebdernier(img,n,m)

[N,M]=size(img);

prod=0;

T=0;
T1=momentjihen(n,N);    
T2=momentjihen(m,M);

for i=1:N
    for j=1:M
        T=T+(T1(n+1,i)*T2(m+1,j)*img(i,j));
    end
end

prod=1/(ro(n,N)*ro(m,M));

T=T*prod;

end

% 画像の再構築用

function f = intensitydernier(img,x,y,a,b)

[N,M]=size(img);

f=0;

for i=1:a
    for j=1:b
        T1= momentjihen(i,N);
        T2= momentjihen(j,M);

        v1=tchebjihen(img,i,j);
        v2=T1(i,x);
        v3=T2(j,y);

        f=f+(v1*v2*v3);
    end
end
end


function  C = contructiondernier(img)

[N,M]=size(img);

C=zeros(N,M);

for i=1:N
    for j=1:M
        C(i,j)= intensitydernier(img,i,j,a,b);
    end
end
end

% 例:

e=imread('e.png');

img=imresize(e,[20 20]);

T=tchebdernier(img,3,4);

C = contructiondernier(img);

imshow(C)
4

0 に答える 0