使用边缘梯度和方向的圆形霍夫变换

时间:2014-12-06 14:22:32

标签: matlab image-processing geometry detection hough-transform

我目前正在忙于实施两个圆形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

0 个答案:

没有答案