您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 医学现状与发展 > matlab图像处理基础
在中文操作系统中,MATLAB默认为中文版,可参考以下步骤来显示英文版MATLAB。MATLABR2015a以及新的版本:点击MATLAB菜单栏预设常规选择桌面和错误信息的语言英文保存后重启MATLAB。MATLABR2014a以及R2014b版本:可以通过设置以下环境变量禁用中文内容:MWLOCALE_TRANSLATED=OFF如果您希望转换回中文版,请设置:MWLOCALE_TRANSLATED=ONWindows7中环境变量的添加可以右击:我的电脑属性高级系统设置高级环境变量系统环境变量。1.matlab是用C语言编写的①被称为第四代计算机语言②具有数据可视化功能,将向量和矩阵用图形表现出来,具有面向过程的编程特点,也有面向对象的特性Crtl+Q可以用来退出,clc清屏③M脚本文件或函数文件,创建日志文件,在命令行输入diary,可以将当前命令窗口中得所有内容都写入日志,包括命令和结果等,保存为ASCII码格式,路径为当前工作目录,最后通过diaryoff结束日志内容的记录④help和helptopic命令——topic是指要查询的函数等,如果只知道函数功能,不知道函数名称,可以通过lookfortopic命令进行关键词查询;演示程序的存在——帮助-示例-运行2.数值计算①运算优先级:从左到右,指数运算最高,乘除法次之且同级,加减法最次且同级;左除“/”是正常意义的除法;右除相反②系统关键字:'break''case''catch''classdef''continue''else''elseif''end''for''function''global''if''otherwise''parfor''persistent''return''spmd''switch''try''while'③特殊变量:ans——用作结果的默认变量名beep——使计算机发出嘟嘟声Pi——圆周率eps——机器零阈值,浮点相对精度,取值为2.2204e-16,为matlab最小值inf——无穷大nan——不定数(NaN)i或j——虚数,值为-1开方Nargin——nargout——realmin——realmax——bitmax——varargin——varargout均为特殊变量④可通过complex(real,img);来产生复数,angle是求相角的函数,可以是复数数组,也可以是单个复数;abs求摸⑤矩阵运算——包括基本运算和点运算基本运算——除法——左除“A\B”(等效于A矩阵的逆左乘B,即inv(A)*B),右除“B/A”(等效于A矩阵的逆右乘B,即B*inv(A)),若A是非奇异矩阵,则两个运算都可以实现乘方——A^x矩阵的乘方,矩阵转置,A’点运算——“.*”“./”“.\”“.^”,点运算为对应点的运算关系运算和逻辑运算——“~=表示不等于,对应函数ne(A,B)”,“==表示等于,对应函数为eq(A,B)”,“,对应函数为lt(A,B)”,“,对应函数为gt(A,B)”,“=,对应函数为le(A,B)”,“=,对应函数为ge(A,B)”;逻辑运算——0表示假,任意非零表示真“&-and(A,B),|-or(A,B),~-nor(A,B)”⑥特殊矩阵——ones创建全1矩阵——ones(2,3)行为2,列为3zeros创建全0矩阵eye创建单位矩阵rand均匀分布随机矩阵randn正态分布随机矩阵magic魔方矩阵——magic(4)表示4维矩阵diag对角矩阵——diag(1:2:9)表示从1到9顺序中,每次隔2选择一个数作为对角矩阵的对角线元素⑦访问矩阵——A(:)表示将矩阵A的所有元素从上到下,从左到右排列成向量;赋值一定要注意元素个数一致——例如:A(1:3)=B(4:6);[AB]=[A,B];X=1:6表示从1到6的向量cat——指定维拼接;cat(1,A,B)相当于[A;B];cat(2,A,B)相当于[A,B]horzcat——水平拼接vertcat——垂直拼接repmat——对现有矩阵复制和粘贴组成新矩阵blkdiag——现有矩阵构造对角矩阵删除某一行或者某一列,只需要将那一行或者那一列赋值为”[]”即可矩阵形状——reshape重新排列矩阵rot90(A)——逆时针90度;rot90(A,-1)顺时针90度fliplr——以垂直方向为轴翻转flipud——以水平方向为轴翻转flipdim——以指定方向为轴翻转transpose——矩阵转置ctranspose——矩阵的共轭转置求矩阵的逆——inv(A)求矩阵伪逆——广义逆,不是方阵或者满秩也可以求广义逆pinv(A)向量A范数——第一种范数:向量元素绝对值的和norm(A,1);第二种范数:向量的模norm(A,2)或者norm(A);第三种:向量元素绝对值最大值norm(A,inf)矩阵范数——与向量范数一样,但是意义不同矩阵的条件数——因系数矩阵微小变化而结果有很大误差的叫做病态矩阵,反之叫做良性矩阵,条件数这个参数是用来描述这一性能,A矩阵的条件数等于A的范数与A的逆矩阵的范数的乘积,这样定义的条件数总是大于1,越接近1,性能越好,反之,性能越差;可用cond计算2范式条件数,condest计算1范式条件数,rcond计算逆条件数(这个不一定大于1)求矩阵的特征值——d=eig(A),特征值以向量形式存放;d=eig(A,B)求广义特征值,[V,D]=eig(A),求特征值对角矩阵D和特征向量V;[V,D]=eig(A,’nobalance’),当A中有与截断误差数量级相差不远的值时,该指令可能更准确,’nobalance’起误差调节作用;[V,D]=eig(A,B)计算广义矩阵的特征值矩阵和特征向量;[V,D]=eig(A,B,flag),由flag指定算法计算特征值矩阵D和特征向量V,flag为’cho’时,表示使用Cholesky算法,这里A为Hermitian矩阵,B位正定阵——而eig是基于两步QR算法的,故需要注意当矩阵含有重特征值时,特征向量矩阵可能趋于奇异,A*V-V*D为误差3.语句控制①for②while——空数组被当做逻辑假③break和continue④循环嵌套⑤选择结构case...case...otherwise⑥分支结构4.函数①rem()求整除x/y的余数rem(x,y)=x-y.*fix(x./y)——(fix()向0取整)②mod(x,y):求模mod(x,y)=x-y.*floor(x./y);(floor()向左取整,以数抽为准,朝负无穷方向取整)如果x和y的符号相同(同为‘+’,同为‘-’),那么rem(x,y)=mod(x,y)(正数与正数,负数与负数,取整结果两个函数效果一样)如果x和y的符号相反,那么mod(x,y)=rem(x,y)+y(正数与负数的取整,看你希望得到什么结果就选择用什么函数)——当x./y非整数(且xy0)时,fix(x./y)=floor(x./y)+1;当正数与负数取余时,当得到的余数结果的符号希望跟除数(x)一样,用rem()函数;当得到的余数结果的符号希望跟被除数(y)一样,用mod()函数例如:rem(3,2)=1;mod(3,2)=1;rem(-3,-2)=-1;mod(-3,-2)=-1;rem(3,-2)=1;mod(3,-2)=-1;rem(-3,2)=-1;mod(-3,2)=1;mod(3,2)=rem(3,2)=1;mod(3,-2)=rem(3,-2)-2=1-2=-1;mod(-3,2)=rem(-3,2)+2=-1+2=1;5.图像处理技术①MRI医学图像clearall;%MRI数据储存在一个128*128*1*127的数组中loadmri%载入MATLAB自带的MRI数据D=squeeze(D);%利用squeeze去除维数为1的维度figure('Colormap',map);%显示MRI图像,显示第八幅图像,也可以显示其他的image_num=8;image(D(:,:,image_num));axisimage%绘制坐标x=xlim;%取坐标有用y=ylim;%%显示二维等高切片cm=brighten(jet(length(map)),-.5);figure('Colormap',cm);contourslice(D,[],[],image_num);%显示体切片的等高线图axisijxlim(x)ylim(y)daspect([1,1,1]);%%显示三维等高线切片figure('Colormap',cm);contourslice(D,[],[],[1,12,19,27],8);view(3);axistight%显示一个等值面,等值面可用来显示一个体的所有结构,在以下代码中,先使用%smooth3函数平滑数据,然后isosurface函数计算等值数据,接着patch函数将数据%显示为一个图形对象figure('Colormap',map);Ds=smooth3(D);hiso=patch(isosurface(Ds,5),'FaceColor',[1,.75,.65],'EdgeColor','none');isonormals(Ds,hiso);%加等值帽来显示剖视图表面,使用isocaps函数计算另外一个面的数据,这个面的数据%和横截面的数据有相同的值,使用不光滑的数据(D)显示内部的细节,即可在头部的%切片顶部看到这个细节hcap=patch(isocaps(D,5),'FaceColor','interp','EdgeColor','none');%设置视角,调整宽高比,可以自己设置view(35,30)axistightdaspect([1,1,.4])②%纹理分割clearall;I=imread('D:\matlab_images\006.jpg');%读入自带图像figure;%如果不需要显示这张图片,可以注释掉imshow(I);E=entropyfilt(I);%用于生成纹理图像,该函数返回一个数组,输出的每个像素%包含该像素对应的输入图像中周围9*9邻域的熵值Eim=mat2gray(E);%mat2gray函数用于缩放纹理图像,使其在一个双精度图像默认范围内figure;imshow(Eim);%显示对应的图片pause(5);BW1=im2bw(Eim,.8);%二值图像BW1的分割目标是白色的,然而比较BW1和I,会发现%顶部的纹理被过分分割了(多重白色目标),底部纹理几乎被全部分割了imshow(BW1);figure;%不需要显示可以注释掉pause(5);%延时5秒imshow(I);%MATLAB中bwareaopen函数用于提取底部纹理BWao=bwareaopen(BW1,1000);pause(5);figure;imshow(BWao);%使用imclose函数平滑边缘,并且封闭BWao中目标的开口孔,选择一个9*9邻域,%而entropyfilt函数使用的也是9*9邻域nhood=true(9);closeBWao=imclose(BWao,nhood);figure;imshow(closeBWao);pause(3);%使用imfill填充closeBWao中目标的孔洞roughMask=imfill(closeBWao,'holes');figure;imshow(roughMask);figure;imshow(I);pause(3);%使用粗略遮罩分割上部纹理,roughMask函数用来分割顶部纹理I2=I;I2(roughMask)=0;figure;imshow(I2);pause(3);%使用entropyfilt函数计算纹理图像E2=entropyfilt(I2);E2im=mat2gray(E2);figure;imshow(E2im);pause(3);%使用graythresh作为E2im的阈值BW2=im2bw(E2im,g
本文标题:matlab图像处理基础
链接地址:https://www.777doc.com/doc-2887237 .html