数字图像处理实习综合课程.docx

上传人:b****8 文档编号:9944078 上传时间:2023-02-07 格式:DOCX 页数:13 大小:42.56KB
下载 相关 举报
数字图像处理实习综合课程.docx_第1页
第1页 / 共13页
数字图像处理实习综合课程.docx_第2页
第2页 / 共13页
数字图像处理实习综合课程.docx_第3页
第3页 / 共13页
数字图像处理实习综合课程.docx_第4页
第4页 / 共13页
数字图像处理实习综合课程.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数字图像处理实习综合课程.docx

《数字图像处理实习综合课程.docx》由会员分享,可在线阅读,更多相关《数字图像处理实习综合课程.docx(13页珍藏版)》请在冰豆网上搜索。

数字图像处理实习综合课程.docx

数字图像处理实习综合课程

数字图像处理课程综合实习

指导书

 

武汉大学遥感信息工程学院

实验中心

数字图像处理课程综合实习说明

实习目的

本实习内容旨在让学生通过用VC等高级语言编写数字图像处理的一些基本算法程序,来巩固和掌握图像处理技术的基本技能,提高实际动手能力,并通过实际编程了解图像处理软件的实现的基本原理。

为学生进一步学习数字摄影测量、遥感和地理信息系统等专业课程以及应用图像处理解决实际问题奠定基础。

实习要求:

(1)实习前应认真复习和熟悉图像的存储格式、图像处理的常用算法的理论知识。

(2)实习者应熟悉C或VC程序设计语言。

(3)每人固定用一台计算机,以班级学号名建立文件夹,将自己的实习成果存放在自己的文件夹中。

(4)实习完成后,老师将根据最后成果评分。

(5)每个同学最后要递交一份实习报告和按实习要求编写的程序。

实习考核评分办法:

(1)考勤(迟到、早退、旷课扣分)(20分);

(2)编程实现的算法和功能(50分);

(3)实习报告(30分);

第一部分数字图像处理的基础知识

1、数字图像概念

数字图像是连续图像的一种近似表示,通常用由采样点的值所组成的矩阵来表示:

 

每一个采样点叫做一个像素(pixel)。

上式中m,n分别为数字图像的行数和列数。

在计算机内,通常采用二维数组来表示数字图像的矩阵。

把像素按不同的方式进行组织或存储,就得到不同的图像格式,把图像数据存成文件就得到图像文件。

图像文件按其数字图像格式的不同一般具有不同的扩展名,常见的图像文件格式有:

RAW格式、BMP格式、TGA格式、PCX格式、GIF格式、TIFF格式等。

2、BMP文件构成

BMP格式:

这是一种常用的数字影像格式,一个BMP文件大体上分成如下4个部分:

BITMAP(位图文件头)、BITMAPINFOHEADER(位图信息头)、Palette(调色版)、DIBPixels(DIB图像数据)。

第一部分:

位图文件头BITMAP,它是一个结构

typedefstructtagBITMAP{

WORDbfType;

DWORDbfSize;

WORDbfReserved1;

WORDbfReserved2;

DWORDbfOffBits;

}BITMAP,FAR*LPBITMAP;

该结构的长度是固定的,为14个字节,各参数说明如下:

✧bfType:

指定文件类型,必须是0x424D,即字符串“BM”。

也就是说所有的“.bmp”文件的头两个字节都是“BM”

✧bfSize:

指定文件大小;

✧bfReserved1、bfReserved2:

为保留字,不用考虑;

✧bfOffBits:

为文件头到实际的位图数据的偏移字节数,也就是前三部分长度之和。

第二部分:

位图信息头BITMAPINFOHEADER

typedefstructtagBITMAPINFOHEADER{

DWORDbfSize;

LONGbiWidth;

LONGbiHeight;

WORDbiPlanes;

WORDbiBitCount;

DWORDbiCompression;

DWORDbiSizeImage;

LONGbiXPelsPerMeter;

LONGbiYPersPerMeter;

DWORDbiClrUsed;

DWORDbiClrImportant;

}BITMAPINFOHEADER,FAR*LPBITMAPINFOHEADER;

该结构的长度为40个节,各参数的意义说明如下:

✧biSize:

指定这个结构的大小,为40个字节;

✧biWidth:

指定图像的宽度,单位是像素;

✧biHeight:

指定图像的高度,单位是像素;

✧biPlanes:

必须是1;

✧biBitCount:

指定表示颜色要用到的位数,常用的值1(黑白)8(256色)、24(真彩色);

✧biCompression:

指定位图是否压缩,有效值为BI_RGB、BI_RLE4、BI_RLE8。

其中BI_RGB为不压缩的情况。

✧biSizeImage;指定实际的位图数据占用的字节数。

可以用下面的公式计算:

需要注意的是:

上述公式中的

不一定总等于biWidth,

必须是4的整数倍,表示大于或等于biWidth的离4最近的整倍数。

✧biXPelsPerMeter:

指定目标设备的水平分辨率,单位是每米的像素个数;

✧biYPelsPerMeter;指定目标设备的垂直分辨率,单位是每米的像素个数;

✧biClrUsed:

指定本图像实际用到的颜色数,如果该值为0则用到的颜色数为2的biBitCount次幂;

✧biClrImportant:

指定本图像中重要的颜色数,如果该值为零,则认为所用的颜色都是重要的。

第三部分:

Palette(调色板)调色板实际上是一个数组,共有biClrUsed(颜色数)个元素(如果该值为0,则为2的biBitCount次幂)。

数组中每个元素(颜色)的类型为一个RGBQUAD结构,占4个字节。

结构定义如下:

typedefstructtagRGBQUAD{

BYTErgbBlue;

BYTErgbGreen;

BYTErgbRed;

BYTErgbReserved;

}RGBQUAD;

注意:

有些位图,比如真彩色图,没有调色板。

他们的位图信息头(BITMAPINFOHEADER)后直接是DIB数据。

第四部分:

DIB图像数据分两种情况:

对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值;对于真彩色图,图像数据就是实际的R、G、B值。

✧对于2色位图,用1位就可以表示该像素的颜色,因此一个字节可以表示8个像素;

✧对于16色位图,用4位可以表示一个像素的颜色,所以1个字节可以表示2个像素;

✧对于256色位图,一个字节刚好表示一个像素;

✧对于真彩色图,3个字节才能表示1个像素

注意:

1.每一行的字节数必须是4的整倍数,如果不是,则需要补齐;

2.图像数据是按照从上到下、从左到右的顺序存储;我们最先读到的是图像最下面一行的左边第一个像素,然后是左边第二个像素接下来是倒数第二行左边第一个像素,左第二个像素依此类推,最后得到的是最上面一行的最后一个像素。

 

3、常用位图函数

intSetDIBitsToDevice(HDChdc,intXDest,intYDest,DWORDdwWidth,DWORDwHeight,

intXSrc,intYSrc,UINTuStartScan,UINTcScanLines,CONSTVOID*lpBits,CONSTBITMAPINFO*lpbmi,UINTfuColorUse)

该函数可以直接在显示器或打印机上显示DIB,在显示时不进行缩放处理,即位图的每一个像素对应于一个显示像素或打印机的打印点。

其中各参数的含义如下:

HDChdc:

设备上下文句柄。

它可以是CDC对象的公共成员变量m_hDC。

intXdest:

指定绘图区域的左上角x坐标(逻辑单位)

intYdest:

指定绘图区域的左上角y坐标(逻辑单位)

DWORDdwWidth:

指定DIB的宽度(逻辑单位)

DWORDdwHeight:

指定DIB的高度(逻辑坐标)

intXsrc:

指定原绘图要绘制区域的左上角x坐标(逻辑单位)

intYsrc:

指定原绘图要绘制区域的左上角y坐标(逻辑单位)

UINTuStartScan:

指定DIB扫描的起始行

UINTcScanLines:

指定DIB扫描的行数(即DIB的高度)

CONSTVOID*lpBits:

指向DIB图像数据的指针

lpbmi:

指向BITMAPINFO结构的指针

fuColorUse:

指定BITMAPINFO结构中的bmiColors参数代表真实的RGB值还是调色板中的索引值,它有两种可能的取值:

DIB_PAL_COLORS:

代表索引值

DIB_RGB_COLORS:

代表真实的RGB值

该函数如果调用成功,返回绘制的行数;失败,则返回0。

intStretchDIBits(HDChdc,intXDest,intYDest,intnDestWidth,

intnDestHeight,intXSrc,intYSrc,intnSrcWidth,intnSrcHeight,

CONSTVOID*lpvBits,CONSTBITMAPINFO*lpbmi,UINT

iUsage,DWORDdwRop)

intnSrcWidth:

指定要复制原图像矩形区域的宽度(逻辑单位)

intnSrcHeight:

指定要复制原图像矩形区域的高度(逻辑单位)

lpBits:

指向DIB图像数据区的指针

lpBitsInfo:

指向BITMAPINFO结构的指针

iUsage:

指定BITMAPINFO结构中的bmiColors参数代表真实的RGB值还是调色板中的索引值,它有两种可能的取值:

DIB_PAL_COLORS:

代表索引值

DIB_RGB_COLORS:

代表真实的RGB值

dwRop:

指定绘制方式;常用的值为SRCCOPY,表示将原位图复制到目标位图

该函数如果调用成功,返回绘制的行数;如果调用失败,则返回GDI_ERROR。

读.bmp文件的函数原型

HDIBReadDIBfile)

函数的参数C:

为文件名;该函数的返回值是文件中的图像数据的句柄。

 

4.将图像数据保存成.bmp文件,函数原型

BOOLWINAPISaveDIB(HDIBhDib,CFile&file)

第一个参数为hDIB表示保存图像数据的内存区域的句柄

第二个参数为保存图像的文件名。

5、查找位图像素LPSTRWINAPIFindDIBBits(LPSTRlpbi):

此函数用于计算DIB位图图像数据的地址,返回一个指向位图图像数据起始位置的指针。

 

6、GlobalLock(HGLOBALhMem)、GlobalUnLock(HGLOBALhMem)申请内存、释放内存函数。

第二部分实习内容

第二部分必做部分实习一、将RAW图像格式转换成BMP图像格式

一、实习目的

熟悉常用的图像文件格式与格式转换,认识各图像格式的优缺点;掌握RAW和BMP格式的存储和读取,编程实现RAW—〉BMP格式的转换,为读取各种格式文件打基础。

二、实习原理

RAW格式:

文件按照数字图像组成的二维矩阵,将像素按行列号顺序存储在文件中。

这种文件只含有图像像素数据,不含有信息头,因此,在读图像时,需要根据文件大小,计算图像所包含的行列号,或者需要事先知道图像大小(矩阵大小)。

但这种文件读取和保存简单。

RAW文件按图像上行到下行、左列到右列顺序存储,而BMP文件数据区按图像上下行到上行、左列列到右列顺序存储到数据区。

实现RAW文件到BMP文件的转换,需要为BMP文件生成文件头、信息头、颜色表、数据区,将RAW文件数据区赋值到BMP文件数据区。

三、实习内容和要求

1、掌握BMP格式的读取和存储,创建CDib类;

2、实现从RAW格式到BMP格式的转换。

四、实习步骤

1、根据学号新建自己的文件夹;

2、使用AppWizard生成一个基于多文档的项目(自己命名);

3、将CxxxxView类的基类设为CscrollView类,使项目显示图像时支持滚动条;

4、将所给程序的Dibapi.h和Dibapi.cpp加入自己新建的项目中;

5、编译连接运行自己的程序,看运行结果;

6、添加菜单项“RAW-〉BMP”,并建立相应的消息处理函数;

7、在函数体内添加自己的代码,实现RAW的读取,并实现RAW到BMP格式的转换功能。

8、修改程序编制中出现的各种语法错误和逻辑错误;

9、检查程序运行结果。

实习二编写线性灰度变换的程序

一、实习目的

熟悉图像点增强的一般方法,掌握图像点增强的算法和原理,会用编程方法实现其算法。

二、实习原理

点运算是指像素值(即像素点上的灰度值)通过运算改变之后,可以改善图象的显示效果。

这是一种像素的逐点运算,是旧图象与新图象之间的映射关系,是一种简单但却十分有效的一种图象处理手段。

常用方法有灰度线性变换、直方图均衡、对比度调整、直方图规定化、对数变换、指数变换、密度分割等方法。

灰度的线性变换就是指图像的中所有点的灰度按照线性灰度变换函数进行变换。

灰度变换方程如下:

输入和输出图像相同灰度。

灰度值上移或下移,更亮或更暗

输出图像的对比度将增大

该方程为线性方程。

式中参数

为输入图像的像素的灰度值,参数

为输出图像的

输出图像的对比度将减小

特殊的,输出图像灰度反转

三、实习内容和要求

1、熟悉基于点运算增强的灰度线性变换算法;

2、认真阅读图像显示程序段以及像素灰度值的读取、改变与存储;

3、在实习一的基础上完成灰度线性变换的程序编制。

四、实习步骤

1、打开自己实习一所建的项目;

2、添加菜单项“线性拉伸”;

3、为该菜单项建立消息处理函数;

4、在函数定义处添加自己的源代码。

5、编译检查语法错误,若编译通过,运行程序,检查是否能实现灰度线性变换。

五、思考题

1、线性变换后,像素的灰度值是否超出0-255的范围,若超出,该如何处理?

2、若要实现直方图均衡,该如何实现?

试用流程图表示。

实习三编写局部处理的程序

一、实习目的

熟悉图像局部处理的一般方法,掌握图像局部处理的算法和原理,会用编程方法实现其算法。

二、实习原理

局部处理在处理某一像素时,利用与该像素相邻的一组像素,经过某种变换得到处理后图像中某一点的像素值。

目标像素的邻域一般是由像素组成的二维矩阵,该矩阵的大小为奇数,目标像素位于该矩阵的中央,即目标像素就是区域的中心像素。

经过处理后,目标像素的值为经过特定算法计算后所得的结果。

主要的局部处理算法有卷积、中值滤波sobel边缘检测等,其中卷积算法的应用最广泛,大部分的局部处理都采用卷积算法来实现。

卷积可以简单地看成加权求和的过程。

卷积时使用的权用一个很小的矩阵来表示,矩阵的大小是奇数,而且与使用的区域的大小相同。

这种权矩阵叫做卷积核,区域中的每个像素分别与卷积核中的每个元素相乘,所有乘积之和即为区域中心像素的新值。

比如,对于一个3x3的区域P与卷积核K卷积后,区域P的中心像素

表示为:

其中,P=

,K=

卷积核中各元素叫做卷积系数。

卷积核中卷积系数的大小、方向积排列顺序决定了卷积的图像处理效果,如低通滤波:

图像平滑与模糊,高通滤波:

图像锐化与清晰。

通常采用3x3、5x5或7x7的卷积核,所有卷积核的行、列数都是奇数。

进行卷积运算时将会遇到的三个问题:

(1)图像边界的问题;

(2)计算得到的中心像素的动态范围问题;

(3)卷积结果像素值的符号问题。

三、实习内容和要求

1、熟悉基于局部处理的卷积算法;

2、在实习二的基础上完成用3x3卷积核实现局部处理的程序编制;

3、解决实习原理中提出的卷积运算中出现的问题。

四、实习步骤

1、打开自己实习一所建的项目;

2、添加菜单项“3x3低通滤波”、“3x3高通滤波”菜单项;

3、为新加的两个菜单项分别建立消息处理函数;

4、在函数体内添加实现3x3低通滤波(或3x3高通滤波)的源代码。

5、编译检查语法错误,若编译通过,运行程序,检查是否能实现局部处理算法。

五、思考题

1、若要检测水平边缘,该采用什么算子;

2、如何实现Sobel边缘检测算子?

实习四—实习八第二部分选做部分

以下内容任选五个单元,算法通过查找资料、阅读文献方式自主设计

完成。

单元一灰度图像中值滤波

单元二图像几何处理:

图像平移、缩放和旋转变换

单元三基于高通滤波的影像融合

单元四基于HIS变换的影像融合方法

单元五灰度图像边缘检测

单元六图像二值化:

判断分析法

单元七Hough变换检测直线

单元八纹理图像的自相关函数分析法

单元九灰度共生矩阵特征提取

单元十基于灰度的模板匹配

单元十一基于特征的模板匹配

单元十二形状特征提取

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1