MatLab自学内容——矩阵,图像处理
来源:互联网 发布:nginx ssl 硬件加速卡 编辑:程序博客网 时间:2024/06/05 08:34
MATLAB之矩阵的基本运算
1.1 数值矩阵的生成
1.实数值矩阵输入
输入矩阵方法:用键盘上方括号“ [ ] ”代替矩阵括号。矩阵数据在方括号内按行输入,同一行相邻元素用空格(或逗号)隔开,相邻两行用分号“;”隔开。 例如:
>> A=[1 2 3 4;5,6,7,8;9 10 11 12]
A =
1
5
9
2.复数矩阵输入
>> R=[1 2 3;4 5 6], M=[11 12 13;14 15 16]
R =
1
4
M =
11
14
>> CN=R+i*M
CN =
1.0000 +11.0000i
4.0000 +14.0000i
1.3
命令
函数
格式
B = zeros(m,n)
B = zeros([m n])
B = zeros(d1,d2,d3…)
B = zeros([d1 d2 d3…])
B = zeros(size(A))
命令
函数
格式
Y
Y
命令
函数
格式
Y = ones(m,n)
Y = ones([m n])
Y = ones(d1,d2,d3…)
Y = ones([d1 d2 d3…])
Y = ones(size(A))
重点掌握:
生成m阶单位方阵:eye(m)
生成m×n阶单位矩阵:eye(m,n)
生成m阶全1方阵:ones(m)
生成m×n阶全1矩阵:ones(m,n)
生成m阶全0方阵:zeros(m)
生成m×n阶全0矩阵:zeros(m,n)
>> clear
>> E=eye(2,3)
E =
1
0
>> B=ones(2,3)
B =
1
1
1.4向量、矩阵的访问与赋值
更改、增加或删除向量的元素。 例如:
>> clear
>> x=[3 7 4 5]
x =
3
>> x(3) = 2
x =
3
注:x(i)表示向量x的第i个分量。
>> x(6) = 10
x =
3
>> x(4) = [ ]
x =
3
注:在对第六个元素进行赋值时,若未曾对第五个元素赋值,则默认为零。上述运算,结果均返回为变量x。
MATLAB亦可取出向量的一个元素或一部份来做运算。 例如:
>> clear
>> x=[1 2 3 4];y=[2 4 6 8 0];
>> x(2)*3+y(4)
ans =
14
>> y(2:4)-1
ans =
3
在上例中,2:4代表一个由2、3、4组成的向量,同样的方法可用于产生公差为1的等差数列,例如:
>> z = 7:16
z =
7
若不希望公差为1,则可将所需公差直接至于4与13之间,例如:
>> w = 7:3:16
w =
7
同样地,我们可以对矩阵进行各种处理。 例如:
>> clear
>> A=sym([1 2 3 4;5 6 7 8;9 10 11 12])
A =
[
[
[
>> A(2,3) = 5
A =
[
[
[
注:A(i,j)表示矩阵A的(I,j)元,括号中,逗号前面表示行,后面表示列
>> A(2,:)
ans =
[ 5, 6, 5, 8]
>> B = A(2,1:3)
B =
[ 5, 6, 5]
>> A = [A B']
A =
[
[
[
注:矩阵合并,若按照行的形式合并,则用;隔开;若按列的形式合并,则用空格或逗号隔开,例如:
>> A(:, 2) = [ ]
A =
[
[
[
>> A = [A; 4 3 2 1]
A =
[
[
[
[
注:A是以一维数组的形式存取的,故默认最后一行。
>> C=[ 6, 7, 8, 9]
C =
6
>> D=[5, 5;6, 6;7, 7;8, 8;]
D =
5
6
7
8
>> E=[D(:,1),C',D(:,2)]
E =
5
6
7
8
>> A([1 4], :) = [ ]
A =
[
[
x(i)
A(i,j)
A(i,:)
A(:,j)
2
2.1
运算符:“+”和“-”分别为加、减运算符。
运算规则:对应元素相加、减, 即按线性代数中矩阵的“十”, “一”运算进行。
矩阵的加法:A+B
矩阵的减法:A-B
>>A=[1, 1, 1; 1, 2, 3; 1, 3, 6]
>>B=[8, 1, 6; 3, 5, 7; 4, 9, 2]
Z=A+B
Z=A-B
结果显示:A+B=
9
4
5
A-B=
-7
-2
-3
注意:矩阵加法与减法运算时,参加运算的矩阵必须是同型矩阵,其运算规则是对应元素的加减运算;
2.2
运算符:*
运算规则:按线性代数中矩阵乘法运算进行, 即放在前面的矩阵的各行元素, 分别与放在后面的矩阵的各列元素对应相乘并相加。
1.矩阵的乘法:两个矩阵相乘A*B
>>X= [2
1
>>Y=[0
1
0
1
Z=X*Y
结果显示为:
Z=
8
3
注意:矩阵A,B相乘,必须满足A的列数等于B的行数;
2.矩阵的数乘:数乘矩阵k*A
上例中:a=2*X
则显示:a =
4
2
向量的点乘(内积):维数相同的两个向量的点乘。
数组乘法:
A.*B表示A与B对应元素相乘。
3.向量点积
函数
格式
C = dot(A,B,dim)
例
>>Y=[-2
>>Z=dot(X, Y)
则显示:Z =
4.向量叉乘
在数学上, 两向量的叉乘是一个过两相交向量的交点且垂直于两向量所在平面的向量。在Matlab中, 用函数cross实现。
函数
格式
C = cross(A,B,dim)
计算垂直于向量(1, 2, 3)和(4, 5, 6)的向量。
>>a=[1
>>b=[4
>>c=cross(a,b)
结果显示:
c=
-3
可得垂直于向量(1, 2, 3)和(4, 5, 6)的向量为±(-3, 6, -3)
2.3
Matlab提供了两种除法运算:左除(\)和右除(/)。一般情况下, x=a\b是方程a*x =b的解, 而x=b/a是方程x*a=b的解。
例:a=[1
b=[4; 1; 2]
x=a\b
则显示:x=
-1.5000
2.0000
0.5000
如果a为非奇异矩阵, 则a\b和b/a可通过a的逆矩阵与b阵得到:
z = inv(a)*b
b/a = b*inv(a)
数组除法:
A./B表示A中元素与B中元素对应相除。
2.4
运算符:^
运算规则:
当A为方阵, P为大于0的整数时, A^P表示A的P次方, 即A自乘P次; P为小于0的整数时, A^P表示A-1的P次方。
2.5
运算符:′
运算规则:若矩阵A的元素为实数, 则与线性代数中矩阵的转置相同。
若A为复数矩阵, 则A转置后的元素由A对应元素的共轭复数构成。
若仅希望转置, 则用如下命令:A.′。
2.6
函数
格式
例1-42
>> A=[1 2 3;4 5 6;7 8 9]
A =
1
4
7
>> D=det(A)
D =
0
注意:在方阵的前提下,才可以作行列式运算。
2.7
命令
函数
格式
矩阵的逆:A^-1或 inv(A)
例求 的逆矩阵
方法一
>>A=[1
>>Y=inv(A)或Y=A^(-1)
则结果显示为
Y =
1.0000
-1.5000
1.0000
方法二:由增广矩阵 进行初等行变换
>>B=[1, 2, 3, 1, 0, 0; 2, 2, 1, 0, 1, 0; 3, 4, 3, 0, 0, 1]
>>C=rref(B)
>>X=C(:, 4:6)
显示结果如下:
C =
1.0000
0
0
X =
1.0000
-1.5000
1.0000
例1-44
>> A=[2 1 -1;2 1 2;1 -1 1];
>> format rat
>> D=inv(A)
D =
1/3
0
-1/3
注意:在方阵的前提下,才可以作逆运算。
2.8
函数
格式
2.9
生成矩阵的行数与列数:size( )
生成对角矩阵:diag(a)
生成矩阵的对角元素:diag(A)
生成上三角矩阵:triu(A)
生成下三角矩阵:tril(A)
例如:
>> clear
>> syms a b c d e f g h i
>> A=[a b c; d e f;g h i]
A =
[ a, b, c]
[ d, e, f]
[ g, h, i]
>> size(A)
ans =
3
>> B=diag(A)
B =
a
e
i
>> C=triu(A)
C =
[ a, b, c]
[ 0, e, f]
[ 0, 0, i]
【实验内容】
例3-1:输出矩阵 ,计算(1)A的转置;(2)A+2B;(3)6BA;(4) ;(5) ;(6) ;(7) 删除A第一行,将B的第二列的转置加到A的第一行于第二行中间.
相应的matlab代码及运算结果如下:
>>clear
>> A=[3 1 1;2 1 2;1 2 3]
A =
3
2
1
>> B=[1 1 -1;2 -1 0;1 0 1]
B =
1
2
1
>> A'
ans =
3
1
1
>> A+2*B
ans =
5
6
3
>> 6*B*A
ans =
24
24
24
>> A^2
ans =
12
10
10
>> det(A)
ans =
-4
>> inv(A)
ans =
0.2500
1.0000
-0.7500
>> format rat
>> A^-1
ans =
1/4
1
-3/4
>> A(1,:)=[]
A =
2
1
>> B1=B(:,2)'
B1 =
1
>> A=[A(1,:);B;A(2,:)]
A =
2
1
1
例3-2:生成3×3单位矩阵,零矩阵,元素全为1的矩阵.
相应的matlab代码及运算结果如下:
>> eye(3)
ans =
1
0
0
>> A=zeros(3)
A =
0
0
0
>> B=ones(3)
B =
1
1
1
=============================================================================
matlab中的size函数:
size:获取数组的行数和列数
(1)s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数。
(2)[r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。
(3)如果在size函数的输入参数中再添加一项,并用1或2为该项赋值,则size将返回数组的行数或列数。其中r=size(A,1)该语句返回的时数组A的行数, c=size(A,2) 该语句返回的时数组A的列数。
=============================================================================
MATLAB支持的几种图像文件格式:
⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像专家组的图像压缩格式。
⑵BMP(Windows Bitmap):有1位、4位、8位、24位非压缩图像,8位RLE(Run length Encoded)的图像。文件内容包括文件头(一个BITMAP FILEHEADER数据结构)、位图信息数据块(位图信息头BITMAP INFOHEADER和一个颜色表)和图像数据。
⑶PCX(Windows Paintbrush):可处理1位、4位、8位、16位、24位等图像数据。文件内容包括文件头、图像数据和扩展色图数据。
⑷TIFF(Tagged Iamge File Format):处理1位、4位、8位、24位非压缩图像,1位、4位、8位、24位packbit压缩图像,1位CCITT压缩图像等。文件内容包括文件头、参数指针表与参数域、参数数据表和图像数据四部分。
⑸PNG(Portable Network Graphics):包括1位、2位、4位、8位和16位灰度图像,8位和16位索引图像,24位和48位真彩色图像。
⑹GIF(Graphics Interchange Format):任何1位到8位的可交换的图像。
⑺HDF(Hierarchial Data Format):有8位、24位光栅图像数据集。
⑻ICO(Windows Icon resource):有1位、4位、8位非压缩图像。
⑼CUR(Windows Cursor resource):有1位、4位、8位非压缩图像。
⑽XWD(X Windows Dump):包括1位、8位Zpixmaps,XYBitmaps,XYPixmmmaps。
⑾RAS(Sun Raster image):有1位bitmap、8位索引、24位真彩色和带有透明度的32位真彩色。
⑿PBM(Portable Bitmap)。
⒀PGM(Portable Graymap)。
⒁PPM(Portable Pixmap)。
2.MATLAB支持五种图像类型,即二值图像、索引图像、灰度图像、RGB图像和多帧图像阵列。
图像类型: Double数据、uint8和uint16数据
二值图像:
索引图像:
灰度图像:
RGB图像:
其中,多帧图像阵列是由多帧图像组成的,每一帧图像可以为前四种图像中的一种,但组成一个多帧图像阵列的图像必须为同一种。cat函数可以将具有相同尺寸的几个独立图像存成多帧文件。对于多帧图像也可以从中提取单帧。
2.2.2 图像类型判断及转换
1.在MATLAB中如果要判断一个图像文件的类型,可使用如下指令:
l
l
l
l
2.在MATLAB系统中,要将一个类型的图像文件转换成另一个类型的图像文件,只需将前一个文件的图像数据用imread读出,再用imwrite以适当的格式写到后一个图像文件中去即可。另外,要将灰度图像I转换成RGB图像,可运用cat指令。cat函数可以把一些单一的图像合并成图像序列。在图像序列中每个图像需有相同的大小,如果是索引图像,色图也要一致。
此外,MATLAB还提供了若干函数,用于图像类型的转换。这些函数有:
l
l
l
l
l
l
l
l
l
l
l
l
l
l
2.2.3 图像的查询及读写
在MATLAB中要查询一个图像文件的信息,只要用imfinfo指令加上文件及其完整路径名即可。函数调用格式为:
info = imfinfo(filename,fmt)
info = imfinfo(filename)
参数fmt对应于所有图像处理工具箱中所有支持的图像文件格式。
MATLAB提供了两个重要的用于图像文件的读写的指令,分别是从图像文件中读取数据的imread,以及将数据写入到图像文件中的imwrite。
1.imread的常见调用格式为:
A = imread(filename,fmt)
其作用是将文件名用字符串filename表示的,扩展名用fmt表示的图像文件中的数据读到矩阵A中。如果filename所指的为灰度级图像,则A为一个二维矩阵;如果filename所指的为RGB图像,则A为一个m×n×3的三维矩阵。Filename表示的文件名必须在MATLAB的搜索路径范围内,否则需指出其完整路径。
imread的其他几种重要的调用格式为:
[X,map] = imread(filename.fmt)
[…] = imread(filename)
[…] = imread(URL,…)
[…] = imread(…,idx)
[…] = imread(…,’frames’,idx)
[…] = imread(…,ref)
[…] = imread(…,’BackgroundColor’,BG)
[A,map,alpha] = imread(…)
上面一些参数的含义如下:idx是指读取图标(cur、ico、tiff)文件中第idx个图像,默认值为1。’frame’,idx是指读取gif文件中的图像帧,idx值可以是数量、向量或’all’。ref是指整数值。alpha是指透明度。
2.imwrite的常用调用格式为:
imwrite(A,filename,fmt)
imwrite(X,map,filename,fmt)
imwrite(…,filename)
imwrite(…,Param1,Val1,Param2,Val2…)
其中imwrite(…,Param1,Val1,Param2,Val2…)可以让用户控制HDF、JPEG、TIFF等一些图像文件格式的输出特性。
2.2.4 图像的显示
显示图像的最基本的手段是使用image函数。该函数还产生了图像对象的句柄,并允许对对象的属性进行设置。此外,imagesc函数也具有image的功能,所不同的是imagesc函数还自动将输入数据比例化,以全色图的方式显示。
imshow函数比image和imagesc更常用,它能自动设置句柄图像的各种属性。imshow可用于显示各类图像。对于每类图像,调用方法如下:
l
l
l
l
l
l
有关图像显示的函数或其辅助函数,除了上述的以外,MATLAB还提供了一些用于进行图像的特殊显示的函数。
l
l
l
mov = immovie(D,map)
不过这种功能只对索引图像有效,其中D为多帧索引图像阵列,map为索引图像的对应色阶。对于其他类型图像,则需要首先将其转换为索引图像。
l
l
l
l
l
l
至于多个图像的显示,则可分为两个方面:在不同的图形窗口显示不同的图像,可以用figure指令来实现;在同一个图形窗口显示多图,可以用subplot来实现。
第三章 图像运算
3.1 图像的点运算
点运算将输入图像映射为输出图像,输出图像每个像素点的灰度值仅由对应的输入像素点的值决定。它常用于改变图像的灰度范围及分布,是图像数字化及图像显示的重要工具。点运算因其作用性质,也被称为对比度增强、对比度拉伸或灰度变换。在真正进行图像处理之前,有时可以用点运算来克服图像数字化设备的局限性。
点运算实际上是灰度到灰度的映射过程。点运算不会改变图像内像素点之间的空间关系。设输入图像为A(x, y),输出图像为B(x, y),则点运算可表示为:
B(x, y) = f [A(x, y)]
点运算可完全由灰度变换(gray-scale transformation)函数s=f (r)决定,后者描述了输入灰度级与输出灰度级之间的映射关系。图像的点运算分为线性点运算和非线性点运算两种。
3.1.1 线性点运算
线性点运算是指灰度变换函数f为线性函数时的运算。
如图3.1,当a>1时,输出图像对比度增大;当a<1时,输出图像对比度降低;当a=1,b=0时,输出图像就是输入图像的简单复制;当a=1,b≠0时,仅使输出图像的灰度值上移或下移,其效果是使整个图像更亮或更暗。如果a为负值,暗区域将变亮,亮区域将变暗,点运算完成了图像求补。
3.1.2 非线性点运算
非线性点运算对应于非线性映射函数,典型的映射包括平方函数、对数函数、截取函数(窗口函数)、域值函数、多值量化函数等。
阈值化处理是最常用的一种非线性点运算,它的功能是选择一阈值,将图像二值化,然后使用生成的二进制图像进行图像分割及边缘跟踪等处理。
直方图均衡化也是一种非常常用的非线性点运算。它是指将一个已知灰度分布的图像使用某种非线性灰度变换函数进行计算,使运算结果变成一幅具有均匀灰度分布的新图像。经过直方图均衡化的点运算处理后,实际的直方图将呈现参差不齐的外形,这是由于灰度级的可能个数是限造成的。在一些灰度级处可能没有像素,在另外一些灰度级处则像素很拥挤。
点运算的MATLAB实现:
I=imread('rice.png');
rice=double(I);
rice2=rice*0.5+50;
J=uint8(rice2);
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(J);
- MatLab自学内容——矩阵,图像处理
- matlab图像处理函数学习——图像或者矩阵填充函数:padarray
- matlab 高级函数 —— colfilt/blockproc (图像)矩阵的分块处理
- Matlab 图像压缩编码—代码内容
- Matlab图像处理1——imgadjust
- MATLAB图像处理——特征提取
- Matlab 图像处理 ——特征提取
- 图像处理Matlab(一)——图像灰度值
- Matlab图像处理——保存图像方法大全
- MatLab矩阵运算——图像灰度化
- [matlab]矩阵基本内容
- matlab ——二值图像的连通区域图像处理与图像分析
- 图像处理Matlab(二)——生成随机点
- 图像处理函数详解——padarray(matlab)
- Matlab 图像处理入门学习笔记—1.图片格式转换
- Matlab 矩阵处理小结(3)-将多个errorbar图像绘制到一个图像上
- matlab 把图像分成2x4小矩阵用平均值替代 图像模糊处理
- MATLAB矩阵处理
- Android 文件读取
- 5 ways to be a better communicator
- 认识灵敏度分析1(不确定性与DOE)(Uncertainty and sensitivity analysis)
- Tool Collection
- CSS简单页面布局
- MatLab自学内容——矩阵,图像处理
- Java中十进制转换为其他进制的方法
- struts1学习之--8、ActionForward的有关问题
- 软件测试笔记
- 用SIMULINK做灵敏度(SA)_不确定度(UA)分析
- SIMULINK与误差分配的优化1
- 解决jQuery名称冲突
- Linux系统调用
- 实用的正则表达式