使用MATLAB检测圆

时间:2016-11-18 20:17:43

标签: matlab image-processing

我有一个灰度图像。我想检测标有红线的内圈(带油漆),然后从原始图像中裁剪出该区域。

enter image description here

我按照以下步骤操作:

I= imread('myimage');
bw = im2bw(I,graythresh(I));

bw = bwareaopen(bw,900);
[~, threshold] = edge(bw, 'sobel');
 fudgeFactor = .5;
im = edge(bw,'sobel', threshold * fudgeFactor);
[c,r] = imfindcircles(im,[1,20]);
viscircles(c,r);

问题是使用imfindcircles检测小圆圈而不是选择我的单个圆圈。我也不能使用circle_hough函数,因为它不在我的MATLAB中(在stackoverflow中看到一个例子)。那么如何在图像中检测我标记的圆圈并从原始图像I中裁剪其中的区域?

1 个答案:

答案 0 :(得分:0)

如果您确定将用于此目的的任何和所有图像都会产生类似的边缘(2个干净分离的圆圈),您可以执行以下操作:

1)使用带有小磁盘的imclose在边缘检测期间关闭任何可能的小的不连续性。

2)使用bwconncomp查找2个圈子。 bwconncomp的输出结构应该有2个元素,1对应于外圈,另一个对应于内圈。

3)搜索两个元素的pixelIDXlist,找到两个元素的最小x坐标。最小的元素是你的内圈。