如何在matlab中拉直手绘线?
我正在做一个图像处理项目,我需要检测角点。但当我尝试使用如何在matlab中拉直手绘线?,matlab,image-processing,corner-detection,image-morphology,Matlab,Image Processing,Corner Detection,Image Morphology,我正在做一个图像处理项目,我需要检测角点。但当我尝试使用corner函数检测角点时,它会将小位移检测为角点,如图所示 我尝试了从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,'Ma
corner
函数检测角点时,它会将小位移检测为角点,如图所示
我尝试了从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:
以下是完整尺寸的原始图像和输出图像:
您遇到的问题是,
角点
函数是哈里斯角点检测器,用于查找填充多边形的角点
现在一条线可以用一个非常薄的多边形来近似,当然是在像素化时,但这并不像你们在这里注意到的那个样完美
一种更稳健的方法是使用类似Hough变换的方法来查找图像中的线条特征。这些线将有交叉点,其中一些近似于所需的角。另一些是伪交点,因为Hough变换假定直线而不是线段。你需要尝试一下你接受什么和拒绝什么。在你不再称之为角之前,角可以有多圆 也许你想要的是Peucker的算法?查看维基百科Ramer–Douglas–Peuckeralgorithm@MarkSetchell:这里可能有些过火,但基本想法是合理的。您的“起始图像”与您的“结果图像”不匹配,因此很难看出是什么导致OpenCV认为存在角点。请出示包含“角点”的完整开始图像好吗?@MarkSetchell:我马上也想到了OpenCV,但这实际上与OpenCV无关。@MarkSetchell我已经更新了问题,感谢Hanks关于Harris角点检测器的提示。。关于hough变换,我已经尝试使用hough变换来检测线条,但也遇到了同样的问题,因为线条的手绘性质,并不是所有的线条都被检测到。我在这里发布了一个问题:这就是为什么我尝试使用角点检测,这样我可以连接角点,在它们之间形成直线,取代不完美的线