Matlab的基本用法

  • 格式:docx
  • 大小:26.57 KB
  • 文档页数:18

Matlab的基本用法

读取图像:用imread函数读取图像文件,文件格式可以是TIFF、JPEG、GIF、BMP、PNG等。比如

>> f = imread('chestxray.jpg');

读进来的图像数据被保存在变量f中。尾部的分号用来抑制输出。如果图片是彩色的,可以用rgb2gray转换成灰度图:

>> f = rgb2gray(f);

然后可以用size函数看图像的大小

>> size(f)

如果f是灰度图像,则可以用下面的命令把这个图像的大小赋给变量M和N

>> [M, N] = size(f);

用whos命令查看变量的属性

>> whos f

显示图像:用imshow显示图像

imshow(f, G)

其中f是图像矩阵,G是像素的灰度级,G可以省略。比如

>> imshow(f, [100 200])

图像上所有小于等于100的数值都会显示成黑色,所有大于等于200的数值都会显示成白色。pixval命令可以用来查看图像上光标所指位置的像素值。

pixval

例如

>> f = imread('rose_512.tif');

>> whos f

>> imshow(f)

如果要同时显示两幅图像,可以用figure命令,比如

>> figure, imshow(g)

用逗号可以分割一行中的多个命令。imshow的第二个参数用一个空的中括号:

>> imshow(h, [])

可以使动态范围比较窄的图像显示更清楚。

写图像。用imwrite写图像

imwrite(f, 'filename')

文件名必须包括指明格式的扩展名。也可以增加第三个参数,显式指明文件的格式。比如

>> imwrite(f, 'patient10_run1.tif', 'tif')

也可以写成

>> imwrite(f, 'patient10_run1.tif')

还可以有其他参数,比如jepg图像还有质量参数:

>> imwrite(f, 'filename.jpg', 'quality', q)

q是0到100之间的一个整数。对比不同质量的图像效果。用imfinfo命令可以查看一个图像的格式信息,比如

>> imfinfo bubbles25.jpg

可以把图像信息保存到变量中

>> K = imfinfo('bubbles25.jpg');

>> image_bytes = K.Width * K.Height * K.BitDepth / 8;

>> compressed_btyes = K.FileSize;

>> compression_ratio = image_bytes / compressed_bytes

数据类型。MATLAB的数据类型包括:

double 双精度浮点

uint8 无符号8位整数

uint16 无符号16位整数

uint32 无符号32位整数

int8 有符号8位整数

int16 有符号16位整数

int32 有符号32位整数

single 单精度

char 字符 logical 逻辑型(二值)

数据类型转换

B = data_class_name(A)

比如

>> C = [1.4 1.5]

>> D = uint8(C)

图像类型分为:

Intensity image 灰度图

Binary image 二值图

Indexed image 索引图

RGB image 彩色图

在灰度图中每个像素可以是整型、浮点型或者逻辑型。图像类型的像素类型可以

转换

function to from

im2uint8 uint8 logical,uint8,uint16,double

im2uint16 uint16 logical,uint8,uint16,double

mat2gray double double

im2double double logical,uint8,uint16,double

im2bw logical uint8,uint16,double

比如

g = mat2gray(A, [Amin, Amax]);

g = mat2gray(A);

g = im2double(h);

g = im2bw(f, T)

其中A是浮点型的图像,Amin和Amax是浮点数的范围,h和f是任意类型的图像,T是分割的阈值。

数组(向量)索引:创建向量(数组):

>> v = [1 3 5 7 9 11 13]

用小括号对向量进行索引(取数组中的某个元素): >> v(2)

转置(将行向量通过转置变成列向量):

>> w = v.'

取向量其中的一部分:

>> v(1:3) 第1个到第3个

>> v(2:4)

>> v(3:end) 第3个到最后一个

>> v(1:end)

>> v(:) 全部

>> v(1:2:end) 第1个到最后一个,每次增加2

>> v(end:-2:1) 最后一个到第1个,每次减2

其中end总是表示最后一个。

>> x = linspace(1, 5, 10)

>> v([1 4 5])

linspace函数产生一个范围内的平均分布。

矩阵索引:创建矩阵

>> A = [1 2 3; 4 5 6; 7 8 9]

取矩阵中的一个元素

>> A(2, 3)

取矩阵中的一行或者一列

>> C3 = A(:, 3)

>> R2 = A(2, :)

取矩阵中某些行某些列

>> T2 = A(1:2, 1:3)

对矩阵中某些元素进行赋值:

>> B = A;

>> B(:, 3) = 0

用end表示最后一行或者最后一列:

>> A(end, end) 最后一行最后一列

>> A(end, end-2) 最后一行倒数第三列 >> A(2:end, end:-2:1) 第2行到最后一行,最后一列到第一列,每次减2 >> E = A([1 3], [2 3]) 第1、3行,第2、3列

>> D = logical([1 0 0; 0 0 1; 0 0 0])

>> A(D) 取A中由D指定的位置上的元素

>> v = T2(:) 把矩阵变成一个向量

>> s = sum(A(:)) 求和

>> sum(sum(A))

可以把矩阵操作用在图像上

>> f = imread('filename');

>> fp = 矩阵列倒转

>> imshow(fp)

>> fc =

>> imshow(fc)

>> fs =

>> imshow(fs)

>> plot(f(512,:))

矩阵可以是多维的,用size看矩阵大小,用ndims命令常看矩阵的维数

>> size(A, 1)

>> ndims(A)

一些常用的矩阵

zeroes(M, N)

ones(M, N)

true(M, N)

false(M, N)

magic(M)

rand(M, N)

randn(M, N)

其中M、N表示矩阵的行数和列数。比如

>> A = 5 * ones(3, 3) >> magic(3)

>> B = rand(2, 4)

函数:可以把一系列的MATLAB语句或者一个带参数的函数放在扩展名叫做m 的文件中。一个带函数的m文件有一下部分组成

函数定义行

H1行

帮助部分

函数体

注释

函数定义行的格式是

function [outputs] = name(inputs)

比如要写一个函数计算两个图像的和以及乘积

function [s, p] = sumprod(f, g)

其中f和g是输入的图像,而s是和,p是乘积。返回值用中括号括起来,如果返回值只有一个,可以省略中括号。如果函数没有输出,则中括号和等号都可以省略。函数名字的命名规则和C语言是相同的。定义好的函数可以在命令行调用:

>> [s, p] = sumprod(f, g);

也可以被其它函数调用。如果只有一个返回值,调用时中括号也是可以省略的,比如

>> y = sum(x);

H1行是文本的第一行,是一个单行的注释,紧跟在函数定义行后面,之间不能有空行。比如

% SUMPROD Computes the sum and product of two images.

百分号开始的文字表示注释。当使用帮助命令

>> help function_name

时,这个H1行会被首先显示出来。如果使用lookfor命令,则会在所有H1行中查找指定的关键字。这一行应该提供这个函数功能的一个概述。帮助部分是紧跟在H1后的文本块,中间没有空行,用来提供对这个函数更详细的帮助说明。在使用help命令时会显示所有这部分内容。这部分内容由注释语句构成,全部由%开始。接下来第一个非注释语句表示函数体的开始。函数体包含进行计算的语句和给返回值赋值的语句。函数题中的所有注释(百分号开始的行)被认为是普通的注释,不是H1或者帮助部分。m文件可以用任何文本编辑器创建和编辑,只

要用.m扩展名保存在MATLAB可以搜索到的路径里面。另一个创建和编辑函数的方法是在命令行输入edit命令,比如

>> edit sumprod

这命令会编辑已经存在的sumprod.m文件,如果没有则自动在当前目录中创建一个sumprod.m并开始编辑。

运算符。运算符可以分为算术运算符,关系运算符和逻辑运算符。算术运算符分为矩阵算术运算符和数组算术运算符。

+ 矩阵和数组加法 plus(A, B) a+b, A+B

- 矩阵和数组减法 minus(A,B) a-b, A-B

.* 数组乘法 times(A,B) C=A.*B, 意味着C(I,J) = A(I,J)*B(I,J) * 矩阵乘法 mtimes(A,B) A*B, 表示线性代数中的矩阵运算,或者a*A ./ 数组右除rdivide(A,B) C=A./B, 意味着C(I,J)=A(I,J)/B(I,J)

.\ 数组左除ldivide(A,B) C=A.\B, 意味着C(I,J)=B(I,J)/A(I,J)

/ 矩阵右除 mrdivide(A,B) A/B 意味着A*inv(B), inv是矩阵求逆

\ 矩阵左除 mldivide(A,B) A\B 意味着inv(A)*B

.^ 数组指数 power(A, B) C=A.^B,意味着C(I,J)=A(I,J)^B(I,J) ^

矩阵指数 mpower(A,B) 请查看帮助

.' 向量和矩阵转置 transpose(A) A.'

' 复数的共轭 ctranspose(A) A'

+ 单目加号 uplus(A) +A 与0+A相同

- 单目负号 uminus(A) -A 与0-A相同

图像处理工具包还提供其他一些算术运算

imadd 两个图像相加,或者一个图像加上一个常量

imsubstract 两个图像相减,或者一个图像减掉一个常量

immultiply 两个图像相乘,或者一个图像乘上一个常量