MATLAB中的轮廓线边缘检测

时间:2015-10-13 14:55:55

标签: matlab image-processing edge-detection canny-operator

我有一个项目来检测this图像中的轮廓线,但是当我用canny边缘检测算法运行我的代码时,图像中的一行转换为两行,因为两次改变是之前和之后的线的灰度值。

<xsl:stylesheet version="2.0" 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns="http://www.w3.org/2000/svg"
   xpath-default-namespace="http://www.loc.gov/standards/alto/ns-v2#"
   >

我不知道要解决这个问题,请帮帮我。

1 个答案:

答案 0 :(得分:0)

最佳答案取决于您在检测到边缘后要对边缘做什么,但我们假设您只想生成一条图像,其中线条为纯黑色,其他一切都是纯白色... < / p>

最简单的方法是阈值图像,以便较浅的灰色像素变为白色,较暗的灰色像素变为黑色。您还可以侵蚀图像以尝试减少线条的粗细 - 尽管您会发现这样可以消除样本图像中的精细轮廓。

以下是执行此操作的代码(假设您的工作文件夹中包含图像 G4.jpg )。

% load image and convert to double (0 to 1) as well as flip black and white
imG4 = imread('G4.jpg');
imG4_gs = 1 - mean(double(imG4)/255,3);

figure
image(64*(1 - imG4_gs))
colormap('gray');
axis equal

% image grayscale threshold
img_thr = 0.25;

% apply threshold to image
imG4_thr = imG4_gs >= img_thr;

figure
image(64*(1 - imG4_thr))
colormap('gray');
axis equal

% erode image (try "help imerode" in the MATLAB console)
imG4_ero = imerode(imG4_thr,strel('disk',1));

figure
image(64*(1 - imG4_ero))
colormap('gray');
axis equal;