MATLAB图像处理问题

想请问 我有一张二值化后的图

里面有一块图形是白色的(不规则)

其它背景全是黑的 (即在二值图像中)

我想自动找出那块白色图形的中心点像素坐标 ,求代码

第1个回答  2009-01-08
我的想法是这样的,假设是一个M*N的矩阵(代表这张图)
[m,n]=find(bmp==1);%找出二值图片中白色的点
pos=[m';n'];%把对应白色点的坐标存放到POS中,第一行对应第i个坐标的x,第二行对应第i个坐标的y,%这也就是是题目中的坐标点
temp=0;
re_i=0;re_j=0;%结果
for i=1:size(m)
space=0;
for j=1:size(m)
space= space+ (pos(1,i)-pos(1,j))^2+(pos(2,i)-pos(2,j))^2;
end
if i==1
temp=space;re_i=pos(1,i);re_j=pos(2,i);
else
if space<temp
temp=space;re_i=pos(1,i);re_j=pos(2,i);
end
end
end
随便写写的,你看看吧~
第2个回答  2009-01-08
以下程序中,假设I就是那幅二值化后的图像,且该图像中白色部分灰度值为255,黑色部分灰度值为0,最终得到中心点的坐标(x,y);
clc;clear;
[m,n]=size(I);
top=0;bottom=0;left=0;right=0;

for i=1:m
for j=1:n
if I(i,j)==255
top=i;
break;
end
end
if top~=0
break;
end
end

for i=m:-1:1
for j=1:n
if I(i,j)==255
bottom=i;
break;
end
end
if bottom~=0
break;
end
end

for j=1:n
for i=1:m
if I(i,j)==255
left=j;
break;
end
end
if left~=0
break;
end
end

for j=n:-1:1
for i=1:m
if I(i,j)==255
right=j;
break;
end
end
if right~=0
break;
end
end

x=floor((left+right)/2);
y=floor((top+bottom)/2);本回答被提问者采纳
第3个回答  2009-01-08
用矩的理论可以计算二值图像的中心。
公式是x=m01/m00;y=m10/m00;
其中mpq=∑∑i^p*j^q*A(i,j)
[x,y]就是二值图像A的中心

下面是例子
A=imread('pillsetc.png');%打开一幅图像,这幅图像在matlab2006中自带
A=im2bw(A,.6);A=A(100:end-140,end-140:end);%二值化
subplot(1,2,1);imshow(A)%显示
%下面用矩的理论计算中心
[m,n]=size(A);[i,j]=meshgrid(1:m,1:n);
area=sum(A(:));%area就是物体的面积,就是m00
x=sum(sum(A.*i'))/area;y=sum(sum(A.*j'))/area;%[x,y]就是中心
%下面显示图像
A((-1:1)+round(x),(-1:1)+round(y))=0;%因为x,y可能不是整数,所以取整,然后-1:1是为了让这个点画得大一些。
subplot(1,2,2);imshow(A)%显示图像