前言
项目算法需求,需要将车号区域字符分割出来,尝试过一些方法,比如投影法、峰谷特征等,由于字符有粘连或者断裂的问题,分割效果并不理想,本文基于谷区域的最低点进行粘连字符的分割。
另外,由于项目比较紧,一直没有更新博客,博友的评论也没有及时回复,实在抱歉!以后还是要经常写写博客的。。。
实验步骤和原理都比较简单,只是提供字符分割的一种思路而已!
算法matlab代码如下:
% /************************************************************************ % * Copyright(c) 2017 ZRJ % * All rights reserved. % * % * File: reseg_valley.m % * Brief: 基于谷区域的最低点进行粘连字符区域再分割算法; % * Version: 1.0 % * Author: zrj % * Email: happyamyhope@163.com % * 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
注意:
也可以使用峰区域的最高点进行分割,这个下次可以写出来,没有找到可以表示谷区域的函数,直接使用的峰区域,不过是将原图像进行了竖直镜像,与谷区域的最低点的思想是一致的。
完