第二章图像处理基础2.1数字图像的表示(1)图像的函数表示一幅图像可以被定义为一个二维函数f(x,y),表示任何坐标点(x,y)处的振幅,也即称为图像在该点的亮度。1)二值图像(黑白图像)2)灰度图像(表示由黑到白亮度等级变化的图像)3)彩色图像:由三幅独立的分量图像(R,G,B)组成的图像。灰度、亮度的等级分布数字化数字图像象素点1,11,21,2,12,21,,1,2,.....................nnmmmnfffffffff矩阵表示图像矩阵(2)图像的矩阵表示灰度图像的矩阵表示彩色图像的矩阵表示2.2图像的存储结构•图像的数据存储方式对于图像处理有着重要的影响,且有很多的存储方式:1)数组方式•将图像的亮度值以二维数组的形式存储是计算机图像处理的常用方式,即将一幅图像按行、列存储每个像素点的颜色值。BGRpixel[I,j]2)分层结构方式是一种以原图像为基础,逐步降低分辨率的分层结构的存储方式。它可以构成不同清晰度的图像。3)树状结构方式是一种基于四叉树的存储方式,它可以实现存储空间的压缩。如小波变换四个点平均产生一个点对于MatLAB图像存储方式采用数组方式存储,因为MatLAB是一种基于矩阵计算的交互式系统。2.3图像处理工具(Matlab)简介imread(‘filename’)例如:f=imread(‘e:\Imag\imag.jpg’);2.3.1图像读取、显示和保存格式名称可识别扩展符描述TIFFtiff加标识的图像格式JPEG.jpg,.jpeg联合图像专家组GIF.gif图像交换格式BMP.bmpWindows位图PNG.png可移植网格图形XWD.xwdXWindow转储Matlab支持如下一些常用图像格式文件的读写:•BMP文件格式(位图文件):是一种与设备无关,Windows普及使用的一种图像文件格式。文件结构包括三部分:文件头,调色板和图像数据。•GIF文件格式(图形交换格式):是Com普Sever公司为方便网络用户传送图像数据所制定的图像文件格式。•TIFF文件格式(标记图像文件格式):是基于标志域的图像文件格式。•JPEG文件格式(JointPhotographicExpertGroup联合图像专家组):是采用预则编码、离散余弦变换以及熵编码,以去除冗余的图像和彩色,属于有损压缩。它是一种高效率的24位图像文件压缩格式,是其他文件格式的1/10~1/20。•PNG文件格式(可移植网格图形):是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式。•XWD文件格式:是一种有XWindow环境下创建的图片的图像格式。Size(f)列出图像f的行数和列数如:[M,N]=size(f);Whosf显示一数组的附加信息显示图像Imshow(f,G)其中G是显示该图像的灰度级数。G:[lowhigh]例如:Imshow(f,[])是实现图像的拉伸。即是将一幅动态范围较窄的图像f,使用拉伸来扩展动态范围。保存图像imwrite(f,’filename’)Imwrite(f,’filename.jpg’,’quality’,q)其中:q是压缩系数,取值0~100之间的整数。q值越小,图像的退化就越严重)Imfinfofilename显示图像文件信息2.3.2数据类与图像类型(1)数据类doubleunit8无符号8比特整数unit16无符号16比特整数unit32无符号16比特整数int8有符号8比特整数int16single单精度浮点数charlogical(2)图像类型亮度图像:用归一化值表示二值图像:用(0/1)logical数据类表示索引图像:用整数数据矩阵x作为索引,彩色映射矩阵map两个分量表示RGB图像:用分色R、G、B三个矩阵表示2.3.3数据类与图像类型间的转换数据类间的转换B=data_class_name(A)b=double(a)数据类和图像类型之间的转换在Matlab中提供了一些执行必要缩放函数可以实现数据类与图像类型间的转换。如:double类-unit8类函数名称将输入转换为有效的输入图像数据类型im2unit8unit8Logical,unit8,unit16和doubleim2unit16unit16Logical,unit8,unit16和doublemat2graydouble[0,1]doubleim2doubledoubleLogical,unit8,unit16和doubleim2bwlogicalLogical,unit8,unit16和double2.3.4Matlab数组索引与图像处理•向量索引(1)v(i)i:表示索引下标(2)”.’”:转置运算符。使用转置运算符可以实现将行向量转换成列向量。例如:g=f.’(将图像f旋转90度);(3)“:”:表示存取元素的数据块例如:v=[12345]w=v[1:4]表示w向量中的元素值为v向量中的[1,2,3,4]•向量索引(4)“end”:表示向量中的最后一个元素。(5)“m:k:n”:表示索引从m开始计数,步长为k,直到n元素结束例如:v[2:2:end]v(:)产生一个列向量(将v中所有元素排成列向量)v(1:end)产生一个行向量(第一行元素)矩阵索引Matlab的矩阵索引能够方便地实现矩阵中元素块和元素的选择和数据表示,即可以实现普通图像处理操作。(1)利用矩阵索引作图像的翻转处理fp=f(end:-1:1,:)imshow(fp)(2)利用矩阵索引作图像裁剪处理fc=f(257:768,257:768)imshow(fc)(3)利用矩阵索引作图像缩放处理fs=f(1:2:end,1:2:end)一些重要的标准数组zeros(m,n)ones(m,n)ture(m,n)false(m,n)magic(m,n)rand(m,n)randn(m,n)2.4M函数编程简介2.4.1M文件格式函数定义行:function[outputs]=name(inputs)H1行:第一个文本注释行,文本行开头用“%”帮助行:用于为函数提供注释或在线帮助的文本,文本行开头用“%”。函数体:是指包含所有执行计算的Matlab代码。例如:fuction[p,pmax,pmin,pn]=improd(f,g)%computestheproductoftwoimage.%[p,pmax,pmin,pn]=improd(f,g)outputstheelement-by-element%productoftwoimage,…fd=double(f);gd=double(g);p=fd.*gd;pmax=max(p(:));pmin=min(p(:));pn=mat2gray(p);(1)算术运算2.4.2运算符矩阵运算:指符合线性代数规则的矩阵运算.如A*B数组运算:用于逐一元素值运算。如A.*BMatlab支持图像算术函数imadd(a,b)两幅图像相加或把常数b加到图像imsubtract(a,b)两幅图像相减或从图像中减去常数bimmultiply(a,b)两幅图像相乘或图像乘一个常数bImdivde(a,b)两幅图像相除或图像除一个常数bImabsdiff(a,b)计算两幅图像的绝对差Imcompement(a)对图像求补计算Z=Imlincomb(k1,A1,k2,A2,…,kn,An)计算两幅或多幅图像的线性组合,所得结果:z=k1*A1+k2*A2+…+kn*An(2)关系运算1)“==“,如A==B,指A,B两个数组相同元素的值相等,则返回该元素的值为1,否则为0。2)“=“:如A==B,指A,B相同元素,A数组元素值大于或等于B数组元素则返回该元素的值为1,否则为0。3)“”4)““5)“=“6)“~=“不等于(3)逻辑运算1)“&”(AND):两个输入数组相应操作数都为非零值的位置取1,否则取02)“|”(OR):两个输入数组相应操作数有一个为非零值的位置取1,否则取03)“~“(NOT):将数组中逻辑为ture元素转换为false值,逻辑为false元素转换为ture值。4)xor(a,b):若两个操作数逻辑上不同,则返回1;否则返回05)all(a):若一个向量中的所有元素都非0,则返回1,否则返回06)any(a):若一个向量中的任何元素非0,则返回1,否则返回0•2.4.3控制语句语法(1)条件语句1)if…end2)If…else…..end3)If…elseif…else…end4)swith…case…(2)循环语句1)for2)while(3)终止语句1)break2)continue作业:(1)用Matlab练习图像的输入、显示和保存并观察保存文件信息(2)应用矩阵索引实现图像的图像旋转、提取、裁剪(3)应用图像显示函数imshow(f,[lowhigh])实现图像变化灰度的显示,并比较它们的图像效果变化。