用c++对感兴趣区域的提取

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一. 设计目的和意义

通过设计,较全面地掌握各种图像提取算法的基本理论、原理和实现手段,并能分析感兴趣区域(ROI)提取效果及对进一步处理的影响,使学生具有一定综合分析问题和解决问题的能力。

二.设计内容和要求

原始数据:

所获取二值图像。

技术要求:

(1)完成题目所要求技术:全面掌握与区域提取算法相关的基本理论、原理和实现手段;

(2)通过仿真(实验)验证,编程实现对处理实景图像进行感兴趣区域提取的算法和实现手段,并进行结果分析。

设计要求:

课程设计的目的在于培养学生的综合素质,要求学生做到:

(1)根据题目要求查阅有关资料,确定方案,写出设计方案;

(2)根据对选题的理解,消化查阅资料,给出相关的实现算法和理论根据;

(3) 在Matlab或C++或VC环境下,实现算法,并给出仿真结果;

(4) 对结果进行分析总结

三.设计工作任务

每个成员单独用一种方法,在Matlab或VC环境下运行程序,达到对图像感兴趣区域的提取的目的。

四.每种特征提取的代码和运行结果

1 通过腐蚀实现轮廓提取

(1)程序代码

// DibImage.cpp: implementation of the CDibImage class.

// DIB(Independent Bitmap) 函数:

//

// PaintDIB() - 绘制DIB对象

// CreateDIBPalette() - 创建DIB对象调色板

// FindDIBBits() - 返回DIB图像象素起始位置

// DIBWidth() - 返回DIB宽度

// DIBHeight() - 返回DIB高度

// PaletteSize() - 返回DIB调色板大小

// DIBNumColors() - 计算DIB调色板颜色数目

// CopyHandle() - 拷贝内存块

//

// SaveDIB() - 将DIB保存到指定文件中

// ReadDIBFile() - 重指定文件中读取DIB对象

//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "TemplateTrans.h"

#include "DibImage.h"

#include "math.h"

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

////////////////////////////////////////////////////////////////////// CDibImage::CDibImage()

{}

CDibImage::~CDibImage()

{}

//////////////////////////////////////////////////////////////////////

// function

////////////////////////////////////////////////////////////////////// BOOL CDibImage::Enhance(LPSTR lpDIBBits,LONG lWidth,LONG lHeight) {

//边缘检测

LPSTR lpSrc;

LPSTR lpDst;

LPSTR lpNewDIBBits;

HLOCAL hNewDIBBits;

long i,j;

unsigned char n,e,s,w,ne,se,nw,sw;

unsigned char pixel;

hNewDIBBits=LocalAlloc(LHND,lWidth*lHeight);

if(hNewDIBBits==NULL)

{return FALSE;}

lpNewDIBBits=(char *)LocalLock(hNewDIBBits);

lpDst=(char *)lpNewDIBBits;

memset(lpDst,(BYTE)255,lWidth*lHeight);

for(j=1;j

{

for(i=1;i

{lpSrc=(char*)lpDIBBits+lWidth*j+i;

lpDst=(char*)lpNewDIBBits+lWidth*j+i;

pixel=(unsigned char)*lpSrc;

if(pixel!=255&&pixel!=0)

return FALSE;

if(pixel==0)

{*lpDst=(unsigned char)0;

nw=(unsigned char)*(lpSrc+lWidth-1);

n=(unsigned char)*(lpSrc+lWidth);

ne=(unsigned char)*(lpSrc+lWidth+1);

w=(unsigned char)*(lpSrc-1);

e=(unsigned char)*(lpSrc+1);

sw=(unsigned char)*(lpSrc-lWidth-1);

s=(unsigned char)*(lpSrc-lWidth);

se=(unsigned char)*(lpSrc-lWidth+1);

if(nw+n+ne+w+e+sw+s+se==0)

{*lpDst=(unsigned char)255;}

} } }

memcpy(lpDIBBits,lpNewDIBBits,lWidth*lHeight);

LocalUnlock(hNewDIBBits);

LocalFree(hNewDIBBits);

return TRUE; }

(2)运行结果

相关文档
最新文档