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

How to crop out a detected circle as a square?

我检测到一个圆,如下图:

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

当程序完成时,它会告诉我中心在哪里以及终端中的半径。

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');

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

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

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