1 / 26
文档名称:

数字图像处理算法实现.doc

格式:doc   页数:26页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数字图像处理算法实现.doc

上传人:sanshengyuanting 2016/1/4 文件大小:0 KB

下载得到文件列表

数字图像处理算法实现.doc

相关文档

文档介绍

文档介绍:数字图像处理算法实现------------编程心得(1)2001414班朱伟20014123摘要:关于空间域图像处理算法框架,直方图处理,空间域滤波器算法框架的编程心得,使用GDI+(C++)一,图像文件的读取初学数字图像处理时,图像文件的读取往往是一件麻烦的事情,我们要面对各种各样的图像文件格式,如果仅用C++的fstream库那就必须了解各种图像编码格式,这对于初学图像处理是不太现实的,需要一个能帮助轻松读取各类图像文件的库。在Win32平台上GDI+(C++)是不错的选择,不光使用上相对于Win32GDI要容易得多,平台上的GDI+。Gdiplus::Bitmap类为我们提供了读取各类图像文件的接口,Bitmap::LockBits方法产生的BitmapData类也为我们提供了高速访问图像文件流的途径。这样我们就可以将精力集中于图像处理算法的实现,而不用关心各种图像编码。具体使用方式请参考MSDN中GDI+文档中关于Bitmap类和BitmapData类的说明。另外GDI+仅在WindowsXP/2003上获得直接支持,对于Windows2000必须安装相关DLL,或者安装有Office2003,等软件。二,空间域图像处理算法框架(1)在空间域图像处理中,对于一个图像我们往往需要对其逐个像素的进行处理,对每个像素的处理使用相同的算法(或者是图像中的某个矩形部分)。即,对于图像f(x,y),其中0≤x≤M,0≤y≤N,图像为M*N大小,使用算法algo,则f(x,y)=algo(f(x,y))。事先实现一个算法框架,然后再以函数指针或函数对象(functor,即实现operator()的对象)传入算法,可以减轻编程的工作量。如下代码便是一例:#ifndefPROCESSALGO_H#definePROCESSALGO_H#include<>#include<>namespacensimgtk{template<typenamepixelType,Gdiplus::PixelFormatpixelFormat,classProcessor>boolProcessPixelsOneByOne(Gdiplus::Bitmap*constp_bitmap,Processorprocessor,unsignedintx,unsignedinty,unsignedintwidth,unsignedintheight){if(p_bitmap==NULL){returnfalse;}if((width+x>p_bitmap->GetWidth())||(height+y>p_bitmap->GetHeight())){returnfalse;}Gdiplus::BitmapDatabitmapData;Gdiplus::Rectrect(x,y,width,height);if(p_bitmap->LockBits(&rect,Gdiplus::ImageLockModeWrite,pixelFormat,&bitmapData)!=Gdiplus::Ok){returnfalse;}pixelType*pixels=(pixelType*);for(unsignedintrow=0;row<height;++row){for(unsignedintcol=0;col<width;++col){processor(&pixels[col+row*(pixelType)]);}}if(p_bitmap->UnlockBits(&bitmapData)!=Gdiplus::Ok){returnfalse;}returntrue;}}#endifProcessPixelsOneByOne函数可以对图像中从(x,y)位置起始,width*height大小的区域进行处理。模板参数pixelType用于指定像素大小,例如在Win32平台上传入unsignedchar即为8位,用于8阶灰度图。模板参数Processor为图像处理算法实现,可以定义类实现voidoperator(pixelType*)函数,或者传入同样接口的函数指针。如下便是一些算法示例(说明见具体注释):#ifndefSPATIALDOMAIN_H#defineSPATIALDOMAIN_H#include<cmath>#include<string>namespacensimgtk{//8阶灰度图的灰度反转算法classNegativeGray8{public:voidoperator()(unsignedchar*constp_value){*p_value^=0