2017-04-17 7 views
1

J'ai détecté un cercle comme indiqué ci-dessous:Comment rogner un cercle détecté en tant que carré?

Comme plus tard, je veux détecter quelle limite de vitesse est le signe détecté, comment puis-je recadrer en sorte que je suis parti avec une image comme au dessous de?

Lorsque le programme il termine, il me montre où le centre est et les rayons dans le terminal.

centers = 

    248.4873 170.4811 


radii = 

    24.5024 

Je sais comment utiliser imcrop mais comment puis-je utiliser les valeurs qui sont retournées au lieu d'écrire en moi-même, comme il pourrait y avoir plus de 1 cercle détecté?

code:

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

Répondre

2

En supposant que vous avez un centre et un rayon. Cela devrait le faire

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

Pour les cercles multiples, vous pouvez effectuer ce processus pour chacun des cercles retournés dans une boucle.

+0

Merci. Fonctionne parfaitement! – Powisss

+0

@Powisss Vous pouvez également recadrer interactivement le cercle en utilisant 'I2 = ​​imcrop' pour l'image requise. – Tes3awy