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