Who are you?

Mat不lab

这篇文档主要记录一些常见但是我还没有掌握的matlab用法,毕竟小白,所以还是多记为妙~

20170418 - matlab 二进制文件读写

  • 读入二进制文件 - fread

    1
    2
    3
    4
    5
    6
    7
    % 打开二进制文件
    % 将文件数据读入变量f中:一维方式存储在f中,num是文件中的数据个数
    % 关闭文件
    fip=fopen('test2.out','rb');
    [f,num]=fread(fip,50*504,'float');
    fclose(fip)
  • 写出二进制文件 - fwrite

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    % 打开二进制文件
    % 将变量数据写入文件中:一维方式存储在文件中
    % 关闭文件
    fid=fopen('V1_01.dat','wb');
    for j=1:1:300
    for i=1:1:2500
    fwrite(fid,a(i,j),'float');
    end
    end
    fclose(fid);

20170418 - matlab中让人相见恨晚的命令

  1. dbstop if error:如果运行出现错误,matlab会自动停在出错的那行,并且保存所有相关变量。
    • 不用设置断点;
    • 为避免每次在命令行中都要敲入,可以在主函数最前面加入该语句;
    • 退出需要执行dbquit
  2. 未完待续

20140418 - matlab avi动画制作

VideoWrite函数,配合open,writeVideo和close方法从图像(figure)中创建视频文件、静态图像或Matlab视频。VideoWrite函数可以创建AVI和Motion JPEG 2000格式的视频文件,这些文件在多平台上都能播放,也可以创建在window平台上播放的MPEG-4文件。VideoWrite函数支持大于2GB的视频文件。VideoWrite函数使用预先定义的属性来设置视频属性,例如’Uncompressed AVI’ or ‘MPEG-4’等。

  1. 工具函数 - VideoWriter()

    1
    writerObj = VideoWriter(filename,profile);
    • filename:单引号引用的字符串指定视频文件名。文件名可以加扩展名,也可以不加扩展名。Matlab支持的视频文件扩展名如下:

      • .avi :avi file
      • .mj2:Motion JPEG 2000 file
      • .mp4 or m4v:MPEG-4 file (Win7 system only)

      Tip:如果文件名不指定扩展名,VideoWrite函数将根据profile的设置来自动加上.avi,.mj2,.mp4 或者.m4v的扩展名,如果没有设置profile的值,VideoWrite函数默认保存为.avi文件。

    • profile:使用单引号引用的字符串,描述了创建视频的类型。

      • ‘Archival’
      • ‘Motion JPEG AVI’
      • ‘Motion JPEG 2000’
      • ‘MPEG-4’
      • ‘Uncompressed AVI’
  2. 函数方法

    • open:Openfile for writing video data 打开视频
    • getProfiles:List profiles and file formats supportedby VideoWriter 列出VideoWriter支持的配置和文件格式
    • writeVideo:Write video data to file 写视频
    • close:Closefile after writing video data 写完视频数据后关闭文件
  3. 基本步骤

    • 创建视频并打开该视频文件

      1
      2
      writerObj=VideoWriter('test.avi'); %// 定义一个视频文件用来存动画
      open(writerObj); %// 打开该视频文件
    • 在循环中获取图像中的帧

      1
      frame = getframe; %// 把图像存入视频文件中
    • 将帧写入视频文件

      1
      writeVideo(writerObj,frame); %// 将帧写入视频
    • 循环结束后关闭视频文件

      1
      close(writerObj); %// 关闭视频文件句柄
  4. 其他设置

    • 改变帧数

      1
      2
      % 此语句必须在open语句之前
      writerObj.FrameRate=2; % 默认30,即1秒30幅图
    • 改变像素尺寸

      1
      2
      3
      frame = getframe;
      frame.cdata = imresize(frame.cdata, [H W]); %// 设置视频宽高:H为行数(高),W为列数(宽)
      writeVideo(writerObj,frame);

      VideoWrite()函数默认根据第一帧的大小决定保存视频高和宽,并且没有给出自定义视频尺寸的方法。网上搜了很久,没有找到如何改变保存视频像素尺寸的方法。设置断点调试,发现frame=getframe;获取的帧frame为一个结构体,包含两个成员:

      frame结构

      cdata为数据,colormap为调色板。cdata的尺寸378×607就是第一帧读取的图像的尺寸,VideoWrite()函数将默认以该尺寸保存所有图像帧到视频文件。

      有时,图像绘制过程中,如果曲线的尺寸会随时间变化:变小不会有问题,而如果曲线尺寸超过378×607就会出错。为了避免因此造成的错误,可以通过在读完每一帧后改变该帧的尺寸,来实现将视频保存成自定义的长宽,不足的部分自动用figure的底色填充。

注意:matlab是区分大小写的,所以这里用的VideoWriter()以及writeVideo中的大小写不可随意改变。

参考:

2017 - 05 - 04 matlab中的Renderer

1.首先解释下什么是Renderer:
A renderer is the software that processes graphics data (such as vertex coordinates) into a form that MATLAB can use to draw into the figure. MATLAB supports three renderers:
1) Painters
2) Z-buffer
3) OpenGL
Renderer(扫描器)是一种图像数据转换程序,通过这个程序,可以把图像数据转化为Matlab可以用来画图的内容。可以这样理解:Renderer(渲染器,描绘器)是matlab用来画图(即将数据转化为图像)的方式。
它三种方式:1)Painters 2) Z-buffer 3) OpenGL

2.三种方式的比较
1)painters 再画简单的图画时,比较快;
2)z-buffer 又称深度缓冲技术,它是现在内存中画图,然后再将最终的图像显示在显示终端。这样的话,当在一个像素点,如果被多次赋值的话,它只会显示最高层的图像。
3) opengl 是利用硬件进行绘图的方式。

2017 - 05 - 10 matlab中不同长度字符串数组

使用cell数组,关键点:{ }

元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫做元胞(cell)。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。

1
2
3
4
5
6
7
8
for i=1:1:mpx
for j=1:1:mpy
for k=1:1:mpz
fnm_out{ii}=char([fnm_out 'sgt_00' num2str(id) '_mpi0' px(i) '0' py(j) '0' pz(k) '_n00001.nc']);
ii=ii+1;
end
end
end

参考:

2017 - 06 - 11 matlab中的字体设置

  1. 通用格式

    1
    title(['\fontsize{6}\fontname{宋体}中文\fontsize{7.5}\fontname{the new time}english']);
  2. 采用句柄设置

    1
    set(gca,'FontSize',20);