2

我将在这个项目中使用的空间分辨率图像是 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,[]);
4

2 回答 2

4

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

于 2015-04-17T09:20:42.083 回答
0

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

于 2015-04-17T08:31:23.967 回答