在嘈杂的Hough变换中找到交集

时间:2014-11-16 09:51:36

标签: matlab hough-transform

我有各种各样的点,它们应该是不同线条的一部分(见下图)。我想要做的是将属于同一行的点分组。为此,我进行了霍夫变换,将笛卡尔坐标转换为极坐标。我需要做的是在霍夫平面中找到交叉点的位置;你有什么建议怎么做吗?

这就是我现在正在做的事情:

  1. 将阈值应用于霍夫变换的图像,以便 仅考虑具有至少一半最大强度的像素

    max_Hough = max(max(Hough));
    for ii = 1:dim_X
        for jj = 1:dim_Y
            if Hough(ii,jj) > max_Hough*0.5
                Hough_bin(ii,jj) = Hough(ii,jj);
            end
        end
    end
    
  2. 在相应的图像中找到斑点

    se = strel('disk',1);
    Hough_final = imclose(Hough_bin,se);
    [L,num] = bwlabel(Hough_final);   
    % Let's exclude the single points
    counts = sum(bsxfun(@eq,L(:),1:num));
    valid_blobs = find(counts>threshold);
    number_valid = length(find(counts>threshold));
    
    if (number_valid~=0)
       for blob_num = (1:number_valid)
           for x = (1:dim_X)
               for y = (1:dim_X)
                   if (L(x,y) == valid_blobs(blob_num))     
                       hist_bin_clean(x,y) = Hough_final(x,y);
                   end
               end
           end
       end
    end
    
  3. 找到blob的质心

    Ilabel = bwlabel(hist_bin_clean);
    stat = regionprops(Ilabel,'centroid');
    
  4. 您可以在下面的第二张图片中看到结果,白色箭头指向质心。我希望它比左边高几个像素......你会如何改善结果呢?

    The points I need to group

    enter image description here

0 个答案:

没有答案