资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数字图像与视频处理课程第一次作业姓名: 吴佳林 班级: 自动化 12 学号: 2110504047 日期: 2014.3.17 摘 要本次报告首先简单阐述了 BMP 图像格式及其相关数据结构,随后主要完成了作业要求中关于图像处理与计算的各项任务。本次作业以 Matlab 2013a 为平台,通过对 lena.bmp,elain.bmp 图像文件的编程处理,分别得到了 lena.bmp 图像的 8 到 1 级灰度逐级递减显示,lena.bmp 图像的均值和方差,通过近邻、双线性和双三次插值法对 lena.bmp 进行 4 倍放大后得到的 20482048 尺寸图像,和对 lena.bmp、elain.bmp 图像分别进行水平 shear 变换和旋转变换后的图像及其 4 倍插值放大图像。以上任务完成后均得到了预期的结果。正 文1.BMP 图像格式简介1.1 BMP 格式概述BMP(全称 Bitmap)是 Windows 操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB) ,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP 文件所占用的空间很大。BMP 文件的图像深度可选 lbit、4bit、8bit 及 24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。1.2 BMP 格式组成典型的 BMP 图像文件由四部分组成:(1):位图头文件数据结构,它包含 BMP 图像文件的类型、显示内容等信息;(2):位图信息数据结构,它包含有 BMP 图像的宽、高、压缩方法,以及定义颜色等信息;(3):调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的 BMP)就不需要调色板;(4):位图数据,这部分的内容根据 BMP 位图使用的位数不同而不同,在24位图中直接使用 RGB,而其他的小于24位的使用调色板中颜色索引值。1.3 BMP 格式对应数据结构BMP 文件由文件头、位图信息头、颜色信息和图形数据四部分组成。1.3.1 BMP 文件头(14 字节)BMP 文件头数据结构含有 BMP 文件的类型、文件大小和位图起始位置等 信息。其结构定义如下:typedef struct tagBITMAPFILEHEADERWORD bfType; / 位图文件的类型,必须为 BM(1-2 字节) DWORD bfSize; / 位图文件的大小,以字节为单位(3-6 字节)WORD bfReserved1; / 位图文件保留字,必须为 0(7-8 字节)WORD bfReserved2; / 位图文件保留字,必须为 0(9-10 字节)DWORD bfOffBits; / 位图数据的起始位置,以相对于位图(11-14字节)/ 文件头的偏移量表示,以字节为单位 BITMAPFILEHEADER;1.3.2 位图信息头(40 字节)BMP 位图信息头数据用于说明位图的尺寸等信息。typedef struct tagBITMAPINFOHEADERDWORD biSize; / 本结构所占用字节数( 15-18 字节)LONG biWidth; / 位图的宽度,以像素为单位(19-22 字节)LONG biHeight; / 位图的高度,以像素为单位( 23-26 字节)WORD biPlanes; / 目标设备的级别,必须为 1(27-28 字节)WORD biBitCount;/ 每个像素所需的位数,必须是 1(双色) , (29-30 字节)/ 4(16 色) ,8(256 色) 16(高彩色) 或 24(真彩色)之一DWORD biCompression; / 位图压缩类型,必须是 0(不压缩) ,(31-34 字节)/ 1(BI_RLE8 压缩类型)或 2(BI_RLE4 压缩类型)之一DWORD biSizeImage; / 位图的大小(其中包含了为了补齐行数是 4的倍数而添加的空字节),以字节为单位(35-38 字节)LONG biXPelsPerMeter; / 位图水平分辨率,每米像素数(39-42 字节)LONG biYPelsPerMeter; / 位图垂直分辨率,每米像素数(43-46 字节)DWORD biClrUsed;/ 位图实际使用的颜色表中的颜色数( 47-50 字节)DWORD biClrImportant;/ 位图显示过程中重要的颜色数(51-54 字节) BITMAPINFOHEADER;1.3.3 颜色表颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是RGBQUAD 类型的结构,定义一种颜色。RGBQUAD 结构的定义如下:typedef struct tagRGBQUAD BYTE rgbBlue;/ 蓝色的亮度(值范围为 0-255)BYTE rgbGreen; / 绿色的亮度(值范围为 0-255)BYTE rgbRed; / 红色的亮度(值范围为 0-255)BYTE rgbReserved;/ 保留,必须为 0 RGBQUAD;颜色表中 RGBQUAD 结构数据的个数有 biBitCount 来确定:当 biBitCount=1,4,8时,分别有2,16,256个表项;当 biBitCount=24时,没有颜色表项。位图信息头和颜色表组成位图信息,BITMAPINFO 结构定义如下:typedef struct tagBITMAPINFO BITMAPINFOHEADER bmiHeader; / 位图信息头RGBQUAD bmiColors1; / 颜色表 BITMAPINFO;1.3.4 位图数据位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:当 biBitCount=1 时,8 个像素占 1 个字节;当 biBitCount=4 时,2 个像素占 1 个字节;当 biBitCount=8 时,1 个像素占 1 个字节;当 biBitCount=24 时,1 个像素占 3 个字节,按顺序分别为 B,G,R;Windows 规定一个扫描行所占的字节数必须是 4 的倍数(即以 long 为单位) ,不足的以 0 填充。2.把 lena 512*512 图像灰度级逐级递减 8-1 显示2.1 实验原理给定的 lena.bmp 是一幅 8 位灰阶的图像,即有 256 个灰度色。则 K 位灰阶图像中某像素的灰度值 (以 阶色为基准)与原图同像素的灰度值,_yxkValuek2(以 256 阶色为基准 )的对应关系为:),yxValue(1.1)2,(,_8klFlork(1.1)式中 函数为向下取整操作。取一确定 k 值,对原图进行上式运()算即得降阶后的 k 位灰阶图像矩阵。值得注意的是,此时的白色灰度值变为而不一定是 255,这一点在显示图像时需要考虑。12k2.2 实验方法首先通过 imread()函数读入 lena.bmp 并转换成 double 型放至变量 lena。再依照(1.1)式对 lena 矩阵进行灰度降阶运算,将结果保留至 lena_alter 变量。最后利用 imshow()函数及其自适应灰度显示功能将 lena_alter(以 256 阶色基准)显示出来。8 阶至 1 阶图像整体呈现由 for 循环实现。2.3 实验结果程序运行结果如图 1.1 所示:图 1.1由上图可以看出,在灰度级下降到 5 之前,肉眼几乎感觉不出降阶后图像发生的变化。但从 4 灰度级开始,肉眼明显能感觉到图像有稍许的不连续,与原图灰度渐变区对应位置灰度不连续的现象表现更加明显。随着灰度阶数的继续下降,图像开始出现大片的伪轮廓,最终的极端情况是退化为只有黑白两色的二值化图像。由此可以得出,图像采样的灰度阶数越高,肉眼看去更接近与现实情况。3.计算 lena 图像的均值与方差3.1 实验原理对分辨率为 的灰度图像,其均值和方差分别为:NM(2.1)ijjifm1),(2.2)MiNjmjif122),(3.2 实验方法通过 imread()函数读入 lena.bmp 并转换成 double 型放至变量 lena,再利用MATLAB 中提供的求二维矩阵全体元素均值和方差的函数 mean2()和 std2()分别求取 lena 的均值和方差并存入 lena_avg 和 lena_var,最后通过 fpringtf()输出结果。3.3 实验结果图像的均值为:99.051图像的方差为:2796.043在这里,图像的均值可反应图像整体的明暗程度,而方差可以反应图像整体的对比度情况。4.把 lena 图像用近邻、双线性和双三次插值法 zoom 到 2048*2048 4.1 实验原理图像插值就是利用已知邻近像素点的灰度值来产生未知像素点的灰度值,以便由原始图像再生出具有更高分辨率的图像。典型方法包括最近邻、双线性、双三次三种方法。最邻近插值法就是将待插值点像素的灰度值取为其相对于原图坐标中最邻近像素点的灰度值。这种方法比较简单,计算速度快,但效果不好,会产生严重的“棋盘格”效应。双线性插值法是将待插值点像素的灰度值取为其在原图坐标中距离最近的4 个像素点灰度值的加权和。具体关系式为:(3.1) )1,(,)()1()(1)(),( yxffuvvuuvyuxf其中 为待插值点在原图中的相对整数坐标, 为待插值点在原图中的相对, ,小数坐标。双线性插值法可以比较平滑得对图像进行插值,效果令人满意,但计算速度较最邻近法有所下降。双三次插值是一种更加复杂的插值方式,其插值函数为:(3.2)30),(ijjijyxayxf通过待插值像素点周围 9 个点的灰度值,可以结合导数信息列出线性方程组求解系数向量。双三次插值法较双线性插值法能显示更多的细节,效果更好,但计算开销较大,速度不理想。4.2 实验方法为使实验代码更具模块化且易于修改和维护,这里将三种插值算法封装为功能函数(分别为 my_imresize_n(),my_imresize_b(),my_imresize_c() )供插值集成函数 my_imresize()格式化调用。在最邻近法的实现中,通过对待插值点的相对坐标取四舍五入得到最邻近像素点灰度值,完成了对目标点像素的赋值。在双线性法的实现中,待插值点的灰度值由(3.1) 式计算得出。在双三次法的实现中,待插值点的灰度值由(3.2) 式计算得出,而(3.2) 式中的插值函数系数 由待插值点最近四点以及右下侧五点共九个点的灰度值带入含a有微分信息的 16 元 1 次方程组得出。以上三种方法均通过扩充原图矩阵边缘行列数规避了坐标索引溢出或不为非负值的问题。4.3 实验结果对 lena.bmp 图像利用三种插值方法得到如图 2.1 所示结果:图 2.1放大后细节表现如图 2.2 所示:图 2.2由图 2.2 可清楚看到,经过最邻近插值后的图像产生的“棋盘格”效应,而后两种插值方法表现的效果比较平滑,令人满意。三种方法在实验中运行的时间分别为:nearest :5.228sbilinear :9.880sbicubic :34.299s可见双三次插值的时间开销最大,双线性其次,最邻近最小。在MATLAB 中也有这三种插值方法的功能函数,且运行时间比以上结果快得多。原因是自己在实现算法的过程中运用了较多的循环结构,使得在 MATLAB的环境下程序效率低下。5.把 lena 和
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号