我将在此项目中使用的空间分辨率图像为1000x563。我在这一步骤中的目标是 删除所有不需要的白色像素而不是号牌 ,这样我就可以准确地分割印版。但问题是我无法清楚地删除那些不需要的像素。有人可以帮我改进代码吗?
自:
然后,
然后,
最后,
当您观察到最后一张图像时,仍有相当多的不需要的白色像素。请帮忙 !!
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,[]);
答案 0 :(得分:4)
您可能需要考虑使用Stroke Width Transform。可以找到Matlab实现here。 此变换用于检测自然图像中的文本。它的设计目的是在比您更具挑战性的环境中工作。所以,我想你应该试一试。
答案 1 :(得分:0)
图片中的号牌是否总是相同(至少大约)?
如果是这样你可以看一些固定大小的像素补丁,可能与其他像素有一些重叠,如果白色像素的数量高于某个阈值,则留下它们,否则将它们涂成黑色。
或者只是标记它们,如果还要清洁周围的补丁,则将它们涂成黑色。