【问题标题】:How to crop out a detected circle as a square?如何将检测到的圆圈裁剪为正方形?
【发布时间】:2017-09-13 10:58:30
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: matlab image-processing crop


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。完美运行!
    • @Powisss 您还可以使用I2 = imcrop 以交互方式裁剪圆圈以获得所需的图像。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多