从matlab中的图像中提取粉笔线

时间:2016-05-01 23:33:03

标签: matlab image-processing feature-extraction

我想从图像中提取草地上的粉笔线。一个例子如下。这是我到目前为止所尝试的:

  • 将图像转换为HSV,然后根据草的颜色应用色调过滤器。然而,这种方式起作用,它不是很强大。一旦我让它为一个图像工作,下一个图像似乎没有相同的色调。
  • 将niblack阈值应用于图像的灰度版本,然后应用一些图像形态来滤除噪声。同样,这似乎是情境化的,有些图像可以工作,但有些图像则不然。

这些方法是否朝着正确的方向发展?有没有办法“标准化”色调,以便我可以应用色调过滤器?我尝试在线搜索,但是一旦你使用“线”工作,绝大多数结果都是在黑色背景上进行细线提取。

我的下一步是制作一个“自适应”色调阈值。草覆盖了大部分图像。首先找到覆盖(例如90%)值的色调范围,然后根据该范围而不是固定范围进行过滤。

Chalk and grass

更新

“自适应”阈值似乎对此图像起作用。但是当图像中有更多噪点时,它也无法正常工作。该范围基本上涵盖了所有色调值。

这是我用来计算过滤掉的色调范围的代码:

img = imread('image.jpg');
hsv = rgb2hsv(img);
h = hsv(:,:,1);
[counts, edges] = histcounts(h,360);
[maxCount, maxInd] = max(counts);

total = sum(counts);
rng = [maxInd, maxInd];
while (sum(counts(rng(1):rng(2)))/total) < 0.89
    rng(1) = rng(1) - 1;
    if(rng(1) < 1)
        rng(1) = 360;
    end
    rng(2) = rng(2) + 1;
    if(rng(2) > 360)
        rng(1) = 1;
    end
end

通过上面的图像,我得到了这个结果(我可能会添加得非常好):

result of adaptive threshold

但是有了更嘈杂的图像(更多阴影,棕色斑点等),我的范围几乎为0到360. Here是上述算法不起作用的示例。

0 个答案:

没有答案