Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在matlab中拉直手绘线?_Matlab_Image Processing_Corner Detection_Image Morphology - Fatal编程技术网

如何在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变换来检测线条,但也遇到了同样的问题,因为线条的手绘性质,并不是所有的线条都被检测到。我在这里发布了一个问题:这就是为什么我尝试使用角点检测,这样我可以连接角点,在它们之间形成直线,取代不完美的线