how to write matlab code for moments?

i have this code for calculating moments function [M]= moments(I) [r c]=size(I); m=zeros(r,c); % geometric moments for i=0:1 for j=0:1 for x=1:r for y=1:c m(i+1,j+1)=m(i+1,j+1)+(x^i*y^j*I(x,y)); end end end end
xb=m(2,1)/m(1,1); yb=m(1,2)/m(1,1);
% central moments u=[ 0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 0]; for i=0:3 for j=0:3 for x=1:r for y=1:c u(i+1,j+1)=u(i+1,j+1)+(x-xb)^i*(y-yb)^j*I(x,y); end end end end
% scale invariant moments n=[ 0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 0]; for i=0:3 for j=0:3 n(i+1,j+1)=u(i+1,j+1)/(u(1,1)^(1+(i+j)/2)); end end
%rotation invariant moments I_1= n(3,1)+ n(1,3); I_2=(n(3,1)- n(1,3) )^2+ (2*n(2,2))^2; I_3=(n(4,1)-3*n(2,3))^2+ (3*n(3,2)-n(1,4))^2; I_4=(n(4,1)+n(2,3))^2+ (n(3,2)+n(1,4))^2; I_5=(n(4,1)-3*n(2,3))*(n(4,1)+n(2,3))*((n(4,1)+n(2,3))^2-3*(n(3,2)+n(1,4))^2)+(3*n(3,2)-n(1,4))*(n(3,2)+n(1,4))*(3*(n(4,1)+n(2,3))^2-(n(3,2)+n(1,4))^2); I_6=(n(3,1)-n(1,3))*((n(4,1)+n(2,3))^2-(n(3,2)+n(1,4))^2)+ 4*n(2,2)*(n(4,1)+n(2,3))*(n(3,2)+n(1,4)); I_7=(3*n(3,2)-n(1,4))*(n(4,1)+n(2,3))*((n(4,1)+n(2,3))^2- 3*(n(3,2)+n(1,4))^2 )- (n(1,4)-3*n(2,3))*(n(3,2)+n(1,4))*(3*(n(4,1)+n(2,3))^2-(n(3,2)+n(1,4))^2);
M= [I_1 I_2 I_3 I_4 I_5 I_6 I_7];
but it gives same values for all images is this correct way to calculate moments?

 Réponse acceptée

Iman Ansari
Iman Ansari le 12 Avr 2013
Modifié(e) : Iman Ansari le 12 Avr 2013
You may need to convert your input image to double. In uint8 numbers greater than 255 became 255.
function [M]= moments(I)
I=double(I);
[r c]=size(I);
m=zeros(r,c);
% geometric moments
for i=0:1
for j=0:1
for x=1:r
for y=1:c
m(i+1,j+1)=m(i+1,j+1)+(x^i*y^j*I(x,y));
end
end
end
end
xb=m(2,1)/m(1,1);
yb=m(1,2)/m(1,1);
% central moments
u=[ 0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 0];
for i=0:3
for j=0:3
for x=1:r
for y=1:c
u(i+1,j+1)=u(i+1,j+1)+(x-xb)^i*(y-yb)^j*I(x,y);
end
end
end
end
% scale invariant moments
n=[ 0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 0];
for i=0:3
for j=0:3
n(i+1,j+1)=u(i+1,j+1)/(u(1,1)^(1+(i+j)/2));
end
end
%rotation invariant moments
I_1= n(3,1)+ n(1,3);
I_2=(n(3,1)- n(1,3) )^2+ (2*n(2,2))^2;
I_3=(n(4,1)-3*n(2,3))^2+ (3*n(3,2)-n(1,4))^2;
I_4=(n(4,1)+n(2,3))^2+ (n(3,2)+n(1,4))^2;
I_5=(n(4,1)-3*n(2,3))*(n(4,1)+n(2,3))*((n(4,1)+n(2,3))^2-3*(n(3,2)+n(1,4))^2)...
+(3*n(3,2)-n(1,4))*(n(3,2)+n(1,4))*(3*(n(4,1)+n(2,3))^2-(n(3,2)+n(1,4))^2);
I_6=(n(3,1)-n(1,3))*((n(4,1)+n(2,3))^2-(n(3,2)+n(1,4))^2)+ 4*n(2,2)*(n(4,1)...
+n(2,3))*(n(3,2)+n(1,4));
I_7=(3*n(3,2)-n(1,4))*(n(4,1)+n(2,3))*((n(4,1)+n(2,3))^2- 3*(n(3,2)+n(1,4))^2 )...
- (n(1,4)-3*n(2,3))*(n(3,2)+n(1,4))*(3*(n(4,1)+n(2,3))^2-(n(3,2)+n(1,4))^2);
M= [I_1 I_2 I_3 I_4 I_5 I_6 I_7];

5 commentaires

Sachin
Sachin le 12 Avr 2013
thnx a lot iman
fateme
fateme le 28 Mai 2014
thanks
Ricki Chindra
Ricki Chindra le 9 Nov 2014
Iman how to call the function? I'm trying it, no error but when I run it, There is no image in the figure
Akshit Vekariya
Akshit Vekariya le 6 Mai 2015
Déplacé(e) : DGM le 20 Fév 2023
will this code work on moment invariant...?
Sparsh Garg
Sparsh Garg le 15 Juin 2018
Déplacé(e) : DGM le 20 Fév 2023
I am getting error Function definitions are not permitted in this context. please explain how to solve this error

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Polar Plots dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by