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

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

《MATLAB测胶粒半径(1)2018-10-28》 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 官网,还有一种方法;怎么感觉这种方法很简洁呢。

《MATLAB测胶粒半径(1)2018-10-28》 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')     
    原文作者:愉快先生
    原文地址: https://www.jianshu.com/p/ceb28f4acab1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞