断裂字符的合并-弧特征
前言
车号识别项目中,车号字符含有较多粘连和断裂,针对断裂字符,改进了一篇论文中的弧特征方法,效果还可以。
算法matlab代码如下:
% /************************************************************************ % * Copyright(c) 2017 ZRJ % * All rights reserved. % * % * File: arc_feature.m % * Brief: 基于弧特征进行断裂字符区域合并算法 % * Version: 1.0 % * Author: ZRJ % * Email: happyamyhope@163.com % * Date: 2017/02/28 % * Reference:对粘连和缺损数字串分割的研究; % * History: % * 20170307:基于弧特征进行断裂字符区域合并算法; % * 20170313:论文中对弧特征的判定有误, 进行了勘误和改进; % % ************************************************************************/ function [up, down] = arc_feature( BW ) %程序功能:计算区域块弧特征 %输入input: % BW -- 断裂字符区域块; %输出output: % up -- 字符区域上半部弧特征; % down -- 字符区域下半部弧特征; BW=blackqiege(BW); BW=whiteqiege(BW); [m, n] = size (BW); % ud = zeros (1, n); for j = 1 : 1 : n for i = 1 : 1 : m/2 if (BW( i , j ) == 1) ud(1, j ) = i ; %自数字上边界开始向下探到数字区域的深度; break ; end end end dd = zeros (1, n); for j = 1 : 1 : n for i = m : -1 : m/2 if (BW( i , j ) == 1) dd(1, j ) = m- i +1; %自数字下边界开始向上探到数字区域的深度; break ; end end end clear i j fu_increase = 0; fu_decrease = 0; fd_increase = 0; fd_decrease = 0; for i = 1 : 1 : n-1 %改进:增多或减少趋势次数多的作为判断依据;decrease;increase if (ud(1, i )- ud(1, i +1) > 0) %左弧 fu_increase = fu_increase + 1; elseif (ud(1, i )- ud(1, i +1) < 0) %右弧 fu_decrease = fu_decrease + 1; end if (dd(1, i )- dd(1, i +1) > 0) %左弧 fd_increase = fd_increase + 1; elseif (dd(1, i )- dd(1, i +1) < 0) %右弧 fd_decrease = fd_decrease + 1; end end clear i %LU上部弧特征 if ( fu_increase > fu_decrease && fu_increase >= 0.3* size (BW,2) ) up = -1; %左弧特征 elseif ( fu_increase < fu_decrease && fu_decrease >= 0.3* size (BW,2) ) up = 1; %右弧特征 else up = 0; %不具有左、右弧特征 end %LD下部弧特征 if ( fd_increase > fd_decrease && fd_increase >= 0.3* size (BW,2) ) down = -1; %左弧特征 elseif ( fd_increase < fd_decrease && fd_decrease >= 0.3* size (BW,2) ) down = 1; %右弧特征 else down = 0; %不具有左、右弧特征 end end %end function arc_feature |
blackqiege函数:去除边缘无用背景区域;
function e=blackqiege(d) %程序功能:实现列车车号定位文本的无关边界切割 %输入:d——去除小区域后的文本区域的二值化图像; %输出:e——实现列车车号定位文本的无关黑色边界切割 [m,n]= size (d); top=1;bottom=m;left=1;right=n; % init while sum (d(top,:))==0 && top<m top=top+1; end while sum (d(bottom,:))==0 && bottom>1 bottom=bottom-1; end while sum (d(:,left))==0 && left<n left=left+1; end while sum (d(:,right))==0 && right>1 right=right-1; end dd=right-left; hh=bottom-top; if (dd < 1 && hh <1) e = 0; else e=imcrop(d,[left top dd hh]); %返回图像的一个裁剪区域 end end |
writeqiege函数:去除边缘无用前景区域干扰;
function e=whiteqiege(d) %程序功能:实现列车车号定位文本的无关边界切割 %输入:d——去除小区域后的文本区域的二值化图像; %输出:e——实现列车车号定位文本的无关白色边界切割 [m,n]= size (d); top=1;bottom=m;left=1;right=n; % init while sum (d(top,:))==n && top<m top=top+1; end while sum (d(bottom,:))==n && bottom>1 bottom=bottom-1; end while sum (d(:,left))==m && left<n left=left+1; end while sum (d(:,right))==m && right>1 right=right-1; end dd=right-left; hh=bottom-top; if (dd < 1 && hh <1) e = 0; else e=imcrop(d,[left top dd hh]); %返回图像的一个裁剪区域 end end |
问题及改进:
1.原论文中对弧特征的定义有异议,可自行查看;
2.深入分析弧特征,改进了弧特征的定义;
3.根据项目中字符特点,对弧特征的判决条件进行了改进;
思考:
出版的论文也不一定是完善的,只是提供了一种可能的想法和思路,需要根据实际项目需求进行验证和改进!!!
完
各美其美,美美与共,不和他人作比较,不对他人有期待,不批判他人,不钻牛角尖。
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】