ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:17.86KB ,
资源ID:25766030      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25766030.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(进行识别前图像预处理.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

进行识别前图像预处理.docx

1、进行识别前图像预处理进行识别前图像预处理 /BP神经网络字符识别函数定义 #include dibapi.h#include <iostream>#include <deque>#include <math.h>using namespace std;typedef deque<CRect> CRectLink;typedef deque<HDIB> HDIBLink;/声明一些必要的全局变量int w_sample=8;int h_sample=16;bool fileloaded;bool gyhinfoinput;bool gy

2、hfinished;int digicount;int m_lianXuShu;CRectLink m_charRectCopy;CRectLink m_charRect;HDIBLink m_dibRect;HDIBLink m_dibRectCopy;HDIB m_hDIB;CString strPathName;CString strPathNameSave;/*function declaration*/清楚屏幕void ClearAll(CDC* pDC);/在屏幕上显示位图void DisplayDIB(CDC* pDC,HDIB hDIB);/对分割后的位图进行尺寸标准归一化vo

3、id StdDIBbyRect(HDIB hDIB, int tarWidth, int tarHeight);/整体斜率调整void SlopeAdjust(HDIB hDIB);/去除离散噪声点void RemoveScatterNoise(HDIB hDIB);/梯度锐化void GradientSharp(HDIB hDIB);/画框void DrawFrame(CDC* pDC,HDIB hDIB, CRectLink charRect,unsigned int linewidth,COLORREF color);/将灰度图二值化void ConvertGrayToWhiteBlac

4、k(HDIB hDIB);/将256色位图转为灰度图void Convert256toGray(HDIB hDIB);/细化void Thinning(HDIB hDIB);/对位图进行分割.返回一个存储着每块分割区域的链表CRectLink CharSegment(HANDLE hDIB);/紧缩、重排调整HDIB AutoAlign(HDIB hDIB);/判断是否是离散噪声点bool DeleteScaterJudge(LPSTR lpDIBBits,WORD lLineBytes, LPBYTE lplab, int lWidth, int lHeight, int x, int y,

5、 CPoint lab, int lianXuShu);/对图像进行模板操作HDIB Template(HDIB hDIB,double * tem ,int tem_w,int tem_h,double xishu);/对图像进行中值滤波HDIB MidFilter(HDIB hDIB,int tem_w,int tem_h);/对图像进行直方图均衡void Equalize(HDIB hDIB);/*implementation*/* *函数名称:DisplayDIB参数: CDC* pDC -指向当前设备上下文(Divice Context)的指针 HDIB hDIB -要显示的位图的句

6、柄*/void DisplayDIB(CDC* pDC,HDIB hDIB) BYTE* lpDIB=(BYTE*):GlobalLock(HGLOBAL)hDIB); / 获取DIB宽度和高度 int cxDIB = :DIBWidth(char*) lpDIB); int cyDIB = :DIBHeight(char*)lpDIB); CRect rcDIB,rcDest; rcDIB.top = rcDIB.left = 0; rcDIB.right = cxDIB; rcDIB.bottom = cyDIB; /设置目标客户区输出大小尺寸 rcDest = rcDIB; /CDC*

7、pDC=GetDC(); ClearAll(pDC); /在客户区显示图像 /for(int ii=0;ii<10;ii+) :PaintDIB(pDC->m_hDC,rcDest,hDIB,rcDIB,NULL); :GlobalUnlock(HGLOBAL)hDIB);void ClearAll(CDC *pDC) CRect rect; /GetClientRect(&rect); rect.left =0;rect.top =0;rect.right =2000;rect.bottom =1000; CPen pen; pen.CreatePen (PS_SOLID

8、,1,RGB(255,255,255); pDC->SelectObject (&pen); pDC->Rectangle (&rect); :DeleteObject (pen);/* 函数名称:* AutoAlign()* 参数:* HDIB hDIB 原图像的句柄* 返回值 * HDIB 紧缩排列后的新图像的句柄* 功能:* 将经过了标准化处理的字符进行规整的排列,以方便下一步的处理* 说明:* 紧缩排列的操作必须在标准化操作之后进行*/HDIB AutoAlign(HDIB hDIB) /指向图像的指针 BYTE* lpDIB=(BYTE*):GlobalL

9、ock (HGLOBAL)hDIB); /指向象素起始位置的指针 BYTE* lpDIBBits=(BYTE*):FindDIBBits (char*)lpDIB); /指向象素的指针 BYTE* lpSrc; /获取图像的宽度 LONG lWidth=:DIBWidth (char*)lpDIB); /获取图像的高度 LONG lHeight=:DIBHeight (char*)lpDIB); /获取标准化的宽度 int w=m_charRect.front ().Width() ; /获取标准化的高度 int h=m_charRect.front ().Height() ; /建立一个新的

10、图像正好能够将标准化的字符并排放置 HDIB hNewDIB=:NewDIB (digicount*w,h,8); /指向新的图像的指针 BYTE* lpNewDIB=(BYTE*) :GlobalLock(HGLOBAL)hNewDIB); /指向象素起始位置的指针 BYTE* lpNewDIBBits=(BYTE*):FindDIBBits(char*)lpNewDIB); /指向象素的指针 BYTE* lpDst=lpNewDIBBits; /计算原图像每行的字节数 LONG lLineBytes=(lWidth+3)/4*4; /计算新图像每行的字节数 LONG lLineBytesn

11、ew =(digicount*w+3)/4*4; /将新的图像初始化为白色 memset(lpDst,(BYTE)255,lLineBytesnew * h); /映射操作的坐标变量 int i_src,j_src; /循环变量 int i,j; /统计字符个数的变量 int counts=0; /存放位置信息的结构体 CRect rect,rectnew; /清空一个新的链表来存放新的字符位置信息 m_charRectCopy.clear (); /从头至尾逐个扫描原链表的各个结点 while(!m_charRect.empty() ) /从表头上得到一个矩形框 rect=m_charRec

12、t.front (); /将这个矩形框从链表上删除 m_charRect.pop_front (); /计算新的矩形框的位置信息 /左边界 rectnew.left =counts*w; /右边界 rectnew.right =(counts+1)*w; /上边界 rectnew.top =0; /下边界 rectnew.bottom =h; /将获得的新的矩形框插入到新的链表中 m_charRectCopy.push_back (rectnew); /将原矩形框内的象素映射到新的矩形框中 for(i=0;i<h;i+) for(j=counts*w;j<(counts+1)*w;

13、j+) /计算映射坐标 i_src=rect.top +i; j_src=rect.left +j-counts*w; /进行象素的映射 lpSrc=(BYTE *)lpDIBBits + lLineBytes * i_src + j_src; lpDst=(BYTE *)lpNewDIBBits + lLineBytesnew * i + j; *lpDst=*lpSrc; /字符个数加1 counts+; /将获得的新的链表复制到原链表中,以方便下一次的调用 m_charRect=m_charRectCopy; /解除锁定 :GlobalUnlock (hDIB); :GlobalUnlo

14、ck (hNewDIB); return hNewDIB;/* 函数名称:* ThinnerHilditch* 参数:* void* image 二值化图像矩阵前景色为1背景色为0* unsigned longlx 图像的宽度* unsigned longly 图像的高度* 返回值* 无*函数功能:* 对输入的图像进行细化,输出细化后的图像*/void ThinnerHilditch(void *image, unsigned long lx, unsigned long ly) char *f, *g; char n10; unsigned int counter; short k, sho

15、ri, xx, nrn; unsigned long i, j; long kk, kk11, kk12, kk13, kk21, kk22, kk23, kk31, kk32, kk33, size; size = (long)lx * (long)ly; g = (char *)malloc(size); if(g = NULL) / printf(error in allocating memory!n); return; f = (char *)image; for(i=0; i<lx; i+) for(j=0; j<ly; j+) kk=i*ly+j; if(fkk!=0

16、) fkk=1; gkk=fkk; counter = 1; do counter+; shori = 0; for(i=0; i<lx; i+) for(j=0; j<ly; j+) kk = i*ly+j; if(fkk<0) fkk = 0; gkk= fkk; for(i=1; i<lx-1; i+) for(j=1; j<ly-1; j+) kk=i*ly+j; if(fkk!=1) continue; kk11 = (i-1)*ly+j-1; kk12 = kk11 + 1; kk13 = kk12 + 1; kk21 = i*ly+j-1; kk22

17、 = kk21 + 1; kk23 = kk22 + 1; kk31 = (i+1)*ly+j-1; kk32 = kk31 + 1; kk33 = kk32 + 1; if(gkk12&&gkk21&&gkk23&&gkk32)!=0) continue; nrn = gkk11 + gkk12 + gkk13 + gkk21 + gkk23 + gkk31 + gkk32 + gkk33; if(nrn <= 1) fkk22 = 2; continue; n4 = fkk11; n3 = fkk12; n2 = fkk13; n5 =

18、 fkk21; n1 = fkk23; n6 = fkk31; n7 = fkk32; n8 = fkk33; n9 = n1; xx = 0; for(k=1; k<8; k=k+2) if(!nk)&&(nk+1|nk+2) xx+; if(xx!=1) fkk22 = 2; continue; if(fkk12 = -1) fkk12 = 0; n3 = 0; xx = 0; for(k=1; k<8; k=k+2) if(!nk)&&(nk+1|nk+2) xx+; if(xx != 1) fkk12 = -1; continue; fkk1

19、2 = -1; n3 = -1; if(fkk21!=-1) fkk22 = -1; shori = 1; continue; fkk21 = 0; n5 = 0; xx = 0; for(k=1; k<8; k=k+2) if(!nk)&&(nk+1|nk+2) xx+; if(xx = 1) fkk21 = -1; fkk22 = -1; shori =1; else fkk21 = -1; while(shori); free(g);/* 函数名称:* ThinnerRosenfeld* 参数:* void* image 二值化图像矩阵前景色为1背景色为0* uns

20、igned longlx 图像的宽度* unsigned longly 图像的高度* 返回值* 无*函数功能:* 对输入的图像进行细化,输出细化后的图像*/void ThinnerRosenfeld(void *image, unsigned long lx, unsigned long ly) char *f, *g; char n10; char a5 = 0, -1, 1, 0, 0; char b5 = 0, 0, 0, 1, -1; char nrnd, cond, n48, n26, n24, n46, n68, n82, n123, n345, n567, n781; short

21、 k, shori; unsigned long i, j; long ii, jj, kk, kk1, kk2, kk3, size; size = (long)lx * (long)ly; g = (char *)malloc(size); if(g=NULL) printf(error in alocating mmeory!n); return; f = (char *)image; for(kk=0l; kk<size; kk+) gkk = fkk; do shori = 0; for(k=1; k<=4; k+) for(i=1; i<lx-1; i+) ii

22、= i + ak; for(j=1; j<ly-1; j+) kk = i*ly + j; if(!fkk) continue; jj = j + bk; kk1 = ii*ly + jj; if(fkk1) continue; kk1 = kk - ly -1; kk2 = kk1 + 1; kk3 = kk2 + 1; n3 = fkk1; n2 = fkk2; n1 = fkk3; kk1 = kk - 1; kk3 = kk + 1; n4 = fkk1; n8 = fkk3; kk1 = kk + ly - 1; kk2 = kk1 + 1; kk3 = kk2 + 1; n5 = fkk1; n6 = fkk2; n7 = fkk3; nrnd = n1 + n2 + n3 + n4 +n5 + n6 + n7 + n8; if(nrnd<=1) continue; cond = 0; n48 = n4 + n8; n26 = n2 + n6; n24 = n2 + n4; n46 = n4 + n6; n68 = n6 + n8; n82 = n8 + n2; n123 = n1 + n2 + n3; n345 = n3 + n4 + n5; n567 = n5 + n6 + n7; n781 = n7 + n8 + n1;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1