0
点赞
收藏
分享

微信扫一扫

基于计算机视觉实现圆的识别附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

基于计算机视觉实现圆的识别附matlab代码

⛄ 代码

%圆的识别

close all;clear all;clc;

%% I.读取图像

I = imread('pillsetc.png');

figure(1),imshow(I);%显示原始图像


%% II.灰度化、二值化

I2 = rgb2gray(I);%灰度化

bw = imbinarize(I2);%二值化

figure(2),imshow(bw)

%% III.形态学处理

%删除包含少于 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);

%% IV.寻找边界

[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

%% V.判断圆形

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代码_二值化

基于计算机视觉实现圆的识别附matlab代码_二值化_02

基于计算机视觉实现圆的识别附matlab代码_图像处理_03

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


举报

相关推荐

0 条评论