MATLAB基本的使用方法
-
>> f = imread('chestxray.jpg');读进来的图像数据被保存在变量f中。尾部的分号用来抑制输出。如果图片是彩色的,可以用rgb2gray转换成灰度图:
>> f = rgb2gray(f);
然后可以用size函数看图像的大小
>> size(f)
如果f是灰度图像,则可以用下面的命令把这个图像的大小赋给变量M和N
>> [M, N] = size(f);
用whos命令查看变量的属性
>> whos f
-
2.显示图像:用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, [])
可以使动态范围比较窄的图像显示更清楚。
- 3.写图像。用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 -
4.数据类型。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)
-
5.图像类型分为:
-
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是分割的阈值。
-
6.数组(向量)索引:创建向量(数组):
>> 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函数产生一个范围内的平均分布。
-
7.矩阵索引:创建矩阵
>> 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)
-
8.一些常用的矩阵
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)
-
9.函数:可以把一系列的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并开始编辑。

您当前的位置: