用c++对感兴趣区域的提取
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)运行结果