我需要用MatLab计算图像上的粉笔数量。我试图将我的图像转换为灰度图像,而不是分配边框。此外,我试图将我的图像转换为二进制图像,并使用它进行不同的形态操作,但我没有得到理想的结果。可能是我做错了什么。请帮帮我!
我的形象:
答案 0 :(得分:1)
您可以使用粉笔色彩鲜艳且分隔符为灰色的事实。使用rgb2hsv
将图像转换为HSV颜色空间,并获取饱和度分量。阈值,然后尝试使用形态分离粉笔片。
答案 1 :(得分:1)
好的,所以我花了一点时间研究这个 - 但不幸的是我今天没时间了,我为不完整的答案道歉,但也许这会让你开始 - (如果你需要更多的帮助,我和# 39;将在周末编辑这篇文章给你一个更完整的答案:))
这是代码 -
for i=1:3
I = RWBDS(:,:,i);
se = strel('rectangle', [265,50]);
Io = imopen(I, se);
Ie = imerode(I, se);
Iobr = imreconstruct(Ie, I);
Iobrd = imdilate(Iobr, se);
Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));
Iobrcbr = imcomplement(Iobrcbr);
Iobrcbrm = imregionalmax(Iobrcbr);
se2 = strel('rectangle', [150,50]);
Io2 = imerode(Iobrcbrm, se2);
Ie2 = imdilate(Io2, se2);
fgm{i} = Ie2;
end
fgm_final = fgm{1}+fgm{2}+fgm{3};
figure, imagesc(fgm_final);
它仍然会拾取图像侧面的边缘,但是从这里开始您将使用连接的bwconnectedcomponents
,并且您将获得主轴和短轴的长度,通过查看对象的比例,它将摆脱那些。
无论如何祝你好运!
编辑: 我更多地使用了代码,并使用新结果更新了上面的代码。在我能够摆脱一边"噪音"它也摆脱了侧面的粉笔。我想我只是留下了两个。
我做了什么:在大多数情况下,转换到HSV色彩空间是可行的方法,但正如@rayryeng所示,这不是这里的方法。当有一种颜色时,Hue的效果非常好 - 例如,所有的粉笔都是红色的。 (从逻辑上讲,你会认为使用颜色通道会更好,但事实并非如此。)然而,在这种情况下,所有白垩的唯一共同点是相对形状。我的解决方案基本上使用了这个概念,将结构元素se
设置为粉笔的基本形状和比例以及执行形态操作 - 正如您最初猜测的那样。
有关详细信息,建议您阅读有关这些特定功能的matlab文档。
我会让你弄清楚如何根据我给你的东西得到最后一支粉笔:)
答案 2 :(得分:1)
这也不是一个完整的解决方案,但希望它可以为您或其他人提供一个起点。
像迪马一样,我注意到粉笔颜色鲜艳,而分隔线几乎是灰色的。我以为你可以尝试隔离灰色像素(灰色像素表示红色=蓝色=绿色)并从那里开始。我尝试应用过滤器并进行形态学操作,但找不到令人满意的东西。不过,我希望这有帮助
SELECT det1.baseData AS det11
, det2.baseData AS det22
, det3.baseData AS det33
FROM ( SELECT '500' AS aid
UNION ALL SELECT '503'
UNION ALL SELECT '505'
UNION ALL SELECT '507'
UNION ALL SELECT '509'
) q
LEFT
JOIN xy det1 ON det1.aid = q.aid AND det1.z = '20'
LEFT
JOIN xy det2 ON det2.aid = q.aid AND det2.z = '25'
LEFT
JOIN xy det3 ON det3.aid = q.aid AND det3.z = '40'
ORDER BY q.aid