删除不需要的白色像素用于板块分割Matlab

时间:2015-04-17 08:16:01

标签: algorithm matlab image-processing image-segmentation binary-image

我将在此项目中使用的空间分辨率图像为1000x563。我在这一步骤中的目标是 删除所有不需要的白色像素而不是号牌 ,这样我就可以准确地分割印版。但问题是我无法清楚地删除那些不需要的像素。有人可以帮我改进代码吗?

自: enter image description here 然后, enter image description here 然后, enter image description here 最后, enter image description here

当您观察到最后一张图像时,仍有相当多的不需要的白色像素。请帮忙 !!

ab=imread('image4.jpg');
ab=rgb2gray(ab);
level=graythresh(ab);
 ab=im2bw(ab,level);

ab=medfilt2(ab,[3 3]);


ab=edge(ab,'Canny');
figure(); imshow(ab);

Tmp = imfill(ab, 'holes'); %flood filling techniques
Tmp2 = imfill(Tmp-ab, 'holes'); 
Res = Tmp - imfill(ab & Tmp2, 'holes');
figure(); imshow(Res,[]); 


% keeping the white pixels area between 200 to 1000
LB = 200;        
UB = 1000;
Res = xor(bwareaopen(Res,LB),  bwareaopen(Res,UB));
figure, imshow(Res,[]);


se = strel('disk',2);        
Res = imerode(Res,se);
Res=imdilate(Res,se);


Res = bwareaopen(Res, 200);

figure();
imshow(Res,[]);

2 个答案:

答案 0 :(得分:4)

您可能需要考虑使用Stroke Width Transform。可以找到Matlab实现here。 此变换用于检测自然图像中的文本。它的设计目的是在比您更具挑战性的环境中工作。所以,我想你应该试一试。

答案 1 :(得分:0)

图片中的号牌是否总是相同(至少大约)? 如果是这样你可以看一些固定大小的像素补丁,可能与其他像素有一些重叠,如果白色像素的数量高于某个阈值,则留下它们,否则将它们涂成黑色。
或者只是标记它们,如果还要清洁周围的补丁,则将它们涂成黑色。