Как преобразовать предполагаемый радиус круга в его действительный диапазон? - PullRequest
0 голосов
/ 10 января 2019

Я генерирую случайное число от 1 до 2 в качестве радиуса для моего круга. Затем я строю свой круг и сохраняю его в виде png. Кроме того, несколько точек данных генерируются как внутри, так и за пределами круга, чтобы сделать его шумным. Затем я буду использовать преобразование Хафа, чтобы оценить радиус круга, но число, которое он возвращает, больше 100. Хотя это те же самые круги (я построил график, чтобы убедиться).

Я пытался использовать функцию polyfit для отображения этих двух чисел, но в некоторых примерах предполагаемый радиус кажется меньшим, чем реальный. После сопоставления возвращает тот же номер. Например, случайный радиус равен 1,2, и Хау оценивает его как 110, однако кажется, что он должен быть около 1. (Потому что я строю его, и ясно, что он меньше). Также для Hough Transform я использую этот код https://www.mathworks.com/matlabcentral/fileexchange/35223-circle-detection-using-hough-transforms Я попробовал предопределенную функцию Matlab (imfindcircles), но она возвращает ноль для всех моих кругов.

r1 = 1 + abs((1)*randn(1,1));  %radius of inner circle
r1 = abs(r1);
r2 = (1.2)*r1;   %radius of outercircle
k  =  500;      %number of random numbers 

% circle coordinate points 
t  = 0:2*pi/59:2*pi;
xv = cos(t)';
yv = sin(t)';

%%%%%%%%random points

xq = 2*randn(k,1)-1;
yq = 2*randn(k,1)-1;     %distribution 1
xq1 = 2*(rand(k,1))-1;   %distribution 2
yq1 = 2*(rand(k,1))-1;
in = inpolygon(xq1,yq1,r1*xv,r1*yv);    %number of points inside the geometry 
in1= inpolygon(xq,yq,r2*xv,r2*yv);      %points inside outer circle
in2 = xor(in,in1);                      %points between circle
in3= inpolygon(xq1,yq1,r2*xv,r2*yv);    %points inside outer circle
fig = figure(22);hold on;


% Random points
 plot(xq(in2),yq(in2),'bo','MarkerFaceColor','r','MarkerSize',5,'Marker','o','MarkerEdgeColor','none');
axis equal;
    plot(xq1(~in2),yq1(~in2),'bo','MarkerFaceColor','r','MarkerSize',5,'Marker','o','MarkerEdgeColor','none');
 axis equal;

img= getframe(fig);
figure;
 imshow(img.cdata)
 hold on;
   [r,c,rad] = circlefinder(img.cdata);
   [m I] = max(rad);
       %ploting the bigest estimated circle
    angle = 2*pi*randn(k,1);
    haffpointX = rad(I).*cos(angle)+ c(I);
    haffpointY = rad(I).*sin(angle)+ r(I);

   scatter(haffpointX,haffpointY,'g');
   axis equal

Я ожидаю, что для разных случайных кругов с зашумленными данными Hough Transform оценивает свой круг с числом в диапазоне от 1 до 2, поэтому я могу использовать его результаты.

Заранее спасибо

...