我有一个灰度图像。我想检测标有红线的内圈(带油漆),然后从原始图像中裁剪出该区域。
我按照以下步骤操作:
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
中裁剪其中的区域?
答案 0 :(得分:0)
如果您确定将用于此目的的任何和所有图像都会产生类似的边缘(2个干净分离的圆圈),您可以执行以下操作:
1)使用带有小磁盘的imclose
在边缘检测期间关闭任何可能的小的不连续性。
2)使用bwconncomp
查找2个圈子。 bwconncomp
的输出结构应该有2个元素,1对应于外圈,另一个对应于内圈。
3)搜索两个元素的pixelIDXlist,找到两个元素的最小x坐标。最小的元素是你的内圈。