我需要用MatLab计算图像上的粉笔数量。我尝试将图像转换为灰度图像,然后分配边框。我还尝试将图像转换为二进制图像,并对其执行不同的形态学操作,但没有得到期望的结果。也许是我做错了什么。请帮助我!
我的图片:
我的图片:
rgb2hsv
将图像转换为HSV颜色空间,并取饱和度分量。对其进行阈值处理,然后尝试使用形态学方法分离粉笔碎片。mim = imread('http://i.stack.imgur.com/RWBDS.jpg');
%we average all 3 color channels (note this isn't exactly equivalent to
%rgb2gray)
grayscale = uint8(mean(mim,3));
%now we say if all channels (r,g,b) are within some threshold of one another
%(there's probabaly a better way to do this)
my_gray_thresh=25;
graymask = (abs(mim(:,:,1) - grayscale) < my_gray_thresh)...
& (abs(mim(:,:,2) - grayscale) < my_gray_thresh)...
& (abs(mim(:,:,3) - grayscale) < my_gray_thresh);
figure(1)
imshow(graymask);
好的,我花了一些时间来处理这个问题- 但不幸的是,今天我已经没有时间了,对于不完整的答案我感到抱歉,但也许这会让你有所启发-(如果你需要更多帮助,我会在周末编辑这篇文章,给你一个更完整的答案:))
以下是代码-
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);
更多细节请参阅Matlab有关这些特定函数的文档。
根据我给你的提示,你可以自己找出如何获取最后一个粉笔 :)