现在的位置: 首页 > 综合 > 正文

Windows下编译测试BM3D算法效果

2013年04月28日 ⁄ 综合 ⁄ 共 2783字 ⁄ 字号 评论关闭

一.BM3D及代码简单介绍

目前公认比较好的去噪算法

 

源代码bm3d_src.ziphttp://www.ipol.im/pub/art/2012/l-bm3d/

 

This source code provides an implementation of the BM3D image denoising.

 

The code is compilable on Unix/Linux and Mac OS.

 

- Compilation.

Automated compilation requires the make program.

 

- Library.

This code requires the libpng library and the fftw library.

 

- Image format.

Only the PNG format is supported.

 

二.Windows下编译使用

平台:win7+VS2010

建立bm3dtest控制台工程,并把bmd3d_src加入到工程中。通过前面介绍可知,BM3D需要png库和fftw库,因此需要加入这些第三方库。

 

1.fftw3库配置

下载fftw-3.3.3-dll32.zip (http://www.fftw.org/install/windows.html)

按照说明,生成dll文件即可(其中已经包含了lib文件)

添加lib

../fftw-3.3.3-dll32/libfftw3-3.lib

../fftw-3.3.3-dll32/libfftw3f-3.lib

../fftw-3.3.3-dll32/libfftw3l-3.lib

适当修改其中代码,部分如:

   //! Allocate plan for FFTW library

         //fftwf_plan plan_2d_for_1[nb_threads];

 //   fftwf_plan plan_2d_for_2[nb_threads];

 //   fftwf_plan plan_2d_inv[nb_threads];

         // modified by loadstar

         fftwf_plan* plan_2d_for_1 = new fftwf_plan[nb_threads];

         fftwf_plan* plan_2d_for_2 = new fftwf_plan[nb_threads];

         fftwf_plan* plan_2d_inv = new fftwf_plan[nb_threads];

 

2.
VC下如何使用头文件unistd.h

头文件unistd.hLinux/Unix的系统调用,包含了许多UNIX系统服务函数原型,如openreadwrite_exitgetpid等函数。在linux下能够编译通过的包含此头文件的程序,在VC下编译时出现了如下问题

 

          fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory

 

         其实解决这个问题的方法并不难,只要在你的默认库文件夹下(例如D:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\)添加一个unistd.h文件即可,其内容如下:

 

         #ifndef _UNISTD_H

         #define _UNISTD_H

 

         #include <io.h>

         #include <process.h>

 

         #endif /* _UNISTD_H */

        

         这样在重新编译包含unis.h的程序就能通过了

 

3. png库编译

gzip,zlib,以及图形格式png,使用的是同一个压缩算法deflate

 

libpng1250http://www.libpng.org/pub/png/libpng.html)文件夹中包含了zlib工程文件(lpng1250\projects\visualc71文件夹下)libpng项目解决方案中包含了工程libpng.vcproj,
pngtest.vcproj, zlib.vcproj
,但是该zlib工程编译时有些问题,懒得解决了,直接使用lpng1513版本中的zlib工程。

下载lpng1513.ziphttp://www.libpng.org/pub/png/libpng.html)解压,通过查看zlib.vcproj文件,可以看出该工程的目录位置:..\..\..\zlib-1.2.5。在该目录位置解压出zlib127.ziphttp://www.zlib.net/),因为其中使用zlib-1.2.5,把zlib127名称修改为zlib-1.2.5即可。在lpng1513中用vs2010打开解决方案libpng.sln。用Debug编译其中的zlib工程,生成lpng1513\projects\vstudio\Debug\zlib.lib文件。(该版本下读取png图片有问题,png库仍然采用lpng1250

 

打开lpng1250工程(lpng1250\projects\visualc71\libpng.sln

加上zlib头文件:

在属性-C/C++-常规-附加库包含目录加上..\..\..\zlib-1.2.5(如果有其他,修改之)

选择LIB Debug编译,则生成lpng1250\projects\visualc71\Win32_LIB_Debug\libpngd.lib

 

bm3dtest工程:

加上头文件

在属性-C/C++-常规-附加库包含目录添加

..\lpng1250

..\zlib-1.2.5

 

项目包含.lib文件所在的目录:

属性--链接器--常规--附加库目录

..\lpng1250\projects\visualc71\Win32_LIB_Debug

..\lpng1513\projects\vstudio\Debug

添加lib文件

属性--链接器--输入--附加依赖项(libpngd.lib zlib.lib

在生成的bm3dtest.exe目录中加入相应的dll文件即可(fftw),完成。找个图片试试效果吧。

 

三.后记:

1. 参考

Windowszlib库和libPng库的编译和使用

http://blog.sina.com.cn/s/blog_659b2b3201013y9k.html

 

2.直接使用lpng1513版本产生的libpng库,读取图像时出现错误

 

使用libpng1250版本中zlib工程编译时出现错误。

PNG格式只是为了测试算法效果的,这些问题就不花功夫了。哪位如果有时间找到问题的答案,欢迎告知:)

 

抱歉!评论已关闭.