MATLAB示例——图像中圆的识别与判断

目录

*
一、基本介绍
二、程序代码

+ 2.1 加载图像
+ 2.2 灰度化与二值化
+ 2.3 形态学处理
+ 2.4 寻找边界
+ 2.5 确定圆形对象

一、基本介绍

本案例将介绍检测图像中的圆并判断其圆度。

二、程序代码

2.1 加载图像

加载图像代码如下:

I = imread('pillsetc.png');
figure(1),imshow(I);%显示原始图像

运行效果如下:

MATLAB示例——图像中圆的识别与判断

2.2 灰度化与二值化

灰度化与二值化代码如下:

I2 = rgb2gray(I);%灰度化
bw = imbinarize(I2);%二值化
figure(2),imshow(bw)

运行效果如下:

MATLAB示例——图像中圆的识别与判断
可以发现图像有许多噪声,接下来需要对图像进行形态学处理去噪。

2.3 形态学处理

代码如下:

%删除包含少于 30 个像素的所有对象
bw = bwareaopen(bw,30);
figure(3),imshow(bw);
%闭运算
se = strel('disk',2);
bw = imclose(bw,se);
figure(4),imshow(bw);
%填充孔洞
bw = imfill(bw,'holes');
figure(5),imshow(bw);

运行效果如下:

MATLAB示例——图像中圆的识别与判断

2.4 寻找边界

接下来需要寻找边界,指定 ‘noholes’ 选项将通过阻止 bwboundaries 搜索内部轮廓来加快处理速度,代码如下:

[B,L] = bwboundaries(bw,'noholes');%只关注外边界
figure(6),imshow(label2rgb(L,@jet,[.5 .5 .5]))%标记矩阵L转化为RGB图像
hold on
for k = 1:length(B)
  boundary = B{k};
  plot(boundary(:,2),boundary(:,1),'w','LineWidth',2);%绘制白色边界线
end

运行效果如下:

MATLAB示例——图像中圆的识别与判断

2.5 确定圆形对象

估计每个对象的面积和周长:
圆的面积:a r e a = π r 2 area=\pi r^2 a r e a =πr 2
圆的周长:p e r i m e t e r = 2 π r perimeter=2\pi r p e r i m e t e r =2 πr

使用这些结果形成简单的度量来表示对象的圆度:
圆度:
m e t r i c = 4 π ∗ a r e a p e r i m e t e r 2 metric=\frac{4\pi*area}{perimeter^2}m e t r i c =p e r i m e t e r 2 4 π∗a r e a ​

只有对于圆,该度量值等于 1;而对于任何其他形状,该度量值都小于 1。可以通过设置适当的阈值来控制判别过程。此示例中使用 0.94 的阈值。

使用 regionprops 获得所有对象的面积估计值。请注意,bwboundaries 返回的标签矩阵可以被 regionprops 重用,代码如下:

stats = regionprops(L,'Area','Centroid');%测量图像区域的属性(实际像素数和质心)
threshold = 0.94;%阈值
% 边界循环
for k = 1:length(B)
    boundary = B{k};%获取标签"k"对应的(X,Y)边界坐标
    %计算物体的近似周长
    delta_sq = diff(boundary).^2;
    perimeter = sum(sqrt(sum(delta_sq,2)));

    area = stats(k).Area;%计算标签'k'对应的面积
    metric = 4*pi*area/perimeter^2;%计算圆度
    metric_string = sprintf('%2.2f',metric);%显示结果

    %如果圆度大于阈值threshold,则用黑色圆圈绘制圆心(代表为圆)
    if metric > threshold
        centroid = stats(k).Centroid;
        plot(centroid(1),centroid(2),'ko');
    end

    text(boundary(1,2)-35,boundary(1,1)+13,metric_string,'Color','y',...

       'FontSize',14,'FontWeight','bold')   %在边界左侧显示圆度

end
title('指标越接近1代表越接近圆形');

运行效果如下:

MATLAB示例——图像中圆的识别与判断

上述即为完整代码的各个步骤,完整代码也可参考资源:https://download.csdn.net/download/didi_ya/85299183

ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~

Original: https://blog.csdn.net/didi_ya/article/details/124605106
Author: wendy_ya
Title: MATLAB示例——图像中圆的识别与判断

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/519821/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球