我目前正在忙于实施两个圆形Hough变换。最后一个是基于虹膜分割(http://www.cse.iitk.ac.in/users/naditya/Aditya_Nigam_icic2012P_C.pdf)的论文中描述的想法。 我试图实施每一步,但这种循环检测并没有给出任何积极和准确的结果。此外,当在包含没有噪声的简单圆的图像上运行该算法时,累加器矩阵中出现的最大值大多在3左右(这意味着只找到3个边缘点,投票给这个中心点......)。根据我的结果,我想这与我的代码中的错误有关?或许我忘了执行关键步骤?
% create binairy edge image
edgeImage = double(edge(image,'sobel'));
% create sobel masks
horizontalMaskSobel = fspecial('sobel');
verticalMaskSobel = fspecial('sobel')';
% calculate gradients
gradientX = imfilter(edgeImage,horizontalMaskSobel);
gradientY = imfilter(edgeImage,verticalMaskSobel);
% calculate the orientation for each edge within the image
orientationImage = atan2(gradientY,gradientX);
% create accumulator space
for y in searchwindow % height
for x in searchwindow % width
for r in radii;
if edgeImage(y,x) > 0 % bright enough?
cy1 = y + r*sin(orientationImage(y,x)-pi/2);
cx1 = x - r*cos(orientationImage(y,x)-pi/2);
cy2 = y - r*sin(orientationImage(y,x)-pi/2);
cx2 = x + r*cos(orientationImage(y,x)-pi/2);
if calculated coordinates within searchwindow
accumulator(cy1,cx1,r)++;
accumulator(cy2,cx2,r)++;
end
end
end
end
end