指纹识别系统—计算机毕业设计内容摘要:

d short Trans_Coeff1。 fRadius=。 //变换滤波系数 //本模块完成变换系数的赋值采样 //行变换 ,第一次( layer=1 时)时 nHeight 即为原始图像的高度值 for(Trans_H=0。 Trans_HnHeight。 Trans_H++) { if(layer == 1) //layer=1 时, nWidth_H 为原始图像宽度值的一半 for(Trans_N=0。 Trans_NnWidth_H。 Trans_N++) { Trans_W=Trans_N1。 if (fRadius==2) {spTransData0[Trans_H][Trans_N] = (spOriginData[Trans_H][Trans_W])。 spTransData0[Trans_H][nWidth_H+Trans_N]=(spOriginData[Trans_H][Trans_W+1])。 } else {spTransData0[Trans_H][Trans_N] = (spOriginData[Trans_H][Trans_W]128)。 spTransData0[Trans_H][nWidth_H+Trans_N]=spOriginData[Trans_H][Trans_W +1]128)。 } } //若变换层数大于 1,则仅采样低频的小波系数 if(layer 1) for(Trans_N=0。 Trans_NnWidth_H。 Trans_N++) {Trans_W=Trans_N1。 spTransData0[Trans_H][Trans_N] = spTransData1[Trans_H][Trans_W]。 spTransData0[Trans_H][nWidth_H+Trans_N]= spTransData1[Trans_H][Trans_W+1]。 }} for(Trans_H=0。 Trans_HnHeight。 Trans_H++) {for(Trans_N=0。 Trans_NnWidth_H1。 Trans_N++) { //奇偶数值和的一半 Trans_Coeff1= ((spTransData0[Trans_H][Trans_N]+spTransData0[Trans_H][Trans_N +1])1)。 //逻辑非操作后数值加 1 Trans_Coeff1=~Trans_Coeff1+1。 //系数预测 spTransData0[Trans_H][nWidth_H+Trans_N]= spTransData0[Trans_H][nWidth_H +Trans_N]+Trans_Coeff1。 } //完成一个偶系数的边界处理 Trans_Coeff1 = ((spTransData0[Trans_H][nWidth_H1] +spTransData0[Trans_H][nWidth_H2])1)。 Trans_Coeff1=~Trans_Coeff1+1。 spTransData0[Trans_H][nWidth1]= spTransData0[Trans_H][nWidth1] +Trans_Coeff1。 //完成一个奇系数的边界处理 Trans_Coeff0= ((spTransData0[Trans_H][nWidth_H] +spTransData0[Trans_H][nWidth_H+1])2)。 spTransData0[Trans_H][0] = spTransData0[Trans_H][0]+Trans_Coeff0。 //提升,整数 到整数的变换 for(Trans_N=1。 Trans_NnWidth_H。 Trans_N++) {Trans_Coeff0 = ((spTransData0[Trans_H][nWidth_H+Trans_N] +spTransData0[Trans_H][nWidth_H+Trans_N1])2)。 spTransData0[Trans_H][Trans_N]= spTransData0[Trans_H][Trans_N] +Trans_Coeff0。 }} //水平方向的变换结束 //竖直方向的变换开始,数据源未水平变换后的小波系数 for(Trans_M=0。 Trans_MnHeight。 Trans_M++) {for(Trans_N=0。 Trans_NnWidth_H。 Trans_N++) {spTransData0[Trans_M][Trans_N]*=fRadius。 spTransData0[Trans_M][Trans_N+nWidth_H]/=fRadius。 }} //行提升后的数据在 spTransData0 中, spTransData0 中的数据自然奇偶有序 for(Trans_N=0。 Trans_NnWidth_H。 Trans_N++) { //列变换 for(Trans_M=0。 Trans_MnHeight_H。 Trans_M++) {Trans_H =Trans_M1。 //频带 LL部分 spTransData1[Trans_M][Trans_N] = spTransData0[Trans_H][Trans_N]。 //频带 HL部分 spTransData1[nHeight_H+Trans_M][Trans_N] = spTransData0[Trans_H+1] [Trans_N]。 //频带 LH 部分 spTransData1[Trans_M][nWidth_H+Trans_N] = spTransData0[Trans_H] [nWidth_H+Trans_N]。 //频带 HH 部分 spTransData1[nHeight_H+Trans_M][nWidth_H+Trans_N] = spTransData0 [Trans_H+1][nWidth_H+Trans_N]。 //第一次提升奇数坐标系数 for(Trans_M=0。 Trans_MnHeight_H1。 Trans_M++) { //竖直 方向的变换 Trans_Coeff1 = ((spTransData1[Trans_M][Trans_N]+spTransData1[Trans_M +1][Trans_N])1)。 Trans_Coeff1=~Trans_Coeff1+1。 spTransData1[nHeight_H+Trans_M][Trans_N] = spTransData1[nHeight_H +Trans_M][Trans_N]+Trans_Coeff1。 Trans_Coeff1= ((spTransData1[Trans_M][nWidth_H+Trans_N]+spTransData1[Trans_M +1][nWidth_H+Trans_N])1)。 Trans_Coeff1=~Trans_Coeff1+1。 spTransData1[nHeight_H+Trans_M][nWidth_H+Trans_N] = spTransData1[nHeight_H +Trans_M][nWidth_H+Trans_N]+Trans_Coeff1。 } Trans_Coeff1 = ((spTransData1[nHeight_H1][Trans_N]+spTransData1[nHeight_H 2][Trans_N])1)。 Trans_Coeff1=~Trans_Coeff1+1。 spTransData1[nHeight1][Trans_N] = spTransData1[nHeight1][Trans_N] +Trans_Coeff1。 Trans_Coeff1 = ((spTransData1[nHeight_H1][nWidth_H+Trans_N] +spTransData1[nHeight_H2][nWidth_H+Trans_N])1)。 Trans_Coeff1=~Trans_Coeff1+1。 //边界处理 spTransData1[nHeight1][nWidth_H+Trans_N] = spTransData1[nHeight1][nWidth_H +Trans_N]+Trans_Coeff1。 Trans_Coeff0 = ((spTransData1[nHeight_H][Trans_N]+spTransData1[nHeight_H +1][Trans_N])2)。 spTransData1[0][Trans_N] = spTransData1[0][Trans_N]+Trans_Coeff0。 Trans_Coeff0 = ((spTransData1[nHeight_H][nWidth_H+Trans_N] +spTransData1[nHeight_H+1][nWidth_H+Trans_N])2)。 // 边界处理 spTransData1[0][nWidth_H+Trans_N] = spTransData1[0] [nWidth_H+Trans_N]+Trans_Coeff0。 //第一次提升偶数坐标系数 for(Trans_M=1。 Trans_MnHeight_H。 Trans_M++) {Trans_Coeff0 = ((spTransData1[nHeight_H+Trans_M][Trans_N] +spTransData1[nHeight_H+Trans_M1][Trans_N])2)。 spTransData1[Trans_M][Trans_N] = spTransData1[Trans_M][Trans_N] +Trans_Coeff0。 Trans_Coeff0 = ((spTransData1[nHeight_H+Trans_M][nWidth_H+Trans_N] +spTransData1[nHeight_H+Trans_M1][nWidth_H+Trans_N])2)。 spTransData1[Trans_M][nWidth_H+Trans_N] = spTransData1[Trans_M][nWidth_H +Trans_N]+Trans_Coeff0。 }}//存放小波系数, LL 频带的系数进行幅值增强处理,其 高频频带的系数则削弱其幅值 for(Trans_N=0。 Trans_NnWidth。 Trans_N++) {for(Trans_M=0。 Trans_MnHeight_H。 Trans_M++) { spTransData1[Trans_M][Trans_N]*=fRadius。 spTransData1[Trans_M+nHeight_H][Trans_N]/=fRadius。 }}} 上面的代码完成了图像的一层小波变换,图像 变换的结果存放在spTransData1 所指的数据空间中, spTransData1 的数据空间是在 CWvltDoc 中根据实际图像的大小指定的。 下面来分析一下 CWvltDoc 的程序代码,了解一下函数的传递和消息传递。 在实际编程中,图像的类型是 24位 bmp 图像,并且默认的是 R、 G、 B分量相同的灰度图像,如果打开的是彩色图像,程序会以默认的灰度图像格式进行处理。 如果需要处理彩色图像,可以通过分别对 R、 G、 B分量进行小波变换,然后将分量的小波系数进行映射,这样便能正确地显示小波系数。 一层小波变换地菜单以及 小波 ID 的设定如图 24 和图 25 所示。 图 24 菜单部分 图 25 菜单的消息 ID 下面的代码是关于实现图像的一层小波变换及其小波系数的显示。 void CWvltDoc::OnWvltTrans。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。