如何在图像中找到圆圈?

时间:2016-11-21 14:50:38

标签: matlab octave

首先,我使用Octave。  我的目的是在此图像中找到下一个圆圈。我不知道,中心,我不知道半径。我想知道如何知道这些元素。 我发现了这个:

Circle detection from gray level image in MATLAB

A = imread('deformation_somb.jpg');

%// Some pre-processing. Treshold image and dilate it.
B = im2bw(A,.85);

se = strel('disk',3);

C = imdilate(B,se);

D = bwareaopen(C,10000);

%// Here imfill is not necessary but you might find it useful in other situations.
E = imfill(D,'holes');

%// Detect edges
F = edge(E);

%// circle_hough from the File Exchange.

%// This code is based on Andrey's answer here:
%http://dsp.stackexchange.com/questions/5930/find-circle-in-noisy-data.

%// Generate range of radii.
 radii =10:5:pixel_x1;
h = hough_circle(F, radii,'same');
[~,maxIndex] = max(h(:));
[i,j,k] = ind2sub(size(h), maxIndex);
radius = radii(k);
center.x = j;
center.y = i;

%// Generate circle to overlay
N = 200;

theta=linspace(0,2*pi,N);
rho=ones(1,N)*radius;

%Cartesian coordinates
[X,Y] = pol2cart(theta,rho); 

figure;

subplot(2,2,1)
imshow(B);
title('Thresholded image  (B)','FontSize',16)

subplot(2,2,2)
imshow(E);
title('Filled image (E)','FontSize',16)

subplot(2,2,3)
imshow(F);hold on

plot(center.x-X,center.y-Y,'r-','linewidth',2);

title('Edge image + circle (F)','FontSize',16)

subplot(2,2,4)
imshow(A);hold on
plot(center.x-X,center.y-Y,'r-','linewidth',2);
title('Original image + circle (A)','FontSize',16)

我发现了hough_circle功能,但我没有工作。 我试着做下一个过程:

我做了:

bw = edge(im); 
accum = hough_circle(bw, [0,scale of image/2]) 

之后,我不知道如何找到半径和中心...我有矩阵,但我不知道如何挑选我的价值观。所以我尝试了另一个显式方法,它遵循我的主题

中的上一个链接

http://zupimages.net/up/16/47/yg3v.jpg

http://zupimages.net/up/16/47/8d6p.jpg

在前面的最佳代码链接中,我找到了下一个命令:strel 但是当我想启动这个函数时我有一个错误:在这个上下文中strel si作为类名无效....

有你的想法吗?

提前谢谢

于连

0 个答案:

没有答案