MATLAB学习小记

1、如何查找Matlab中的算法源代码

首先运行程序。用Desktop-----Profiler对程序运行时间进行统计。实际是查看需要进行优化的地方,如何进行优化,减少不必要的时间浪费。

然后就是利用Profiler进行查找,自己查看即可。

2、M文件的命名规则;

1.文件名命名要用英文字符,第一个字符不能是数字。
2.文件名不要取为matlab的一个固有函数,m文件名的命名尽量不要是简单的英文单词,最好是由大小写英文/数字/下划线等组成

原因是简单的单词命名容易与matlab内部函数名同名,结果会出现一些莫名其妙的错误。

3、文件存储路径一定为英文。
4、m文件起名不能为两个单词,random walk,应该写成random_walk。

3、有关坐标定位的函数集锦

1.绘制二维曲线的最基本函数plot2.双纵坐标函数plotyy3.坐标控制函数的调用格式为:axis([xmin xmax ymin ymax zmin zmax])axis函数功能丰富,常用的用法还有:axis equal 纵、横坐标轴采用等长刻度axis square 产生正方形坐标系(缺省为矩形)axis auto 使用缺省设置axis off 取消坐标轴axis on 显示坐标轴grid on/off命令控制是画还是不画网格线,不带参数的grid命令在两种状态之间进行切换。box on/off命令控制是加还是不加边框线,不带参数的box命令在两种状态之间进行切换。4.图形窗口的分割 subplot函数的调用格式为: subplot(m,n,p)5.绘制二维图形的其他函数1. 其他形式的线性直角坐标图在线性直角坐标系中,其他形式的图形有条形图、阶梯图、杆图和填充图等,所采用的函数分别是:bar(x,y,选项)stairs(x,y,选项)stem(x,y,选项)fill(x1,y1,选项1,x2,y2,选项2,…)6.极坐标图polar函数用来绘制极坐标图,其调用格式为:polar(theta,rho,选项)其中theta为极坐标极角,rho为极坐标矢径,选项的内容与plot函数相似。7.对数坐标图形 MATLAB提供了绘制对数和半对数坐标曲线的函数,调用格式为: semilogx(x1,y1,选项1,x2,y2,选项2,…) semilogy(x1,y1,选项1,x2,y2,选项2,…) loglog(x1,y1,选项1,x2,y2,选项2,…)8.对函数自适应采样的绘图函数fplot函数的调用格式为: fplot(fname,lims,tol,选项)9.绘制三维曲线的最基本函数 plot3函数与plot函数用法十分相似,其调用格式为: plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n) 10.三维曲面1.平面网格坐标矩阵的生成(1)利用矩阵运算生成。x=a:dx:b; y=(c:dy:d)';X=ones(size(y))*x;Y=y*ones(size(x));(2)利用meshgrid函数生成。x=a:dx:b; y=c:dy:d;[X,Y]=meshgrid(x,y);10.绘制三维曲面的函数 surf函数和mesh函数的调用格式为: mesh(x,y,z,c) surf(x,y,z,c)标准三维曲面sphere函数的调用格式为: [x,y,z]=sphere(n)cylinder函数的调用格式为: [x,y,z]=sphere(R,n)MATLAB还有一个peaks 函数,称为多峰函数,常用于三维曲面的演示。11.其他三维图形 条形图、饼图和填充图等特殊图形,它们还可以以三维形式出现,使用的函数分别是bar3、pie3和fill3。此外,还有三维曲面的等高线图。等高线图分二维和三维两种形式,分别使用函数contour和contour3绘制。

matlab绘图的时候只用plot函数出来的图不一定符合自己最想要的格式, 经常要对坐标的数字、范围、间隔做处理。

虽然不是什么很难的操作,但是确实常用,也容易忘记,所以就放在这里说明一下:

 MATLAB学习小记_第1张图片 

x = (1:50);
y = sin(x);
plot(x,y,'-r*');
xlabel('x name');% x轴名称
ylabel('y name');
legend('xxx'); %线条注释,多条的话: legend('xxx','xxx2','xxx3')

xlim([2, 46]);%只设定x轴的绘制范围
set(gca,'XTick',[2:2:46]) %改变x轴坐标间隔显示 这里间隔为2

%以上就可以对x轴做很好的控制了,y轴类似。

axis([2,46,0,2]) % axis([xmin,xmax,ymin,ymax]),用这个语句可以对x,y轴的上限与下限绘制范围一起做控制,但是间隔还是要用上面的set来改



4、matlab中的图像一般是十进制,数据类型转换用double()

===>在数字图像处理中,将图像输入为矩阵,矩阵中的数据是八进制的还是十进制的?为什么在进行运算====>的时候会出现:??? Undefined function or method 'sqrt' for input arguments of type 'uint8'.Error ===>in ==> Untitled12 at 20      G=sqrt(E*F);
解答:
matlab中的图像一般是十进制,
Undefined function or method 'sqrt' for input arguments of type 'uint8'.
意思是sqrt要求输入的变量或矩阵是double类型的,这样计算出来的结果才更加有意义。
uint8的含义是无符号8位整数(0——255)范围,
只要将你的输入类型强制转换成double即可


5、matlab中,以e为底的自然对数是用log()计算的,而e的指数函数用exp()计算。
这个小问题纠结了一小时,fuck。还是要加强学习啊!!!!!!!!!!

6,图像大小=图像宽度*图像高度*颜色深度/8
即一张图片宽680像素,高480像素,每个像素点上的颜色深度为16位(即图像上的颜色种类可以表示2的16次种)。则图像大小为680*480*16/8=652800(单位:字节,即B)因为1KB=1024B,652800/1024=637.5KB这就是像素与图像大小的关系。图像大小由图像像素与颜色深度决定的。

7/首先要明白一个概念:像素可不是长度单位,它是表示图像清晰度的,

那么到底像素和厘米怎么换算?
这要看分辨率,才能将像素和实际尺寸对应起来的。
一般我们是72像素/平方英寸,或者300像素/平方英寸
72像素/平方英寸的时候 就是 28像素/1厘米
300像素/平方英寸的时候 就是 119像素/1厘米

如我一图片,实际宽是20CM,在PS里面量也是200MM,可实际的图片的宽却是570,符合上面红色的第一条

看分辩率分辩率是**像素/厘米 那一cm就有**像素PX:CM=28.35:1

要看分辨率,1000dpi的1cm见方打印出来和10dpi的1cm见方打印出来是一样大小的,都是1cmX1cm,但是他们所包含的像素就大不相同,相差了几个数量级。

dpi的意思是,dot per inch,就是每英寸多少点(点就是像素了)。所以72dpi指的是一英寸距离,包含72像素;300dpi指的是一英寸距离,包含300像素。

分辨率相乘的结果就是像素,如分辨率是1024×768,那么,像素就是它俩的乘积约合78万多像素。

1英寸=2.54厘米

72像素/英寸=28.346像素/厘米

300像素/英寸=118.11像素/厘米

  • 1 厘米=0.3937 英寸
    1 英寸=2.54 厘米
    以常见1024像素对比:
    1024像素=3.413英寸=8.67厘米 (300像素/英寸dpi 每英寸≈0.003333像素)

    所以1024像素的厘米尺寸就是:1024*0.003333*2.54

    1024像素=14.222英寸=36.12厘米 (72像素/英寸dpi 每英寸≈0.013889像素)

    所以1024像素的厘米尺寸就是:1024*0.013889*2.54

  • ============================================================================================================

    图像的合成;Matlab中的各种逻辑运算方式求解。

    加法:C=A+B去除叠加噪音生成叠加效果
    减法:C=A-B去除叠加图案检测同一场景中的图像变化
    乘法:C=A*B图像的局部显示
    求反:~A获得负像获得子图像的补图像
    异或:A⊙B获得相交图像

    clear all
    A=imread('clev1.bmp');
    B=imread('clev2.bmp');
    figure('Name','原始图像') %创建图像窗口%
    subplot(1,2,1)   %拆分窗口%
    imshow(A);title('原始A'); %显示指定工作区图像%
    colorbar   %添加色度条%
    subplot(1,2,2)
    imshow(B);title('原始B');
    colorbar

    figure('Name','图像算数运算')
    res1=imadd(A,B);  %A+B%
    res2=imsubtract(A,B);  %A-B%
    res2_2=imsubtract(B,A);  %B-A%
    res3=immultiply(A,B);  %A*B%
    res4=imdivide(A,B);  %A/B%
    res4_2=imdivide(B,A);  %B/A%
    subplot(2,3,1)
    imshow(res1);title('A加B');
    subplot(2,3,2)
    imshow(res2);title('A减B');
    subplot(2,3,3)
    imshow(res2_2);title('B减A');
    subplot(2,3,4)
    imshow(res3);title('A乘B');
    subplot(2,3,5)
    imshow(res4);title('A除B');
    subplot(2,3,6)
    imshow(res4_2);title('B除A');

    C=A(:,:,1);  %取单色%
    D=B(:,:,1); 
    figure('Name','图像逻辑运算')
    res1=C&D;  %C&D%
    res2=C|D;  %C|D%
    res3=xor(C,D);  %xor C D%
    res3_2=xor(D,C)  %xor D C%
    res4=not(C)&not(D); %~C%
    res4_2=not(C)|not(D); %~D%
    subplot(2,3,1)
    imshow(res1);title('C&D');
    subplot(2,3,2)
    imshow(res2);title('C|D');
    subplot(2,3,3)
    imshow(res3);title('xor C D');
    subplot(2,3,4)
    imshow(res3_2);title('xor D C');
    subplot(2,3,5)
    imshow(res4);title('~C&~D');
    subplot(2,3,6)
    imshow(res4_2);title('~C|~D');

    你可能感兴趣的:(MATLAB学习小记)