1、数字图像处理实验指导书数字图象处理实验指导书目 录实验一:数字图像读取及色彩、亮度、对比度变化2实验二:数字图像的噪声去除3实验三:数字图像的边缘检测4实验四:数字图像的放大、插值5实验五:数字图像的Fourier变换6实验六:绘制灰度直方图7实验七:数字图像的转置10附 录:BMP文件格式12实验一:数字图像读取及色彩、亮度、对比度变化一、实验目的:了解数字图像的存储格式,并学会对图像的某些视觉特征作简单处理。二、实验要求:1 从最常用的“.BMP”图像格式中读取图像数据;2 对数字图像的表示方式(如RGB、YUV)及各种表示方式之间的转换有初步了解;3 根据输入参数改变数字图像的色彩、亮度
2、、对比度。三、实验步骤:1 利用工具(如ACDSee、PhotoShop)将Sample.1.jpg转换为Sample1.bmp;2 根据BMP格式(详见附录),将图像内容读入内存数组;3 通过访问数字图像RGB三个通道的对应矩阵,改变数字图像的色彩;4 将数字图像的RGB表示转换为YUV表示;Y=0.30R+0.59G+0.11B U=0.70R-0.59G-0.11BV=-0.30R-0.59G+0.89B5 通过访问Y(亮度)通道,改变数字图像的亮度;6 通过Y(亮度)通道作灰度的线性变换,改变数字图像的对比度。四、实验图像:Sample1.jpg实验二:数字图像的噪声去除一、实验目的:
3、学会用滤波器去除图像中的噪声。二、实验要求:1 用均值滤波器去除图像中的噪声;2 用中值滤波器去除图像中的噪声;3 比较两种方法的处理结果三、实验步骤:1 利用工具(如ACDSee、PhotoShop)将Sample2-2.jpg转换为Sample2-2.bmp;2 根据BMP格式(详见附录),将图像内容读入内存数组;3 用均值滤波器去除图像中的噪声;4 用中值滤波器去除图像中的噪声;将两种处理方法的结果与原图比较;5 注意两种处理方法对边缘的影响。四、实验图像:Sample2-1.jpg(原始图像)Sample2-2.jpg(加噪声后的图像)实验三:数字图像的边缘检测一、实验目的:学会两种简
4、单的图像边缘检测方法。二、实验要求:1 用梯度算子检测图像中的边缘;2 用Sobel算子检测图像中的边缘;3 比较两种方法的处理结果三、实验步骤:1利用工具(如ACDSee、PhotoShop)将Sample3-1.jpg,Sample3-2.jpg转换为Sample3-1.bmp,Sample3-2.bmp;2 根据BMP格式(详见附录),将图像内容读入内存数组;3 用梯度算子检测图像中的边缘信息; 用Sobel算子检测图像中的边缘信息;4 改变阈值,观察边缘状况5 将两种处理方法的结果作比较;四、实验图像:Sample3-1.jpgSample3-2.jpg实验四:数字图像的放大、插值一、
5、实验目的:比较两种图像的放大、插值方法方法。二、实验要求:1 用双线性插值法放大图像;2 用Sinc函数插值法放大图像;3 比较两种内插方法的处理效果和速度三、实验步骤:1 利用工具(如ACDSee、PhotoShop)将Sample2-1.jpg转换为Sample2-1.bmp;2 根据BMP格式(详见附录),将图像内容读入内存数组;3 用双线性插值法放大图像; (算法详见讲义)4用Sinc函数插值法放大图像;(算法详见讲义)考虑到程序的运行速度,可以仅对图像进行2的幂次方倍数的放大,并据此对算法进行优化。5将两种处理方法的结果及速度作比较。四、实验图像:Sample2-1.jpg实验五:数
6、字图像的Fourier变换一、实验目的:掌握Fourier变换、反变换的算法实现,并初步理解Fourier变换的物理意义。二、实验要求:1 用Fourier变换算法对图像作二维Fourier变换。2 用Fourier反变换算法对图像作二维Fourier反变换。3 评价人眼对图像幅频特性和相频特性的敏感度。三、实验步骤:1 利用工具(如ACDSee、PhotoShop)将Sample5-1.jpg转换为Sample5-1.bmp;2 根据BMP格式(详见附录),将图像内容读入内存数组;3 用Fourier变换算法,对图像作二维Fourier变换;(考虑图像为256*256,可以采用快速Fouri
7、er变换方法)4 用Fourier系数的幅度进行Fourier反变换;5 用Fourier系数的相位进行Fourier反变换;6 比较4、5的结果,评价人眼对图像幅频特性和相频特性的敏感度。四、实验图像:Sample5.jpg(256*256)实验六:绘制灰度直方图一、实验目的:掌握绘制灰度直方图算法实现,理解灰度直方图进行图像增强原理。二、实验要求:(1)创建灰度直方图数据(2)定制灰度直方图对话框(3)显示直方图三、参考程序(1)创建灰度直方图数据/* /函数名称: CreateHistogram()/参数说明: nX1、 nY1、 nX2、 nY2为需创建直方图图像区域坐标, 默认为-
8、/ 1。pData、pPalette、 nWidthBytes为位图数据指针、调色板指/ 针、 图像行字节宽度/返回值: int型数组指针*pBuffer。在数组中依次存储亮度、红、绿、蓝分量/ 的直方图数据, 每个分量各占256个元素FK)/基本功能:创建指定的图像对象的直方图数据。如果未给定坐标,则针对整 个图像/* int *CPointPro: CreateHistogram(int nX1, int nY1, int nX2, int nY2, unsigned char *pData, RGBQUAD *pPalette, int nWidthBytes) /图像指针为空, 无法操
9、作返回 if(m_pDibObject = NULL) return(FALSE); /分配直方图数据缓存区(数组) int *pBuffer = new int 256 * 4; /分配直方图数据缓存区失败 if(pBuffer = NULL) return( NULL ); /直方图数据缓存区清零 memset(pBuffer, 0, (256 * 4) * sizeof(int); /变量定义 DWORD dwGray; int x, y; unsigned char *pTemp, ucRed, ucGreen, ucBlue; /图像的高度 int nHeight = m_pDibO
10、bject-GetHeight(); switch(m_pDibObject-GetNumBits() case 24: for(y = nY1; y nY2; y+) /数据指针定位到图像数据起始位置pTemp = pData; /数据指针定位到图像数据每行的起始零位置 pTemp += ( nHeight - 1 - y) * nWidthBytes); /数据指针定位到图像数据每行的起始nX1位置 pTemp += (nX1 * 3); for(x=nX1; xm_pDibObject = = NULL ) return; /在点处理CPointPro类中创建用来绘制直方图的数据 CPo
11、intPro PointOperation( pDoc-m_pDibObject ); int *pHistogram = PointOperation.GetHistogram(); /生成一个对话框CDlgIntensity类的实例 CDlgIntensity HistDlg; /将直方图数据传给CDlgIntensity的成员变量m_pnHistogram if( pHistogram != NULL ) /设置直方图数据指针 HistDlg.m_pnHistogram = pHistogram; /设置当前像素值为0的像素数 HistDlg.m_nCurrentPiexsNum = p
12、Histogram0; /设置是否为256级灰度图像 HistDlg.m_bIsGray256 = PointOperation.IsGray256(); /显示对话框 if ( HistDlg.DoModal() != IDOK) return; delete pHistogram; 四、实验图像:Lena图像及其直方图实验七:数字图像的转置一、实验目的:掌握数字图像的几何变换;二、实验要求:编制数字图像转置的算法三、参考程序:/*/ 函数名称: BOOL Transpose()/ 基本功能: 本函数对传入的CDibObject对象中的图像进行转置操作/ 参数说明: CDibObject *
13、pDibObject 默认为NULL/ 返回值: BOOL 转置成功返回TRUE, 否则返回FALSE/*BOOL CGeoTrans: : Transpose(CDibObject *pDibObject) /定义指向源图像及新图像的指针、 位图数据指针、 调色板等指针变量 /获取源图像指针及文件头、 信息头、 调色板及图像数据等信息 /计算新图像大小(包括文件头、 信息头、 调色板和图像数据) /为新图像分配内存, 指定新图像的文件头、 信息头、 调色板及图像数据指针 /用255填充新图像数据区, 用源图像的文件头、 信息头填充相应的新图像 /调整文件总字节数、 新图像的宽度和高度等信息,
14、 用原调色板填充新调色板 /由图像位数确定的移动字节数 int nMovedBits = 1; switch( m_pDibObject-GetNumBits() ) case 8: nMovedBits = 1; break; case 16: nMovedBits = 2; break; case 24: nMovedBits = 3; break;case 32: nMovedBits = 4; break; / 针对图像每行进行操作 for(y = 0; y nOldHeight; y+) /指向源图像第y行 pOldTemp = pOldBits; pOldTemp += (nOld
15、Height -1 -y) * nOldWidthBytes; / 针对每行图像每列进行操作 for(x = 0; x nOldWidth; x+) /指向转置后的图像第x行, 第y个像素的指针 pNewTemp = pNewBits; pNewTemp += (nNewHeight -1 -x) * nNewWidthBytes; pNewTemp += y * nMovedBits; /复制像素 memcpy(pNewTemp, pOldTemp, nMovedBits); pOldTemp += nMovedBits; /将内存解锁和将不再使用的内存释放,将新图像设置为当前图像,返回TR
16、UE 四、实验图像:转置前后的图像附录:BMP文件格式BMP文件由以下几部分组成:文件头、信息头、调色板信息(在256色图像中存在)和图像数据部分。文件头格式:typedef struct tagBITMAPFILEHEADER / bmfh WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; BITMAPFILEHEADER; 信息头格式:typedef struct tagBITMAPINFOHEADER / bmih DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; BITMAPINFOHEADER; 调色板信息:(由于本实验提供的均为真彩色图,没有调色板信息,故不再详述)图像数据:自左向右,自下向上,按照R-G-B三通道次序排列。- 14 -