代码

%% 圆度的计算
% 圆形需要是白色的,背景是黑色的,可以根据需要确定是否对图像进行反向
clc
clear;close all;
%
%读取源图像
I = imread('1.bmp');
% figure;imshow(I);
%
%灰度化、取反
h = I;
if ndims(h) == 3h = rgb2gray(I);
end
% figure;imshow(h);%灰度图像
% h = imcomplement(h);%取反
% figure;imshow(h);
%
%中值滤波、二值化
h = medfilt2(h,[4,4]);
bw = im2bw(h,graythresh(h));
%
%消除噪点
se = strel('disk',2);
bw = imclose(bw,se);
% figure;imshow(bw);
%
%填补闭合图形,填充色为白色
bw  = imfill(bw,'holes');
%
%边界寻找
[B,L] = bwboundaries(bw,'noholes');
% 为每个闭合图形设置颜色显示
figure;
imshow(label2rgb(L, @jet, [1 1 1]))
hold on
for k = 1:length(B)  boundary = B{k};  plot(boundary(:,2), boundary(:,1), 'b', 'LineWidth', 2)
end
%
%计算面积
roundness = zeros(size(B,1), 3); %圆度的统计值,将图形中每个分离的连通区域的周长、面积和圆度值记录下来
stats = regionprops(L,'Area','Centroid');
threshold = 0.94;% 循环处理每个边界,length(B)是闭合图形的个数,即检测到的陶粒对象个数
for k = 1:length(B)  % 获取边界坐标'  boundary = B{k};  % 计算周长  delta_sq = diff(boundary).^2;  perimeter = sum(sqrt(sum(delta_sq,2)));  % 对标记为K的对象获取面积  area = stats(k).Area;  % 圆度计算公式4*PI*A/P^2  metric = 4*pi*area/perimeter^2;  % 结果显示  roundness(k,:) = [perimeter, area, metric ];metric_string = sprintf('%2.2f',metric);  % 用一个黑色小圆圈标记圆度大于threshold = 0.94 的对象if metric > threshold  centroid = stats(k).Centroid;
%         plot(640-centroid(2), 640-centroid(1),'wo');  plot(centroid(1), centroid(2),'ko');  text(centroid(1), centroid(2),metric_string,'Color','r',...  'FontSize',14,'FontWeight','bold');end
end
title('圆度识别结果,越圆越接近1,');
%% 以下两种方法均可以提取出连通区域的面积
% method 1
a = struct2cell( stats );
b = a(1,:);
c = cell2mat( b );
figure,plot(c)
% method 2
% d = struct2array( stats );
% e = d(1:3:end);
% figure,plot(e)

图片

原图

处理后的图片

matlab 求图像的连通区域的圆度并可视化相关推荐

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

    使用MATLAB求图像的形心.外接矩形顶点坐标并标记 1. 求图像形心使用自带函数regionprops标记 2. 求图像外接矩形顶点坐标并标记 欢迎学习交流! 邮箱: z-@1-6.com 网站: ...

  2. 通过并查集进行图像的连通区域实现

    通过"并查集"进行图像的连通区域实现 并查集是个什么概念也是通过刷题刷到的,然后就稍微了解了下 小白记录并查集自己实现图像连通区域问题 完整代码放在最后面 并查集可以自己谷歌,目前 ...

  3. matlab求图像暗通道图像,基于暗通道先验条件图像去雾算法

    基于暗通道先验条件图像去雾算法 香港大学何凯明博士于2009发表了一篇论文<Single Image Haze Removal Using Dark Channel Prior>.在文章中 ...

  4. 基于matlab得图像感兴趣区域提取

    对于图像感兴趣区域(ROI)的提取,一般从来两个方面着手解决:一是利用图像分割技术提取ROI:二是从人眼得视觉特征出发,通过模拟人眼得视觉特点,寻找特定得视觉敏感区域,并将这些视觉敏感区域排序作为RO ...

  5. matlab求图像的能量图,如何计算图像的能量

    夫兰克-赫兹实验[实验目的] 本实验通过对氩原子第一激发电位的测量,了解夫兰克和赫兹在研究原子内部能量问题时所采用的基本实验方法:了解电子与氩原子碰撞和能量交换过程的微观图象和影响这个过程的主要物理因 ...

  6. MATLAB 求图像的极大值极小值,平均值

    I=imread('c:/lena.jpg'); imshow(I); [m n]=size(I); min=256; max=0;avg=0; for i=1:mfor j=1:nif I(i,j) ...

  7. c++读出像素矩阵_Python传numpy矩阵调c++(求3D图像连通区域)

    Python有很多种调c++的方法,有的复杂有的简单,有时使用的时候反而不知道到底该用哪一种比较好,其实没有最好的方法,只有适合不适合自己.本文从我所遇到的问题说起,然后讲述另一种比较简单的pytho ...

  8. matlab bwlabel标记连通区域

    [L,num] = bwlabel(BW,n) 这里num返回的就是BW中连通区域的个数.返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1.2.num(连通区 ...

  9. 圆度计算matlab程序,基于MATLAB的圆度误差数据处理

    0 引言 圆度误差是指回转体在同一正截面上实际被测轮廓相对其理想圆的变动量[1].它是衡量圆柱形零件形状精度的重要指标之一,误差的大小将严重影响其工作性能.因此,在设计机器和仪器时根据零件的功能要求须 ...

最新文章

  1. spl_autoload_register与autoload区别
  2. @Override is not allowed when implementing interface method
  3. Mac解决中文matplotlib乱码问题
  4. 07/11/13 资料整理
  5. 深入理解RunLoop(转载)
  6. python实现排序_python实现以及所有排序大总结【转】
  7. 卡尔曼滤波与组合导航原理_卫星知识科普:一种基于卫星共视的卡尔曼滤波算法!...
  8. QT的QUiLoader类的使用
  9. 分享一批国内常用的tracker地址
  10. GCD牛逼的中枢调度器
  11. 【转】牛人杰作 管饭哥登场
  12. 英语学习笔记2019-12-06
  13. python软件下载安装-【Python下载】Python安装 v3.8.1 官方版-七喜软件园
  14. 精简的Linux启动过程
  15. 遗传算法原理及代码讲解
  16. android+实时ping工具,安卓ping测试工具
  17. node.js 执行JS文件连接数据库报错
  18. fiddler和wireshark对比
  19. 【openGL基础系列】之画一个正方体玩玩吧
  20. RobotStudio 项目移植问题——无法创建系统

热门文章

  1. AWE GAE MEGOO 和 提高性能的INTEL的C++重新编译 BigTable是什么东东
  2. Qt安装—图文并茂搭建VS2008/2010+QT开发环境
  3. 一个好用的文件传输软件FileZilla
  4. linux五子棋程序,Linux/GNU下 五子棋
  5. Redis系列8-cluster(2)
  6. linux history命令原理,Linux 的 history 命令使用详解
  7. 发票单(jQuery代码实现)
  8. Android项目结构(翻译)
  9. 硝烟中的scrum和XP——我们如何实施scrum读后笔记
  10. 起底半成品生鲜行业之殇,下一步如何破局?