自己慢慢积累的MATLAB图像操作语句



来源: 王尧的日志


一副二值图像是一个取值只有0和1的逻辑数组,因而一个取值只包含0,1的Unit8类型的数组在MATLAB中并不认为是二值图像。
利用向量化循环meshgrid代替for/while和预分配数组,程序的执行速度会明显的提高。
使用IPT函数的优点在于它们支持整数数据类,而直接使用MATLAB数学运算符要求输入是Double类数据。
用plot函数时原点在左下角,x轴向→,y轴向↑,而在图像中原点在左上角,x轴向→,y轴向↓。
矩阵操作:A[1:end]将矩阵A从1到最后一个元素组成一个行向量。A(:)产生一个列向量。
一个向量也可以作为另一个向量的索引。如A([1 2 3])表示从行向量A中抽取第1 2 3 个元素。
矩阵中元素顺序是先列后行,续行符用...表示。
A(end:-1:1)表示从A中以步长为-1抽取从end到1之间的元素。
若A为矩阵,需要两个索引,一个用于确定行位置,另一个用于确定列位置。A(:,3)抽取第3列,A([1 2],[3 4])表示抽取第1,2行第3,4列的元素。sum(A)输出一个行向量,元素为输入数组的每一列的和。
A(D)也可用来对A寻址,其中D为逻辑数组。
operation(A,dim)表示对矩阵A的第dim维进行操作,如size(A,1)计算第一维的大小即行数,size(A,2)计算列数。ndims(A)求数组A的维数(大于等于2)。
一些重要的标准数组:zeros(M,N);ones(M,N);true(M,N)/false(M,N)生成一个逻辑数组
rand(M,N)生成一个[0,1]中均匀分布的随机数。
randn(M,N)生成一个标准正态分布(高斯分布)的随机数,如果只有一个参数,则生成一个方阵。
数组乘(两幅图像相乘)A.*B;矩阵乘A*B;数组求幂A.^B(即A(i,j)^B(i,j));矩阵求幂A^B;矩阵转置A.'矩阵共轭转置A'
(绝大多数情况用后者)数组右除A./B;矩阵右除A/B=A*inv(B);
NaN或nan表示非数,not-a-number
每个if,for,switch都必须与一个end配对。
MATLAB数组不能有0索引,最小从1开始。
在处理混合变量时可利用单元数组,如A={'str',[0 1 2],3},则A{1}=str;单元数组是一个多维数组,其元素是其他数组元素的副本,如A={B,C}当B和C改变时A不变;若A=B则
结构类似于单元数组(cell array),都允许将不同的数类集成到单个变量中,不同的是结构元素使用域来寻址,而单元数组使用{}来寻址。
对图像处理时务必注意数据类和取值范围。
对数变换主要应用是压缩动态范围:g=c*log(1+double(f)),当执行一个对数变换时,需要将压缩值还原为显示的全范围,使用语句i=im2unit8(mat2gray(g));接下来可用imshow(i)进行显示。在显示傅里叶频谱时会用到。
对比度拉伸变换:s=T(r)=1/[1+(m/r)^E];
Gamma变换:imadjust(f,[],[],gam);gam系数决定曲线的形状。
在进行对数、对比度拉伸、Gamma变换前一般要调用im2double(f)进行数据类型转换。
设置参考轴与刻度的函数axis,set(gca,'xtick',0:50:255)要在绘制图像函数之后使用。
在提示符处键入hold on 将保留当前的图形,以便使后续命令可在已有图形上执行。
在MATLAB中x向右(x是列),y向下(y是行),MATLAB中画图时横坐标放置在一个向量中,列坐标放置在一个向量中。
eg:figure('Position', [100 100 size(im,2) size(im,1)])表示画一个宽度为size(im,2),高度为size(im,1),左下角位置为(100 100)的窗口;
灰度变换公式:g(x,y)=[(d-c)/(b-a)]*[f(x,y)-a],将范围从[a,b]变换到[c,d]
solve()用来求解符号方程,factor()用来因式分解表达式,simple(S) 将S表示式再做简化 ,simplify(S) 化简S表示式 ,expand(S) 将S表示式展开 ,collect(S,'v') 聚集包含v的部分。 
例如:eq1 = 'x-3=4';(注意也可写成'eq1=x-7')solve(eq1) ;eq2 = 'x*2-x-6=0';( 注意也可写成'eq2=x*2-x-6') 
交互式输入input('Type radius:') % 在两个单引号之间键入提示文字。调试输出disp('OK'); 
disp('Please, press any key to continue...');pause 本行在调试时很有用,注意pause后无分号!!
如何在自己的目录执行程式:(1)建立搜寻路径path('c:\my_work',path) % 将自己的目录c:\my_work 加在MATLAB的搜寻路径之前,(2) 切换目录cd c:\my_work 
要打开文件Open test;要执行 M-file 可以在指令视窗下直接键入该档名如test或run test
存储和读取数据:save test variable;存储文件格式为.mat注意此语句储存变量本身,而非直接储存变量的数据;如果你的数据是只在MATLAB中产生及被使用,那最好使用此语句。相应读取命令load test
save test.dat variablelist -ascii 注意此语句直接储存变量的数值,存储文件格式为.dat,可以被MatlAB之外的其它软件打开。相应读取命令load test.dat;然后调用varible=test(1,:);把第一行数据赋给variable。命令type test.dat将其中数据列出。
对数视图:MATLAB 提供三种对数尺度的绘图指令:semilogx,semilogy, loglog, 它们的作用分别是x轴以对数尺度绘图,y 轴以对数尺度绘图,x 和 y 轴以对数尺度绘图。
复数:MATLAB 是以i或j字元来代表虚部,其它的复数相关函数有real, imag, conj, abs, angle等等,详见线上说明lookfor complex。例如a=real(x), b=imag(x), c=conj(x), r=abs(x), theta=angle(x), x=r*exp(i*angle(x))。
和复数有关的图以极座标来表示会比一般的卡氏座标要合适,polar指令可以将数据以极座标方式加以绘图, 其语法为 polar(theta,r),(theta,r)分别代表极座标上的角度及半径值。
中值滤波:medfilt2(abs(HH));均值滤波:h= FSPECIAL('average',3);imageout=imfilter(HH,h,'replicate'); 
系统最小值eps,最大值inf
Matlab取整函数:fix(x)截尾取整;floor(x)不超过x 的最大整数;ceil(x)大于x 的最小整数;round四舍五入取整;
矩阵旋转rot90(I,K)其中K=+-1,+-2...
如果.m文件中包含function那么function必须放在开头(可以声明的形式如function filter;声明必须放开头实现可以放后面),前面...
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值