MATLAB测胶粒半径(1)2018-10-28

刚开始用python ,霍夫圆,检测,但是图片中有很多重叠的圆,hough变换就不一定好用了。
可以阈值分割,胶粒和周围颜色有明显边界,
然后用regionprops函数
土豆洋芋山药蛋
图像分割+连通域统计与标注——MATLAB

MATLAB文档里有说明

MATLAB代码:

regionprops方法:

clc,clear
    clf;
    i=imread('C:\Users\liulang\Desktop\untext.jpg');
    I=rgb2gray(i);   %转成灰度图

    %输出直方图
    % figure;imhist(I);
    %人工选定阈值进行分割,选择阈值代码在上面两个博客中
      %自动选择阈值 
    T2=graythresh(I);
    BW2=im2bw(I,T2);%Otus阈值进行分割
    
    imshow(I,[]);hold on;


          [l,m] = bwlabel(BW2);
          status=regionprops(l,'BoundingBox');
          %圆心,半径,画圆
         stats = regionprops('table',BW2,'Centroid',...
             'MajorAxisLength','MinorAxisLength')
    centers = stats.Centroid;
    diameters = mean([stats.MajorAxisLength stats.MinorAxisLength],2);
    radii = diameters/2;%半径
    hold on
    viscircles(centers,radii);
    hold off
         centroid = regionprops(l,'Centroid');
          imshow(I,[]);

imfindcircles方法:

查了MATLAB 官网,还有一种方法;怎么感觉这种方法很简洁呢。

image.png

clc;clear;close all;
 i=imread('C:\Users\liulang\Desktop\untext.jpg');%打开图片
 imshow(i,[]);%显示图片
 Rmin = 5;%最小半径以像素为单位
Rmax = 25;%最大半径
[centersBright, radiiBright] =
 imfindcircles(i,[Rmin Rmax],'ObjectPolarity','bright');%把bright改乘dark就是测外圈适应不同需求,还可以内圈外圈各测一遍取平均值。
%找到图片中在最大最小半径区间内亮亮的圆
viscircles(centersBright, radiiBright,'Color','b');%画圆,颜色,线型
jiaoli=radiiBright/2.517;%像素长度与um转换,
text(centroid(i,1).Centroid(1,1)-15,centroid(i,1).Centroid(1,2)-15, num2str(i),'Color', 'r')     
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.基本语法 src = cv.imread("E:\\1.jpg") //获取图片位置 cv.namedWi...
    JackHCC阅读 4,647评论 0 3
  • 本文转自 python数字图像处理 霍夫线变换 在图片处理中,霍夫变换主要是用来检测图片中的几何形状,包括直线、圆...
    jiandanjinxin阅读 33,530评论 6 23
  • 0 瞎弄 我知道你们喜欢先看效果 手残的我,始终跳不过你们这些超过 50 分的大佬。想起最近在用 Python 学...
    毛小嘉阅读 4,747评论 2 15
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,026评论 3 119
  • 解决大数据分页的效率问题: 记录当前访问页的数据ID,在发送下一页的访问请求时,SQL语句中进行约束(id>pag...
    马小跳_阅读 506评论 0 0