医学图像处理实验报告1医学图像处理实验报告LabReportofMedicalImageProcessing系部:学号:姓名:指导教师:医学图像处理实验报告2实验1MATLAB基本操作及函数用法1.1实验原理介绍1.1.1读取函数函数imread可以将图像读入MATLAB环境,语法为:imread('filename')其中filename是一个含有图像文件全名的字符串(包括任何可用的扩展名)。例如命令行f=imread('chestxray.jpg');将JPEG图像chestxray读入图像数组f中。函数size可以给出一副图像的行数和列数:size(f)ans-10241024函数whos可以显示一个数组的基本附加信息。例如,语句whosfwhos行结尾处的分号对结果没有影响。1.1.2显示图像一般使用函数imshow显示,其基本语法为:imshow(f,G)其中,f是一个图像数组,G是显示该图像的灰度级数。若G省略,默认为256。语法:imshow{f,[lowhigh]}会将所有小于或等于low的值都显示为黑,所有大于或等于high的值都显示为白色。介于low和high之间的值将以默认的级数显示为中等亮度值。当用imshow显示另外一幅图像时,MATLAB会在屏幕上用新图像替换旧图像,为保持第一幅图像并同时显示第二副图像,可以使用如下figure函数:figure,imshow(g)要了解图像文件的其他详细信息,可以使用imfinfo函数,其语法结构为:imfinfofilename其中,filename是存储在磁盘中的图像全名。1.1.3保存图像使用函数imwrite可以将图像写在磁盘上,该函数语法为:imwrite(f,‘filename’)下面的命令可以把图像f写为TIFF格式,在默认情况下使用语句医学图像处理实验报告3imwrite(f,'patient10_run1','tif')或imwrite(f,'patient10_run1.tif')会将文件保存到当前的工作目录中。另外,如果是JPEG图像,其语法可以为:imwrite(f,'filename.jpg','quality',q)其中q是一个在0到100之间的整数(q越小,图像退化越严重)。函数imwrite另一种常用但只用于tif图像的语法为:imwrite(g,‘filename.tif’,‘compression’,‘parameter’,…‘resolution’,[colresrowres])其中,‘parameter’有三种情况:为‘none’表示无压缩,‘packbits’表示比特压缩包压缩(非二值图像默认参数),‘ccitt’表示ccitt压缩(二值图像默认参数)。colres为列分辨率。1.1.4数据类型见下表:表格0-1数据类型。前8项数值类,第9项字符类,第10项逻辑类。名称描述double双精度浮点数,范围【-10308,10308】(8比特每像素)unit8无符号8比特整数,范围【0,255】(1比特每像素)unit16无符号16比特整数,范围【0,65535】(2比特每像素)unit32无符号32比特整数,范围【0,4294967295】(4比特每像素)int8有符号8比特整数,范围【-128,127】(1比特每像素)int16有符号16比特整数,范围【-32768,32767】(2比特每像素)int32有符号32比特整数,范围【-2147483648,2147483647】(4比特每像素)single单精度浮点数,范围【-1038,1038】(4比特每像素)char字符(2比特每像素)logical值为0或者1(1比特每像素)1.1.5图像类型主要分为4种:亮度图像(Intensityimage)二值图像(Binaryimage)索引图像(Indexedimage)RGB图像(RGBimage)注意:一副图像的特征是由数据类和图像类这两者来表征的。例如,“unit8亮度图像”表示一副像素都是unit8数据类的亮度图像。医学图像处理实验报告41.1.6数据类与图像类型之间的转换(1)数据类间的转换通用语法为:B=data_class_name(A)其中,data_class_name可以为表1第一列中的任意一项。(2)图像类和数据类型间的转换见下表:表格0-2IPT中用于进行图像类和数据类转换的函数名称将输入转换为有效的图像数据类im2unint8unit8logical,uint8,uint16,doubleim2uint16unit16logical,uint8,uint16,doublemat2graydouble,范围【0,1】doubleim2doubledoublelogical,uint8,uint16,doubleim2bwlogicaluint8,uint16,double要把一个double类的任意数组转换成取值范围为[0,1]的归一化double类数组,可以通过函数mat2gray完成,其基本语法为:g=mat2gray(A,[Amin,Amax])其中,图像g的取值范围在0(黑色)到1(白色)之间。转换时,小于Amin的值在g中变为0,大于Amax的值变为1。1.1.7数组索引在MATLAB中,v=[13579]代表一维行向量,使用转置运算符(.’)可以把行向量转为列向量。要存取元素数据块,可以使用冒号(:)。例如,下列语句代表存取第三个到最后一个元素:v(3:end)ans=579注意:符号1:2:end表示索引从1开始计数,步长为2,直到结束。步长可以为负。例如,求一个矩阵所有元素之和:s=sum(A(:))1.1.8运算符MATLAB运算符一般分为以下三种主要类别:执行数值计算的算术运算符在数量上比较操作数的关系运算符执行函数AND、OR和NOT的逻辑运算符常用的运算符和算术函数如下面几个表所示:医学图像处理实验报告5表格0-3数组和矩阵运算符运算符名称MATLAB函数注释和示例+数组和矩阵加plus(A,B)a+b,A+B或a+A-数组和矩阵减minus(A,B)a-b,A-B或a-A.*数组乘times(A,B)C=A.*B,C(I,J)=A(I,J)*B(I*J)*矩阵乘mtimes(A,B)标准矩阵乘./数组右除rdivide(A,B)C=A./B.\数组左除ldivide(A,B)C=A.\B/矩阵右除mrdivide(A,B)\矩阵左除mldivide(A,B).^数组求幂power(A,B)C=A.^B,有C(I,J)=A(I,J)^B(I,J)^矩阵求幂mpower(A,B).|向量和矩阵转置transpose(A)标准的向量和矩阵转置|向量和矩阵复共轭转置ctanspose(A)标准的向量和矩阵共轭转置+一元加uplus(A)+A=0+A-一元减uminus(A)-A=0-A:冒号表格0-4IPT支持的图像算术函数函数描述imadd两幅图像相加或把常数加到图像imsubtract两幅图像相减或从图像中减去常数immultiply两幅图像相乘,在相应的像素对间进行;或图像乘以一个常数imdivide两幅图像相除,在相应的像素对间进行;或图像除以一个常数imadsdiff计算两幅图像间的绝对差imcomplement对图像求补imlicomb计算两幅或多幅的线性组合表格0-5关系运算符运算符名称小于=小于等于大于=大于等于==等于~=不等于表格0-6逻辑运算符运算符名称&AND(与)|OR(或)~NOT(非)医学图像处理实验报告6表格0-7逻辑函数函数注释xor若两个操作数逻辑上不同,则函数xor返回1;否则,返回0all若一个向量中的所有元素都非零,返回1;否则,返回0any若一个向量中的任何元素都非零,返回1;否则,返回0。该函数在矩阵中按列操作1.2实验内容1.2.1在“素材”文件夹下,读入“Fig2.19(a).jpg”并且提取该图像的基本信息,写出实验步骤和实验结果。图1图像的读取与显示f=imshow('Fig2.19(a).jpg');whosfNameSizeBytesClassAttributesf1x18double1.2.2读取图像“Fig1.14(d).jpg”,使用函数imwrite和subplot函数分别显示质量参数q=50,25,5,0的结果如图所示。写出实验步骤。f=imread('Fig1.14(d).jpg');subplot(3,2,1),imshow(f);subplot(3,2,2),imshow('bubbles50.jpg');imwrite(f,'bubbles25.jpg','quality',25)subplot(3,2,3),imshow('bubbles25.jpg');imwrite(f,'bubbles15.jpg','quality',15)subplot(3,2,4),imshow('bubbles15.jpg');imwrite(f,'bubbles5.jpg','quality',5)subplot(3,2,5),imshow('bubbles5.jpg');imwrite(f,'bubbles0.jpg','quality',0)subplot(3,2,6),imshow('bubbles0.jpg');医学图像处理实验报告7观察哪副图像压缩最大后没有“伪轮廓”。此时键入命令:imfinfobubbles25.jpg会得到如下信息:ans=Filename:'bubbles25.jpg'FileModDate:'15-十月-201215:49:44'FileSize:13875Format:'jpg'FormatVersion:''Width:714Height:682BitDepth:8ColorType:'grayscale'FormatSignature:''医学图像处理实验报告8NumberOfSamples:1CodingMethod:'Huffman'CodingProcess:'Sequential'Comment:{}其中,使用width乘以height乘以BitDepth再除以8,得到:714*682*8/8=486948字节。把这个结果除以FileSize就可以的得到压缩比:486948/13875=35.10。此时压缩比是在保持图像质量与应用要求一致的前提下得到的,它可以使得单位时间内传输的数据量大约是压缩前的35倍。利用上述原理,请写出在MATLAB中如何计算得到压缩比。k=imfinfo('bubbles25.jpg');image_bytes=k.Width*k.Height*k.BitDepth/8;compressed_bytes=k.FileSize;compression_ratio=image_bytes/compressed_bytescompression_ratio=35.09541.2.3如图(Fig5.07(a).jpg)所示,把原始图像以tiff格式存储为无压缩的名为“sf.tif”的图像,且像素不变,但尺寸减小为1.5*1.5英寸。写出实验步骤。1.2.4将double类图像“f=[12;34]”转换为二值图像,其中1、2变为0,3、4变为1。请写出实验步骤。1.2.5利用数组索引的概念,写出实现下列图像的实验步骤。医学图像处理实验报告91.2.5设A=[123;456;789]和B=[024;356;349]计算A==B,A=B的结果。1.2.6设A=[120;045],B=[1-23;011],计算A&B,xor(A,B),all(A),any(A),all(B),any(B)的结果。医学图像处理实验报告10实验2亮度变换与空间滤波2.1实验原理2.1.1亮度变换函数函数imadjust是对灰度图像进行亮度变