MATLAB基本的使用方法归纳(图像-矩阵及函数)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 比如
>> f = imread('filename'); >> fp = 矩阵列倒转 >> imshow(fp) >> fc = >> imshow(fc) >> fs = >> imshow(fs) >> plot(f(512,:)) 矩阵可以是多维的,用 size 看矩阵大小,用 ndims 命令常看矩阵的维数
imwrite(f, 'filename') 文件名必须包括指明格式的扩展名。也可以增加第三个参数,显式指明文件的格式。比 如
>> imwrite(f, 'patient10_run1.tif', 'tif') 也可以写成
>> imwrite(f, 'patient10_run1.tif') 还可以有其他参数,比如 jepg 图像还有质量参数:
>> 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)) 可以把矩阵操作用在图像上
读取图像:用 imread 函数读取图像文件,文件格式可以是 TIFF、JPEG、GIF、BMP、PNG 等。比如
>> f = imread('chestxray.jpg'); 读进来的图像数据被保存在变量 f 中。尾部的分号用来抑制输出。如果图片是彩色的, 可以用 rgb2gray 转换成灰度图:
>> help function_name 时,这个 H1 行会被首先显示出来。如果使用 lookfor 命令,则会在所有 H1 行中查找指 定的关键字。这一行应该提供这个函数功能的一个概述。帮助部分是紧跟在 H1 后的文本块, 中间没有空行,用来提供对这个函数更详细的帮助说明。在使用 help 命令时会显示所有这 部分内容。这部分内容由注释语句构成,全部由%开始。接下来第一个非注释语句表示函数 体的开始。函数体包含进行计算的语句和给返回值赋值的语句。函数题中的所有注释(百分 号开始的行)被认为是普通的注释,不是 H1 或者帮助部分。m 文件可以用任何文本编辑器 创建和编辑,只要用.m 扩展名保存在 MATLAB 可以搜索到的路径里面。另一个创建和编辑 函数的方法是在命令行输入 edit 命令,比如
>> 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, :) 取矩阵中某些行某些列
>> f = rgb2gray(f); 然后可以用 size 函数看图像的大小
>> size(f) 如果 f 是灰度图像,则可以用下面的命令把这个图像的大小赋给变量 M 和 N
>> [M, N] = size(f); 用 whos 命令查看变量的属性
>> whos f 显示图像:用 imshow 显示图像
< <= > >= == ~= 关系运算符的结果是逻辑型的矩阵,比如
>> A = [1 2 3; 4 5 6; 7 8 9] >> B = [0 2 4; 3 5 6; 3 4 9] >> A == B >> A >= B 如果关系运算符两边都是矩阵,则要求两边的矩阵是同样大小的。或者一边是矩阵一边
函数定义行 H1 行 帮助部分 函数体 注释 函数定义行的格式是
function [outputs] = name(inputs) 比如要写一个函数计算两个图像的和以及乘积
function [s, p] = sumprod(f, g) 其中 f 和 g 是输入的图像,而 s 是和,p 是乘积。返回值用中括号括起来,如果返回值 只有一个,可以省略中括号。如果函数没有输出,则中括号和等号都可以省略。函数名字的 命名规则和 C 语言是相同的。定义好的函数可以在命令行调用:
imadd 两个图像相加,或者一个图像加上一个常量 imsubstract 两个图像相减,或者一个图像减掉一个常量 immultiply 两个图像相乘,或者一个图像乘上一个常量 imdivide 两个图像相除,或者一个图像除以一个常量 imabsdiff 两个图像的差的绝对值 imcomplement 求一个图像的反色图 inlincomb 求一组图像的线性组合 关系运算符包括
>> [s, p] = sumprod(f, g); 也可以被其它函数调用。如果只有一个返回值,调用时中括号也是可以省略的,比如
>> y = sum(x); H1 行是文本的第一行,是一个单行的注释,紧跟在函数定义行后面,之间不能有空行。 比如
% SUMPROD Computes the sum and product of two images. 百分号开始的文字表示注释。当使用帮助命令
>> 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 总是表示最后一个。
double 双精度浮点 uint8 无符号 8 位整数 uint16 无符号 16 位整数 uint32 无符号 32 位整数 int8 有符号 8 位整数 int16 有符号 16 位整数 int32 有符号 32 位整数 single 单精度 char 字符 logical 逻辑型(二值) 数据类型转换
g = mat2gray(A, [Amin, Amax]); g = mat2gray(A); g = im2double(h); g = im2bw(f, T) 其中 A 是浮点型的图像,Amin 和 Amax 是浮点数的范围,h 和 f 是任意类型的图像,T 是分割的阈值。 数组(向量)索引:创建向量(数组):
>> 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 相同 图像处理工具包还提供其他一些算术运算
是常数,或者两边都是常数,那也是可以。
>> A > 3 >> 3 ~= 4 逻辑运算符包括与、或、非三个运算
& AND | OR ~ NOT 在 matlab 中非 0 被认为是真,0 被认为是假。比如
A = [1 2 0; 0 4 5] B = [1 -2 3; 0 1 1] >> A & B MATLAB 还有其它一些逻辑运算函数:
B = data_class_name(A) 比如
>> C = [1.4 1.5] >> D = uint8(C) 图像类型分为:
Intensity image 灰度图 Binary image 二值图 Indexed image 索引图 RGB image 彩色图 在灰度图中每个像素可以是整型、浮点型或者逻辑型。图像类型的像素类型可以转换
>> 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 文件有一下部分组成
imshow(f, G) 其中 f 是图像矩阵,G 是像素的灰度级,G 可以省略。比如
>> imshow(f, [100 200]) 图像上所有小于等于 100 的数值都会显示成黑色,所有大于等于 200 的数值都会显示成 白色。pixval 命令可以用来查看图像上光标所指位置的像素值。
pixval 例如
>> 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 的数据类型包括:
>> f = imread('rose_512.tif'); >> whos f >> imshow(f) 如果要同时显示两幅图像,可以用 figure 命令,比如
>> figure, imshow(g) 用逗号可以分割一行中的多个命令。imshow 的第二个参数用一个空的中括号:
>> imshoຫໍສະໝຸດ Baidu(h, []) 可以使动态范围比较窄的图像显示更清楚。 写图像。用 imwrite 写图像