如何将检测到的圆裁剪成正方形?
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)
对于多个圈子,您可以对循环返回的每个圈子执行此过程。
我检测到一个圆,如下图:
稍后我想检测检测到的标志中的限速,如何将其裁剪掉以便留下如下图?
当程序完成时,它会告诉我中心在哪里以及终端中的半径。
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)
对于多个圈子,您可以对循环返回的每个圈子执行此过程。