逆滤波处理.rar

  • 夏俊
    了解作者
  • C/C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2020-05-06 18:34
    上传日期
Visual c++数字图像处理逆滤波处理算法源码
逆滤波处理.rar
  • 逆滤波处理
  • 逆滤波处理
  • 逆滤波处理.txt
    2.9KB
  • 逆滤波处理.txt
    2.8KB
内容介绍
//参数说明: //LPSTR lpDIBBits - 指向源DIB图像指针 //LONG lWidth - 源图像宽度(象素数,必须是4的倍数) //LONG lHeight - 源图像高度(象素数) / //函数说明: //该函数用来对BlurDIB()生成的DIB图像进行复原操作。 BOOL WINAPI RestoreDIB (LPSTR lpDIBBits, LONG lWidth, LONG lHeight) { // 指向源图像的指针 LPSTR lpSrc; //循环变量 long i; long j; //像素值 unsigned char pixel; // 图像每行的字节数 LONG lLineBytes; //用于做FFT的数组 double *fftSrc,*fftKernel; double a,b,c,d; //二维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]; 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; } } //对源图像进行FFT fourn(fftSrc,nn,2,1); //对卷积核图像进行FFT fourn(fftKernel,nn,2,1); for (j = 0;j < lHeight ;j++) { for(i = 0;i < lLineBytes ;i++) { a = fftSrc[(2*lLineBytes)*j + 2*i + 1]; b = fftSrc[(2*lLineBytes)*j + 2*i + 2]; c = fftKernel[(2*lLineBytes)*j + 2*i + 1]; d = fftKernel[(2*lLineBytes)*j + 2*i + 2]; if (c*c + d*d > 1e-3) { fftSrc[(2*lLineBytes)*j + 2*i + 1] = ( a*c + b*d ) / ( c*c + d*d ); fftSrc[(2*lLineBytes)*j + 2*i + 2] = ( b*c - a*d ) / ( c*c + d*d ); } } } //对结果图像进行反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; // 返回 return true; }
评论
    相关推荐
    • vc7.zip
      vc7 link.exe file for symbian developement
    • VC6LineNumberAddin
      该文件为在VC6.0中的代码编辑器窗口显示行数的插件。安装说明如下: 1。将.dll及reg档copy至VC6.0所安装的文件内的MSDev98\AddIns。 2.reg档进行merge(有些VC6.0不许merge,直接放在此文件夹内即可) 3.开启VC至...
    • VC6LineNumberAddin。
      VC6.0 显示行号插件说明 --------------------------------------- 使用方法如下: 1、如果你的VC6.0安装在C盘,请拷贝 VC6LineNumberAddin.dll 文件 到如下目录: C:\Program Files\Microsoft Visual Studio\Common...
    • VC Formal
      VC Formal 新一代形式化验证 SoC 设计的复杂性要求快速全面的验证方式,以便加速验证和调试,缩短总进度周期,提高可预测性。VC Formal™ 新一代形式化验证解决方案拥有出色的容量、速度和灵活性,可验证某些最艰巨...
    • VC2013编译器
      VC++2013,VC2013,VC2013编译器,X86版,只支持C/C++编程,不支持MFC\SDK等(只有C/C++库),绿色版本,解压后运行VC2013.CMD即可。 同时附上一经典字符串连接实例。
    • vc-intrinsics
      VC本质 介绍 VC Intrinsics项目在核心LLVM IR指令之上包含一组新的内在函数,这些指令表示针对GPU的程序的SIMD语义。 该集合现在由 CMC- DPC ++- ISPC- 前端编译器和 IGC VC后端-https: 执照 VC Intrinsics是...
    • VC6LineNumberAddin
      VC6.0 显示行号插件说明 --------------------------------------- 使用方法如下: 1、如果你的VC6.0安装在C盘,请拷贝 VC6LineNumberAddin.dll 文件 到如下目录: C:\Program Files\Microsoft Visual Studio\Common...
    • Vc6DebugDll
      VC6 提示找不到的DLL修复工具主要针对重装系统后,原来的VC6.0的工程编译后程序不能运行了。 把VC光盘下的msvcp60d.dll,mfcd42d,mfc42d.dll,msvcrtd.dll,mfc042d.dll五个文件复制到C:\windows\system32目录下 使用...
    • vc.rar
      当我提供了MSDN精简版的下载后,有人就说精简版的VC不支持搜索,这是由于微软相关CHM文件制作问题造成的。后来想起我大学的时候不也一直迷茫吗?不懂的时候,到处碰壁。许多时间浪费在寻找正确的道理。所以今天我花...
    • vc教程.zip
      包含许多vc的教程,主要是2010版的,大家可以一并下载,不需要再一个一个找,希望对大家有做帮助。