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