MATLAB计算出图像中多个物体的个数及重心
计算出原始图像中物体的个数及每个物体的中心,并显示出来
I=imread('keshe17.bmp'); //主函数
figure(1),imshow(I);
title('原始图像');
I2 = rgb2gray(I);
I4 = im2bw(I2, 0.7) ;
figure(2),imshow(I4);
I4=~I4;
bai=double(I4);
figure(3),imshow(I4);
title('二值图像');%像素为1的二值图像
=count(bai);
for i=1:geshu
a=fenge(bai);
bai=bai-a;
f=centre(a);
I4(f(1),f(2))=0;
I(f(1),f(2))=255;
end
figure(4),imshow(I4);
figure(5),imshow(I);
function f=fenge(D) %对像素为255的白色的物体二值图像进行分割
[m,n]=size(D);
H=zeros(m,n);
for i=1:m
for j=1:n
if D(i,j)~=0;
H(i,j)=1;
a=i;
b=j;
break;
end
end
if D(i,j)~=0;
break;
end
end
for i=2:(m-1)
for j=2:(n-1)
if (D(i,j)~=0 )
if(H(i,j-1)~=0 | H(i-1,j-1)~=0 | H(i-1,j)~=0 | H(i-1,j+1)~=0)
H(i,j)=1;
end
end
end
end
a=m-1;
while i>1
i=a;
a=a-1;
j=n-1;
while(j>1)
j=j-1;
if (D(i,j)~=0)
if(H(i,j+1)~=0 | H(i+1,j+1)~=0 | H(i+1,j)~=0 | H(i+1,j-1)~=0 |H(i,j-1)~=0 | H(i-1,j-1)~=0 | H(i-1,j)~=0 | H(i-1,j+1)~=0)
H(i,j)=1;
end
end
end
end
f=H;
function f=count(D) %对白色的二值图像的物体进行数数
[m,n]=size(D);
D=double(D);
a=0;
while 1
B=zeros(m,n);
B=fenge(D);
a=a+1;
D=D-B;
if D==0
break;
end
end
f=a;
function f=centre(H) %求白色物体的中心。即先求所有点的坐标的和,然后除以点的个数
[m,n]=size(H);
a=0;
b=0;
k=0;
for i=1:m
for j=1:n
if H(i,j)~=0
a=a+i;
b=b+j;
k=k+1;
end
end
end
D=a/k;
E=b/k;
f=[round(D) round(E)];