使用MATLAB求图像的形心、外接矩形顶点坐标并标记

使用MATLAB求图像的形心、外接矩形顶点坐标并标记

欢迎学习交流!
邮箱: z…@1…6.com
网站: https://zephyrhours.github.io/

1. 求图像形心使用自带函数regionprops标记

【例1】

%% Compiled by Zephyr Hou
clc;clear;close all
disp('Compiled by Zephyr Hou')
I = imread('coins.png'); % coins.png为系统内自带图像
Ibw = im2bw(I);            %使用阈值变换法把灰度图像转换成二值图像
Ibw = imfill(Ibw,'holes'); %该函数用于填充图像区域和‘空域’
Ilabel = bwlabel(Ibw);     %连通区域标记函数
stat = regionprops(Ilabel,'centroid');%用来度量图像区域属性的函数.常用来统计被
                                       %标记的区域的面积分布,显示区域总数
imshow(I); hold on;
for x = 1: numel(stat)
    plot(stat(x).Centroid(1),stat(x).Centroid(2),'b*');
end

运行效果如下:
在这里插入图片描述

2. 求图像外接矩形顶点坐标并标记

【例2】

%% Compiled by Zephyr Hou
% 计算形心坐标,用矩形标记

clc;clear;close all
disp('Compiled by Zephyr Hou')
I=imread('coins.png');
%%利用内置函数进行圆形检测
figure
imshow(I,[]);
title('检测结果');
hold on;

[centers, radii, metric] = imfindcircles(I,[10 30]);
% viscircles(centers, radii,'EdgeColor','b'); %根据中心,半径画出圆形。

[rows,~]=size(centers);
Marks={};    % 外接矩形的四个顶点坐标构成的胞元
for i=1:rows
    Mark1{i,1}=centers(i,1)-radii(i);
    Mark1{i,2}=centers(i,2)-radii(i);
    Mark2{i,1}=centers(i,1)+radii(i);
    Mark2{i,2}=centers(i,2)-radii(i);
    Mark3{i,1}=centers(i,1)+radii(i);
    Mark3{i,2}=centers(i,2)+radii(i);
    Mark4{i,1}=centers(i,1)-radii(i);
    Mark4{i,2}=centers(i,2)+radii(i);
    Marks={Mark1,Mark2,Mark3,Mark4};  
end

% MM为标记的目标的矩形四顶点坐标(x1,y1,x2,y2,x3,y3,x4,y4)左上角开始顺时针
 MM=zeros(rows,4); 
for i=1:rows
    MM1=[Marks{1}{i,:},Marks{2}{i,:},Marks{3}{i,:},Marks{4}{i,:}];
    for j=1:8
        MM(i,j)=MM1(1,j);
    end
end

% 将检测到的目标在图像中用矩形圈出
for i=1:rows
    plot([MM(i,1:2:8),MM(i,1)],[MM(i,2:2:8),MM(i,2)],'r-')
end

运行效果如下:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独不懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值