识别二进制图像中的曲线

时间:2016-01-18 17:04:53

标签: matlab curves

我有一个二进制图像,我想在其中检测曲线并输出曲线的坐标像素位置。图像是一个嘈杂的图像,我想检测水平运行的两条曲线。

我正在使用MATLAB执行图像分析。如果您能为我提供一些识别这些曲线的提示,那就太棒了。

示例图片:

enter image description here

2 个答案:

答案 0 :(得分:1)

如果图像保持这样,你可以采用一种非常简单的方法来逐行计算位数(但这仅适用于它们,如果它们保持水平或垂直)。这将为您提供沿y坐标的某种直方图,使您可以平均其中一条线的y坐标。

% Read the image
img = imread('To_detect_curves.png');
% Convert it to BW
img = rgb2gray(img);
% Get the size of the image for the loops
[width,height] = size(img);
bits_per_line = zeros(height,1);
% Sum over all lines (rows)
for idx=1:height
    bits_per_line(idx) = sum(img(idx,:));
end
plot(1:height,bits_per_line)

因此,您将获得以下内容,您可以轻松确定线条的Y坐标。

Result

这肯定无法帮助您处理更复杂的图像,但对于您提供的图像应该这样做。如果您有关于您想要做什么的更多信息,请告诉我们。

答案 1 :(得分:1)

使用canny edge detector。但是,为了使其运作良好,您将不得不阅读parameters that go into it和“小提琴”。我希望Canny边缘检测在这个数据集上做得很好。

edge(yourImageHere, 'canny')