我有各种各样的点,它们应该是不同线条的一部分(见下图)。我想要做的是将属于同一行的点分组。为此,我进行了霍夫变换,将笛卡尔坐标转换为极坐标。我需要做的是在霍夫平面中找到交叉点的位置;你有什么建议怎么做吗?
这就是我现在正在做的事情:
将阈值应用于霍夫变换的图像,以便 仅考虑具有至少一半最大强度的像素
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
在相应的图像中找到斑点
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
找到blob的质心
Ilabel = bwlabel(hist_bin_clean);
stat = regionprops(Ilabel,'centroid');
您可以在下面的第二张图片中看到结果,白色箭头指向质心。我希望它比左边高几个像素......你会如何改善结果呢?