引言
自动检测图像中的圆形或圆形对象,并可视化检测到的圆形。
函数详解
imfindcircles
imfindcircles
是MATLAB中的一个函数,用于在图像中检测并找出圆形区域。
基本语法:
[centers, radii] = imfindcircles(A, radiusRange)
[centers, radii, metric] = imfindcircles(A, radiusRange, Name, Value)
参数详解:
A
:输入图像,应为一个二维灰度或二值图像。radiusRange
:一个包含两个元素的向量,定义了要检测的圆的半径范围。例如,[20 25]
表示检测半径在20到25之间的圆。Name, Value
:指定附加的参数名称/值对。例如,你可以指定对象的极性(“ObjectPolarity”)、敏感度(“Sensitivity”)和边缘阈值(“EdgeThreshold”)。
返回值详解:
centers
:一个Nx2的矩阵,表示N个检测到的圆的中心点的x和y坐标。radii
:一个Nx1的向量,表示N个检测到的圆的半径。metric
:一个Nx1的向量,表示每个检测到的圆的度量值。度量值越高,检测到的圆越可能是真实的圆。
viscircles
viscircles
是MATLAB中的一个函数,用于在图像上绘制圆形。
基本语法:
h = viscircles(centers, radii)
h = viscircles(centers, radii, Name, Value)
参数详解:
centers
:一个Mx2的矩阵,表示M个圆的中心点的x和y坐标。例如,如果你有两个圆,其中心分别为(1,2)和(3,4),那么centers
就应该是[1 2; 3 4]
。radii
:一个Mx1的向量,表示M个圆的半径。例如,如果你有两个圆,其半径分别为5和6,那么radii
就应该是[5; 6]
。Name, Value
:指定附加的参数名称/值对。例如,你可以指定圆的颜色、线宽等。
返回值详解:
h
:一个句柄,指向由viscircles
函数创建的图形对象。你可以使用这个句柄来修改或删除这些对象。例如,你可以使用delete(h)
来删除这些对象。
应用案例
% 读取图像文件
img = imread("coloredChips.png");
% 显示图像
imshow(img, []);
% 使用imfindcircles函数在图像中查找暗色的圆,半径在20到25之间
% "ObjectPolarity"设置为"dark"表示查找暗色的圆
% "Sensitivity"设置为0.95,这是检测算法的灵敏度
[centersDark, radiiDark] = imfindcircles(img, [20 25], "ObjectPolarity", "dark", "Sensitivity", 0.95)
% 使用viscircles函数在图像上画出找到的暗色的圆
hDark = viscircles(centersDark, radiiDark);
% 使用imfindcircles函数在图像中查找亮色的圆,半径在20到25之间
% "ObjectPolarity"设置为"bright"表示查找亮色的圆
% "Sensitivity"设置为0.95,这是检测算法的灵敏度
% "EdgeThreshold"设置为0.1,这是检测算法的边缘阈值
[centersBright, radiiBright, metricBright] = imfindcircles(img, [20 25], "ObjectPolarity" ,"bright", "Sensitivity", 0.95, "EdgeThreshold", 0.1)
% 使用viscircles函数在图像上画出找到的亮色的圆,颜色设置为蓝色
hBright = viscircles(centersBright, radiiBright, "Color", "b");