MATLAB图像处理问题
想请问我有一张二值化后的图里面有一块图形是白色的(不规则)其它背景全是黑的(即在二值图像中)我想自动找出那块白色图形的中心点像素坐标,求代码...
想请问 我有一张二值化后的图
里面有一块图形是白色的(不规则)
其它背景全是黑的 (即在二值图像中)
我想自动找出那块白色图形的中心点像素坐标 ,求代码 展开
里面有一块图形是白色的(不规则)
其它背景全是黑的 (即在二值图像中)
我想自动找出那块白色图形的中心点像素坐标 ,求代码 展开
3个回答
展开全部
我的想法是这样的,假设是一个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
随便写写的,你看看吧~
[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
随便写写的,你看看吧~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
东莞大凡
2024-08-07 广告
2024-08-07 广告
OpenCV标定板是东莞市大凡光学科技有限公司在相机标定中常用的工具。它通常由黑白格点按一定规则排列在平面上组成,如棋盘格或圆形格等。在相机标定时,将标定板置于不同位置和姿态下拍摄图像,利用OpenCV库中的函数检测标定板上的角点或圆心,进...
点击进入详情页
本回答由东莞大凡提供
展开全部
以下程序中,假设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);
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);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用矩的理论可以计算二值图像的中心。
公式是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)%显示图像
公式是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)%显示图像
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询