Я генерирую случайное число от 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, поэтому я могу использовать его результаты.
Заранее спасибо