前言

   项目算法需求,需要将车号区域字符分割出来,尝试过一些方法,比如投影法、峰谷特征等,由于字符有粘连或者断裂的问题,分割效果并不理想,本文基于谷区域的最低点进行粘连字符的分割。

另外,由于项目比较紧,一直没有更新博客,博友的评论也没有及时回复,实在抱歉!以后还是要经常写写博客的。。。

    实验步骤和原理都比较简单,只是提供字符分割的一种思路而已!

 

   算法matlab代码如下:

% /************************************************************************
% * Copyright(c) 2017 ZRJ
% * All rights reserved.
% *
% * File: reseg_valley.m
% * Brief: 基于谷区域的最低点进行粘连字符区域再分割算法;
% * Version: 1.0
% * Author: zrj
% * Email:
% * Date: 2017/02/28
% * Reference:一种新的货运列车车号分割算法;
% * History:
% * 20170316:基于竖直镜像谷区域的最低点进行粘连字符区域再分割算法;
%
% ************************************************************************/
%粘连字符区域再分割
function rePIN = reseg_valley(BW)
%程序功能:字符粘连区域再分割
%输入:BW——字符粘连区域的二值图像;
%输出:rePIN——输出字符的二值化图像

%Parameter:
mph = 10;%峰值的最小高度;
mpd = 20;%设置两峰值之间的最小间隔数;

[m, n] = size(BW);
vm = flip(BW, 1);%竖直镜像
for j = 1 : 1 : n %列信息
for i = m : -1 : 1%行信息
if(vm(i, j) == 1)
peak(1, j) = m-i+1;%自数字下边界开始向上探到数字区域的深度即峰区域的最高点;
break;
end
end
end
clear i j
figure, plot(peak)
[ppks,plocs] = findpeaks(peak, 'minpeakheight',mph, 'minpeakdistance', mpd);
psize = length(ppks);
if(psize < 1)
rePIN{1,1} = BW;
return;
end
text(plocs+.02, ppks, num2str((1: numel(ppks))'))

figure, title('粘连区域谷区域特征再分割结果');
rePIN = cell(psize+1, 1);
rePIN{1,1}= BW(:, 1 :plocs(1));
rePIN{psize+1, 1}= BW(:, plocs(psize): n );
for i = 2 : 1 : psize
rePIN{i, 1}= BW(:, plocs(i-1): plocs(i) );
end
clear i
for i = 1 : psize+1
subplot(1, psize+1, i); imshow( rePIN{i, 1} );
end
clear i

end%end function reseg_valley

   

注意:

也可以使用峰区域的最高点进行分割,这个下次可以写出来,没有找到可以表示谷区域的函数,直接使用的峰区域,不过是将原图像进行了竖直镜像,与谷区域的最低点的思想是一致的。