读取图像:用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数据类型。
MA TLAB的数据类型包括: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 fromim2uint8 uint8 logical,uint8,uint16,doubleim2uint16 uint16 logical,uint8,uint16,doublemat2gray double doubleim2double double logical,uint8,uint16,doubleim2bw 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)函数:可以把一系列的MA TLAB语句或者一个带参数的函数放在扩展名叫做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扩展名保存在MA TLAB可以搜索到的路径里面。
另一个创建和编辑函数的方法是在命令行输入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 两个图像相乘,或者一个图像乘上一个常量imdivide 两个图像相除,或者一个图像除以一个常量imabsdiff 两个图像的差的绝对值imcomplement 求一个图像的反色图inlincomb 求一组图像的线性组合关系运算符包括<<=>>===~=关系运算符的结果是逻辑型的矩阵,比如>> A = [1 2 3; 4 5 6; 7 8 9]>> B = [0 2 4; 3 5 6; 3 4 9]>> A == B>> A >= B如果关系运算符两边都是矩阵,则要求两边的矩阵是同样大小的。