如何使用 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 个圆。
代码说明:
- 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 个孔。
代码说明:
- k1=rgb2gray(k1);此行将彩色图像转换为灰度。
- k2=im2bw(k1,graythresh(k1));这条线将灰度转换为二值图像。
- b=bwlabel(k3,8);此行应用连通分量分析。
- c=独特的(b);此行查找唯一标签。
- 最大值(c);此行找到最大值。
- imtool(b,[]);此行显示彩色地图图像。