图像处理实验报告书_2.docxVIP

  • 5
  • 0
  • 约2.3千字
  • 约 6页
  • 2018-10-26 发布于贵州
  • 举报
图像处理实验报告书_2

实验报告单 院(系)计算机学院专业计算机科学与技术班级 12计科4 姓名郝耀峰学号同组人无 实验室S4305 组号日期2015.4.2 课程数字图像处理指导老师鲁静成绩 实验项目编号 03 试验项目名称点运算之阈值变换一、实验目的 1、参照程序中“点运算-线性变换”函数,编写完成阈值变换功能的函数OnPointThre( )和ThresholdTrans( ),并加入到程序的相应位置。 2、运行程序观察阈值变换的效果。 试验环境(仪器设备、软件等) Windows 7 VC6.0 三、实验原理(或要求) 1、点运算实际上是灰度到灰度的映射过程,设输入图象为A(x,y),输出图象为B(x,y),则点运算可表示为 B(x,y)=f[A(x,y)] 即点运算完全由灰度映射函数s=f(r)决定。 2、阈值化处理是最常用的一种非线性运算,它的功能是选择一阈值,将图象二值化,用于图象分割及边缘跟踪等处理。 四、实验步骤 void CCh1_1View::OnPointThre() { // 获取文档 CCh1_1Doc* pDoc = GetDocument(); // 指向DIB的指针 LPSTR lpDIB; // 指向DIB象素指针 LPSTR lpDIBBits; // 创建对话框 CDlgLinerParadlgPara; // 阈值变换的参数 FLOAT fA; // 锁定DIB lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc-GetHDIB()); // 找到DIB图像象素起始位置 lpDIBBits = ::FindDIBBits(lpDIB); // 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的线性变换,其它的可以类推) if (::DIBNumColors(lpDIB) != 256) { // 提示用户 MessageBox(目前只支持256色位图的线性变换!, 系统提示 , MB_ICONINFORMATION | MB_OK); // 解除锁定 ::GlobalUnlock((HGLOBAL) pDoc-GetHDIB()); // 返回 return; } // 初始化变量值 dlgPara.m_fA = 128.0; // 显示对话框,提示用户设定阈值 if (dlgPara.DoModal() != IDOK) { //返回 return; } // 获取用户设定的阈值 fA = dlgPara.m_fA; // 删除对话框 delete dlgPara; // 更改光标形状 BeginWaitCursor(); // 调用ThresholdTrans( )函数进行阈值变换 thresholdTrans(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), fA); // 设置脏标记 pDoc-SetModifiedFlag(TRUE); // 更新视图 pDoc-UpdateAllViews(NULL); // 解除锁定 ::GlobalUnlock((HGLOBAL) pDoc-GetHDIB()); // 恢复光标 EndWaitCursor(); } BOOL WINAPI ThresholdTrans(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, BYTE bThre) { // 指向源图像的指针 unsigned char* lpSrc; // 循环变量 LONG i; LONG j; // 图像每行的字节数 LONG lLineBytes; // 中间变量 FLOAT fTemp; // 计算图像每行的字节数 lLineBytes = WIDTHBYTES(lWidth * 8); // 每行 for(i = 0; ilHeight; i++) { // 每列 for(j = 0; j lWidth; j++) { // 指向DIB第i行,第j个象素的指针 lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j; // 阈值变换 fTemp = bThre * (*lpSrc); // 判断是否超出范围 if

文档评论(0)

1亿VIP精品文档

相关文档