如何将检测到的圆圈裁剪成方形?

时间:2017-04-17 19:16:52

标签: matlab image-processing crop

我检测到一个圆圈,如下所示:

稍后我想检测检测到的标志中的速度限制,如何将其裁剪掉,以便留下如下图像?

当程序完成时,它会显示中心的位置和终端的半径。

centers =

  248.4873  170.4811


radii =

   24.5024

我知道如何使用imcrop但是我如何使用返回的值而不是自己写入它们,因为可能检测到超过1个圆圈?

代码:

I = imread('p1.tif');
subplot(3,3,1); imshow(I); title('Original Image'); 
%sharpen edges
B = imsharpen(I);
subplot(3,3,2); imshow(B); title('sharpened edges');

%find circles
Img = im2bw(B(:,:,3));
minRad = 20;
maxRad = 90;
[centers, radii] = imfindcircles(Img, [minRad maxRad], ...
                                    'ObjectPolarity','bright','sensitivity',0.87)
imagesc(Img);
viscircles(centers, radii,'Color','green');

1 个答案:

答案 0 :(得分:2)

假设你有一个中心和一个半径。这应该这样做

rect = [centers(1)-radii,centers(2)-radii,2*radii,2*radii]
I2 = imcrop(I,rect)

对于多个圆圈,您可以为循环中返回的每个圆圈执行此过程。