📜  如何使用 MATLAB 计算给定数字图像中的圆数?

📅  最后修改于: 2022-05-13 01:55:46.695000             🧑  作者: Mango

如何使用 MATLAB 计算给定数字图像中的圆数?

在图像处理中,连通分量分析是一种自动计数和检查片段的技术。假设,我们有一个由小圆圈组成的图像。图像中有数百个圆圈。我们需要计算圈数。如果我们手动计算会花费很多时间,但结果可能不正确。另一方面,我们可以使用连通分量分析来轻松准确地计算数字。

一个必要条件是我们有兴趣计算的线段或形状应该彼此断开。由一个共同像素连接的两个圆将计为 1。因此,主要和必要条件是每个形状必须分开。

脚步:

  • 读取输入图像。
  • 将彩色图像转换为灰度。
  • 创建一个圆盘形结构元素。
  • 使用结构元素对图像进行腐蚀。
  • 应用连通分量分析并标记分量。
  • 计算标签。
  • 显示结果。

使用的功能:

  • imread( ) 内置函数用于读取图像。
  • rgb2gray( ) 内置函数用于将 RGB 图像转换为灰度图像。
  • strel( ) 内置函数用于定义结构元素。
  • imerode() 内置函数用于执行腐蚀。
  • bwlabel( ) 内置函数用于应用连通分量分析。
  • imtool( ) 内置函数用于显示图像。
  • max( ) 内置函数用于在所有值中查找最大值。

例子:

Matlab
% MATLAB code for count the
% number of circles in the image.
% read the colored image.
k=imread("CCA1.png");
 
% Convert into grayscale.
k=rgb2gray(k);
 
% Create the structuring element.
SE=strel('disk',9,0);
 
% Erode the image to disconnect the circles.
k1=imerode(k,SE);
 
% Display the image.
imtool(k1);
 
% Apply connected component analysis.
b=bwlabel(k1,8);
 
% Find the unique component labels.
c=unique(b);
 
% Print the last component label.
max(c);
 
% Display the coloured map.
imtool(b,[]);


Matlab
% MATLAB code for
% Connected Component Analysis
% Read the colored image.
k=imread("7.jpg");
 
% Resize the image for it is large.
k1=imresize(k,0.3);
 
% Convert to grayscale.
k1=rgb2gray(k1);
 
% Display the image.
imtool(k1,[]);
 
% Convert it into binary image.
k2=im2bw(k1,graythresh(k1));
 
% Display the binary image.
imtool(k2,[]);
 
% Reverse the binary image.
k3=1-k2;
 
% Display the reversed binary image.
imtool(k3,[]);
 
% apply connected component analysis.
b=bwlabel(k3,8);
 
% find the unique labels.
c = unique(b);
 
% Find the max value.
max(c)
 
% Display the colored map image.
imtool(b,[]);


输出: max=20 因此,输入图像中有 20 个圆。

图 1:原始图像

图 2:侵蚀图像

图 3:带标签的图像颜色立方体

代码说明:

  • k=rgb2gray(k);此行将彩色图像转换为灰度。
  • SE=strel('磁盘',9,0);这一行定义了结构元素。
  • k1=imerode(k,SE);这条线将计算侵蚀图像。
  • b=bwlabel(k1,8);此行将应用连通分量分析。
  • 最大值(c);此行将计算图像中的圆圈数。

示例 2:

MATLAB

% MATLAB code for
% Connected Component Analysis
% Read the colored image.
k=imread("7.jpg");
 
% Resize the image for it is large.
k1=imresize(k,0.3);
 
% Convert to grayscale.
k1=rgb2gray(k1);
 
% Display the image.
imtool(k1,[]);
 
% Convert it into binary image.
k2=im2bw(k1,graythresh(k1));
 
% Display the binary image.
imtool(k2,[]);
 
% Reverse the binary image.
k3=1-k2;
 
% Display the reversed binary image.
imtool(k3,[]);
 
% apply connected component analysis.
b=bwlabel(k3,8);
 
% find the unique labels.
c = unique(b);
 
% Find the max value.
max(c)
 
% Display the colored map image.
imtool(b,[]);


输出: max = 629,因此,蜂箱中有 629 个孔。

图 4:原始图像

图 5:二进制图像:砖是黑色的

图 6:二进制图像:砖是白色的

代码说明:

  • k1=rgb2gray(k1);此行将彩色图像转换为灰度。
  • k2=im2bw(k1,graythresh(k1));这条线将灰度转换为二值图像。
  • b=bwlabel(k3,8);此行应用连通分量分析。
  • c=独特的(b);此行查找唯一标签。
  • 最大值(c);此行找到最大值。
  • imtool(b,[]);此行显示彩色地图图像。