如何在matlab中拉直手绘线?

时间:2016-04-07 09:41:25

标签: matlab image-processing corner-detection image-morphology

hand drawn line with irregularities

我正在处理一个需要检测角落的图像处理项目。但是当我尝试使用corner函数检测角点时,它会将小位移检测为角点,如图所示。 Wrong detection of corners

我尝试过从0到0.24的不同阈值,无法获得食物结果。

imgskele = bwmorph(imgfill,'thin',Inf);
C = corner(imgspur, 'SensitivityFactor', 0.24);
figure; imshow(imgspur);
hold on;
plot(C(:,1), C(:,2),'bo','MarkerSize',10,'MarkerFaceColor','g');
hold off;

所以我想调整(重新绘制)直线以使它成为连接这些点的直线

修改1:

以下是完整尺寸的原始图像和输出图像: enter image description here

1 个答案:

答案 0 :(得分:3)

你遇到的问题是corner函数是Harris角点检测器,它找到了填充多边形的一角。

现在一条线可以用非常薄的多边形来近似,当然是在像素化时,但是这并不像你在这里注意到的那样完美。

更健壮的方法是使用类似Hough变换的方法来查找图像中的线要素。这些线将有交叉点,其中一些大约是您想要的角落。其他是伪交叉,因为霍夫变换假设线而不是线段。您需要尝试一下您接受的内容和拒绝的内容。角落是多么圆润,在你不再称它为角落之前?