维纳滤波处理.rar

  • 康46222
    了解作者
  • C/C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 2
    下载次数
  • 2020-05-06 21:14
    上传日期
Visual c++数字图像处理维纳滤波处理算法源码
维纳滤波处理.rar
  • 维纳滤波处理
  • 维纳滤波处理
  • 维纳滤波处理.txt
    3.1KB
  • 维纳滤波处理.txt
    3.1KB
内容介绍
//参数说明: //LPSTR lpDIBBits:指向源DIB图像指针 //LONG lWidth:源图像宽度(象素数) //LONG lHeight:源图像高度(象素数) //函数说明: //该函数用来对DIB图像进行维纳滤波复原操作。 BOOL WINAPI WienerDIB (LPSTR lpDIBBits, LONG lWidth, LONG lHeight) { // 指向源图像的指针 LPSTR lpSrc; //循环变量 long i; long j; //像素值 unsigned char pixel; // 图像每行的字节数 LONG lLineBytes; //用于做FFT的数组 double *fftSrc,*fftKernel,*fftNoise; double a,b,c,d,e,f,multi; //二维FFT的长度和宽度 unsigned long nn[3]; //图像归一化因子 double MaxNum; // 计算图像每行的字节数 lLineBytes = WIDTHBYTES(lWidth * 8); double dPower = log((double)lLineBytes)/log(2.0); if(dPower != (int) dPower) { return false; } dPower = log((double)lHeight)/log(2.0); if(dPower != (int) dPower) { return false; } fftSrc = new double [lHeight*lLineBytes*2+1]; fftKernel = new double [lHeight*lLineBytes*2+1]; fftNoise = new double [lHeight*lLineBytes*2+1]; nn[1] = lHeight; nn[2] = lLineBytes; for (j = 0;j < lHeight ;j++) { for(i = 0;i < lLineBytes ;i++) { // 指向源图像倒数第j行,第i个象素的指针 lpSrc = (char *)lpDIBBits + lLineBytes * j + i; pixel = (unsigned char)*lpSrc; fftSrc[(2*lLineBytes)*j + 2*i + 1] = (double)pixel; fftSrc[(2*lLineBytes)*j + 2*i + 2] = 0.0; if(i < 5 && j == 0) { fftKernel[(2*lLineBytes)*j + 2*i + 1] = 1/5.0; } else { fftKernel[(2*lLineBytes)*j + 2*i + 1] = 0.0; } fftKernel[(2*lLineBytes)*j + 2*i + 2] = 0.0; if ( i + j == ((int)((i+j)/8))*8) { fftNoise [(2*lLineBytes)*j + 2*i + 1]= -16.0; } else { fftNoise [(2*lLineBytes)*j + 2*i + 1]= 0.0; } fftNoise[(2*lLineBytes)*j + 2*i + 2] = 0.0; } } srand((unsigned)time(NULL)); //对源图像进行FFT fourn(fftSrc,nn,2,1); //对卷积核图像进行FFT fourn(fftKernel,nn,2,1); //对噪声图像进行FFT fourn(fftNoise,nn,2,1); for (i = 1;i <lHeight*lLineBytes*2;i+=2) { a = fftSrc[i]; b = fftSrc[i+1]; c = fftKernel[i]; d = fftKernel[i+1]; e = fftNoise[i]; f = fftNoise[i+1]; multi = (a*a + b*b)/(a*a + b*b - e*e - f*f); if (c*c + d*d > 1e-3) { fftSrc[i] = ( a*c + b*d ) / ( c*c + d*d ) / multi; fftSrc[i+1] = ( b*c - a*d ) / ( c*c + d*d )/multi; } } //对结果图像进行反FFT fourn(fftSrc,nn,2,-1); //确定归一化因子 MaxNum = 0.0; for (j = 0;j < lHeight ;j++) { for(i = 0;i < lLineBytes ;i++) { fftSrc[(2*lLineBytes)*j + 2*i + 1] = sqrt(fftSrc[(2*lLineBytes)*j + 2*i + 1] * fftSrc[(2*lLineBytes)*j + 2*i + 1]\ +fftSrc[(2*lLineBytes)*j + 2*i + 2] * fftSrc[(2*lLineBytes)*j + 2*i + 2]); if( MaxNum < fftSrc[(2*lLineBytes)*j + 2*i + 1]) MaxNum = fftSrc[(2*lLineBytes)*j + 2*i + 1]; } } //转换为图像 for (j = 0;j < lHeight ;j++) { for(i = 0;i < lLineBytes ;i++) { // 指向源图像倒数第j行,第i个象素的指针 lpSrc = (char *)lpDIBBits + lLineBytes * j + i; *lpSrc = (unsigned char) (fftSrc[(2*lLineBytes)*j + 2*i + 1]*255.0/MaxNum ); } } delete fftSrc; delete fftKernel; delete fftNoise; // 返回 return true; }
评论
    相关推荐
    • VC实现维纳滤波处理.rar
      一个实现维纳滤波图像处理的VC函数,各个成员变量程序中有详细说明
    • 滤波方法.rar
      提供两种常用滤波方法的VC源程序,已经运行通过。
    • whu_7-115-14828-7_2006_1.rar
      30个图像处理的VC++ 源代码,包括256色转灰度图,Hough变换,...逆滤波处理,取对数,取指数,梯度锐化,图象处理,图像镜像, 图像平移,图像缩放,图像细化,图像旋转,维纳滤波处理,用Canny算子提取边缘,阈值变换,直方图均衡.
    • VC.rar
      各种基于V C++ 6.0 的源程序 有二值化 高斯平滑 对比度拉伸 反色 傅里叶变换 等等
    • wnlb.rar
      维纳滤波源码,内有说明,基于vc6.0mfc
    • txfs.rar
      vc编写得图像的反色、图像转置、维纳滤波处理得代码
    • txfs.rar
      vc编写得图像的反色、图像转置、维纳滤波处理得代码
    • VC图像处理常用代码
      VC 图像处理 常用 代码 包含:反色、亮度增减、逆滤滤、维纳滤波、canny、直方图等算法
    • vc图象处理.rar
      result\第5章\维纳滤波lena.bmp result\第5章 result\第6章\lena.bmp result\第6章\lena_256沃尔什变换.bmp result\第6章\lena_256余弦变换.BMP result\第6章\lenna_DWT_1.bmp result\第6章\lenna_DWT_2.bmp result\...
    • codesforimageprocessing.rar
      实现简单图像处理,包括256色转灰度图、Hough变换、Walsh变换、中值滤波、二值化变换、亮度增减、傅立叶变换、反色、取对数、取指数、图像平移、图像旋转、图像细化、图像缩放、图像镜像、均值滤波、对比度拉伸、拉普拉斯锐化(边缘检测)、方块编码、梯度锐化、灰度均衡、直方图均衡、离散余弦变换、维纳滤波处理、逆滤波处理、阈值变换、高斯平滑。