版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 数字图像处理第一次作业 姓名: 班级: 学号: 提交日期:2015年3月13日 摘要本次报告首先简单阐述了BMP图像格式及其相关数据结构,随后主要完成了作业要求中关于图像处理与计算的各项任务。本次作业以Matlab 2014为平台,通过对lena.bmp,elain.bmp图像文件的编程处理,分别得到了lena.bmp图像的8到1级灰度逐级递减显示,lena.bmp图像的均值和方差,通过近邻、双线性和双三次插值法对lena.bmp进行4倍放大后得到的2048×2048尺寸图像,和对lena.bmp、elain.bmp图像分别进行水平偏移变换和旋转变换后的图像及其4倍插值放大图像。以
2、上任务完成后均得到了预期的结果。1.Bmp图像格式简介。1.1 BMP格式概述BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。1.2 BMP格式组成典型的BMP图像文件由四部分组成:(1)位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;(2)位图信息数据结
3、构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;(3)调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;(4)位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。1.3 BMP格式对应数据结构 BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。 1.3.1 BMP文件头(14字节) BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。 其结构定义如下:typedef struct tagBITMAPFILEHEADER
4、WORD 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 tagBITMA
5、PINFOHEADER DWORD 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(B
6、I_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.
7、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个表项; 当
8、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
9、个字节;当biBitCount=24时,1个像素占3个字节,按顺序分别为B,G,R;Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位), 不足的以0填充。 2. 把lena512*512图像灰度级逐级递减8-1显示。(1) 问题分析:本题中对图像进行的操作是直接灰度变换。首先利用imread函数读入 lena512.bmp,得到图像的灰度矩阵I,之后对灰度矩阵中的每个元素进行操作,即阵 列操作。将灰度矩阵的每个元素值除以二,取整后将结果转换为无符号8位数,既得 到灰度级为7的图像,最后利用imshow函数输出显示图像。同理可得到灰度级为6-1 的图像。对应源程序len
10、a.m(2)MATLAB函数: A=imread(filename) 用imread函数读取图像文件,文件格式可以是TIFF、JPEG、GIF、BMP、PNG。 读进来的是一个二维数组,存放在矩阵A中。 调用格式: A=imread(filename,fmt)X,map=imread(filename,fmt)imshow(A) imshow是matlab中显示图像的函数。调用格式:imshow(I,n)imshow(I,low high) 用指定的灰度范围 low high显示灰度图像 I。显示结果,图像中灰度值等于或低于 low的都将用黑色显示,而灰度值大于等于high的都显示为白色,介于
11、low和high之间的用其灰度级的默认值的中间色调显示。(3)处理结果: 8灰度级: 7灰度级: 6灰度级: 5灰度级: 4灰度级: 3灰度级: 2灰度级: 1灰度级:(4)结果分析:对一幅 512*512,256 个灰度级的具有较多细节的图像,保持空间分辨率不变,仅将灰度级数依次递减为128、64、32、16、8、4、2,比较得到的结果就可以发现灰度级数对图像的影响。 前四张图灰度级数较高,图像基本看不出什么变化。当灰度级数继续降低,则在灰度缓变区常会出现一些几乎看不出来的非常细的山脊状结构。灰度级数越低,越不能将图像的细节刻画出来。对比实验中处理过的图像,可以发现,虽然都是灰度图,但是灰度
12、范围越大则图像显示出的色彩越丰富。3. 计算lena512图像的均值方差。(1) 问题分析:首先通过imread()函数读入图像文件到灰度矩阵A中,然后利用 mean2()函数和std2()函数计算灰度矩阵(即图像)的均值和标准差,再由标准 差平方得到方差。对应源程序:lena2.m(2) MATLAB函数: mean2()MATLAB中提供均值计算函数mean()和mean2()。mean2( A ),用于对整一个矩 阵求像素平均值。调用格式:u=mean2(A)std2()MATLAB中提供标准差计算函数std()和std2()。调用格式:s=std2(A)(3) 处理结果: 均值u=95
13、.6564 方差s2=1.9273e+03(4) 结果分析:经过MATLAB运算,得到图像lena512.bmp的均值约为95.6564,标准差约为43.9012,方差是标准差的平方,约为1927.3。方差越大,图像的对比度越大,可以显示的细节就越多。4. 把lena图像用近邻、双线性和双三次插值法zoom到2048*2048。(1) 问题分析:插值算法是估计在图象像素间的某个位置的像素的取值方法。最近邻点插值法:在待插像素的周围四邻像素中,距离待求插像素最近的像素灰度赋给待插像素。该方法最简单,但校正后存在灰度不连续性,图像有明显锯齿状。双线性插值算法:双线性插值算法输出的图像的每个像素都是
14、原图中四个像素(×)运算的结果,这种算法极大地消除了锯齿现象。双三次插值算法: 双三次插值算法是上一种算法的改进算法, 它输出图像的每个像素都是原图个像素(×)运算的结果。这种算法是一种很常见的算法,普遍用在图像编辑软件、打印机驱动和数码相机上。本题先通过imread()函数读入图像文件,然后利用imresize()函数将图像分别利用三种插值方法放大到2048*2048。对应源程序:lena3.m(2) MATLAB函数: imresize()函数用于对图像做缩放处理。 调用格式: B = imresize(A, numrows numcols,method) 其中,num
15、rows和numcols分别指定目标图像的高度和宽度。 显而易见,由于这 种格式允许图像缩放后长宽比例和源图像长宽比例不相同,因此所产生的图像有可能 发生畸变。 method参数用于指定在改变图像尺寸时所使用的算法,可以为一下几种: 'nearest': 这个参数也是默认的, 即改变图像尺寸时采用最近邻插值算法; 'bilinear':采用双线性插值算法; 'bicubic': 采用双三次插值算法;(3)处理结果: 原始图像:最近邻插值法:双线性插值法:双三次插值法:(4)结果分析:最近邻插值、双线性插值与双三次差值这三种方法之间的区别主要在于点
16、周围像素序列的取法不同。对于最近邻插值,输出像素的值指定为点所属像素的值,不考虑 其他像素;对于双线性插值,输出图像的值是最近的2*2邻域内像素值得加权平均值;对于双三次差值,输出图像的值是最近的4*4邻域内像素值得加权平均值。所以,双线性插值法花费的时间比最近邻法的要长一些,而双三次法花费的时间比双线性法的又要长一些。但是,参与计算的时间越多,计算结果越精确,通常双线性插值和双三次差值这两种方法比最近邻法得到的效果更好。从得到的图像我们可以看到,最近邻内插产生了最大的锯齿边缘,尤其是在对应图像中的肩膀的边缘部位,产生了很明显的锯齿,而双线性内插得到了明显改进的结果使用双三次内插产生了稍微清晰
17、一些的结果。5. 把lena和elain图像分别进行水平shear(参数可设置1.5,或者自行选择)和旋转30度,并采用近邻、线性和双三次插值法zoom到2048*2048。(1) 问题分析:采用仿射变换来进行水平裁剪。仿射变换是空间直角坐标变换的一种,它是一种二维坐标到二维坐标的线性变换,即用图像的矩阵去乘仿射变换的矩阵T,把图像上的像素重新定位到一个新位置,并为这些新位置赋灰度值,而这个任务可以用灰度内插的方法完成,选择最近邻内插法、双线性插值法和双三次插值法三种方法。对于水平偏移变换,运算后,坐标变为 x=v,y=shv+w。在本题中, 参数shv根据题中要求设为 1.5。 对于旋转变换
18、,运算后,坐标变为 x=vcos- wsin ,y=vsin+wcos 。在本题中,运用旋转函数,就不在程序中重新设置矩阵值了,而是函数根据参数自行设置矩阵T ;使用 imrotate 函数旋转图像。该函数接受两个主要的变量,即要旋转的图像和旋转的角度,旋转角度的单位为度。如果指定一个正值,imrotate 函数按逆时针方向旋转函数;如果指定一个负值,imrotate函数按顺时针方向旋转图像。作为可选变量,还可以给imrotate函数指定产值方法和图像的大小;使用 imtransform 函数完成一般的二维空间转换。其语法格式如下:B=imtransform(A,TFORM,paraml,va
19、ll,param2,val2)。该函数接受两个主要变量,既要变换的图像和TFORM空间变换结构。 创建一个TFORM结构有两种方法,即使用makeform 函数和cp2tform 函数。使用makeform函数,可指定变换类型。在本次实验中,指定的是仿射变换“affine”类型,即进行平移,旋转,比例,拉伸和错切等功能。仿射变换要求变换矩阵的最后一列除最后一个元素为1之外,其它的均为0。对应源程序;lena4.m和lena5.m(2) MATLAB函数:图像二维仿射变换MATLAB使用imtransform函数完成图像空间变换。 调用格式:imtransform(A,T)其中参数A是要变换的图
20、像,T是由makeform函数产生的变换结构. 在maketform('P',.)函数中,参数P可以以一下形式: affine:仿射变换形式; projective:投影变换形式; cusyom:自定义函数变换; box:利用函数中的另外参数产生仿射变换结构; composite:该参数是实现多次调用tformfwd功能;maketform函数就是利用给定的参数建立变换结构,然后把该变换结构赋予结构变量T。 根据得到的结构体变量T,调用imtransform(A,T)函数进行变换。(3) 处理结果:Lena水平偏移:Elaine水平偏移:Lena旋转30度:Elaine旋转30
21、度:(4) 结果分析: 在数字图像处理中几何变换由两个基本操作组成:(1)坐标的空间变化;(2)灰度内插,即对空间变换后的像素赋灰度值。最常用的空间坐标变换之一是仿射变换。最近邻内插产生了最大的锯齿边缘,双线性内插得到了明显的改进结果,使用双三次内插产生了稍微清晰一些的结果。 旋转是保持直线特性方面最苛求的几何变换之一,与上一实验结果相同,最近邻内插产生了最大的锯齿边缘,双线性内插得到了明显的改进结果,使用双三次内插产生了稍微清晰一些的结果。附录【参考文献】1 冈萨雷斯.数字图像处理(第三版)北京:电子工业出版社,20112 周品.MATLAB数字图像处理 北京:清华大学出版社,20123 杨
22、杰.数字图像处理及MATLAB实现 北京:电子工业出版社,2010【源代码】lena.mclose all;clear all;clc;I=imread('lena512.bmp');figure(1)imshow(I)title('8灰度级');x,y=size(I);%读取lena.bmp的长宽img7=zeros(x,y);img6=zeros(x,y);img5=zeros(x,y);img4=zeros(x,y);img3=zeros(x,y);img2=zeros(x,y);img1=zeros(x,y);for i=1:x for j=1:y im
23、g7(i,j)=floor(I(i,j)/2); %floor为向下取整 endendfigure(2)imshow(uint8(img7),0,127) %unit8为8位二进制数title('7灰度级'); for i=1:x for j=1:y img6(i,j)=floor(I(i,j)/4); endendfigure(3)imshow(uint8(img6),0,63)title('6灰度级'); for i=1:x for j=1:y img5(i,j)=floor(I(i,j)/8); endendfigure(4)imshow(uint8(im
24、g5),0,31)title('5灰度级'); for i=1:x for j=1:y img4(i,j)=floor(I(i,j)/16); endendfigure(5)imshow(uint8(img4),0,15)title('4灰度级'); for i=1:x for j=1:y img3(i,j)=floor(I(i,j)/32); endendfigure(6)imshow(uint8(img3),0,7)title('3灰度级'); for i=1:x for j=1:y img2(i,j)=floor(I(i,j)/64); e
25、ndendfigure(7)imshow(uint8(img2),0,3)title('2灰度级'); for i=1:x for j=1:y img1(i,j)=floor(I(i,j)/128); endendfigure(8)imshow(uint8(img1),0,1)title('1灰度级');lena2.mA=imread('lena512.bmp');B=mean2(A);C=std2(A);D=C2;lena3.m A=imread('lena512.bmp'); figure(1); imshow(A); tit
26、le('原始图像'); B1=imresize(A,2048 2048,'nearest'); figure(2); imshow(B1); title('最近邻插值法'); B2=imresize(A,2048 2048,'bilinear'); figure(3); imshow(B2); title('双线性插值法'); B3=imresize(A,2048 2048,'bicubic'); figure(4); imshow(B3); title('双三次插值法'); len
27、a4.m%Lena 图像:transformtype='affine' transformmatrix=1 1.5 0;0 1 0;0 0 1; T=maketform(transformtype,transformmatrix);I=imread('lena512.bmp');nI=imtransform(I,T);figure(1); imshow(I);title('原始图像');B1=imresize(nI,2048 2048,'nearest');subplot(1,3,1);imshow(B1);title('
28、水平偏移 最近邻内插');B2=imresize(nI,2048 2048,'bilinear'); subplot(1,3,2);imshow(B2); title('水平偏移 双线性内插'); B3=imresize(nI,2048 2048,'bicubic'); subplot(1,3,3);imshow(B3);title('水平偏移 双三次内插'); %Elain 图像:transformtype='affine'transformmatrix=1 1.5 0;0 1 0;0 0 1; T=ma
29、ketform(transformtype,transformmatrix); I=imread('elaine512.bmp'); nI=imtransform(I,T); figure(5);imshow(I); title('原始图像');B1=imresize(nI,2048 2048,'nearest');subplot(1,3,1);imshow(B1); title('水平偏移 最近邻内插');B2=imresize(nI,2048 2048,'bilinear');subplot(1,3,2); imshow(B2);title('水平偏移 双线性内插'); B3=imresize(nI,2048 2048,'bicubic');subplot(1,3,3); imshow(B3);title('水平偏移 双三次内插');lena5.m%Lena 图像:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 注册会计师审计中审计证据充分性适当性的判断标准
- 高考语文作文人类命运共同体素材+范文
- 江苏省2025-2026学年高二下学期3月月考语文试卷及参考答案
- 某玻璃厂生产成本降低细则
- 某石油化工厂设备运行办法
- 某印刷厂生产安全办法
- 上篇 模块二 工业机器人维护常用工具与基本技能
- 2026河南洛阳市孟津区中医院卫生专业技术人员招聘36人备考题库及参考答案详解(研优卷)
- 2026云南玉溪易门县科学技术协会招聘2人备考题库及答案详解【各地真题】
- 2026西藏技师学院锅炉兼综合维修工岗位补聘1人备考题库及参考答案详解(突破训练)
- 2025河北林业和草原局事业单位笔试试题及答案
- 黑龙江哈尔滨德强学校2025-2026学年度六年级(五四制)下学期阶段学情调研语文试题(含答案)
- 2026年商丘学院单招综合素质考试题库及答案详解(历年真题)
- 2025年大连职业技术学院单招职业技能考试试题及答案解析
- 既有线路基帮宽施工方案范本
- 追悼会主持稿及悼词范文集
- 2026年电工专业技能实操测试题目
- 天然气压缩机组培训课件
- 敦煌藻井教学课件
- 老年护理质量控制与改进
- 95-1轻机枪射击课件
评论
0/150
提交评论