Format:
format long和format short
输入format long,再输入pi,它会显示一长串字符
再输入format short,pi会变短,为3.1416
shortE 保留小数点后4位
longE 保留小数点后15位
bank 保留小数点后2位
rat 保留分数形式
分号;——不显示运算结果(相当于换行继续编辑)
e.g: a = 10;
b = 5;
a+b
ans = 15
⬆️ :往上找历史记录
clc:清除命令行窗口(不清除variable)
clear:清除工作区的所有variable(慎用!)
*clear+variable: 清除指定的variable
who:在命令行窗口列出所有的variable
whos:列出所有variable和它们的id
Array:
行指数(row vector): a = [1 2 3 4]
列指数(column vector): b = [1;2;3;4]
e.g: 3x3矩阵怎么打出来
>>A = [1 21 6; 5 17 9; 31 2 7]
array indexing的使用(相当于你从矩阵中提取你想要的东西):
A(3): 从第一列开始数第3位➡️31
A(1,2):指矩阵的第1行第2列,也就是21
A([1 3], [1 3]):
前一个[1,3]是row,后一个[1,3]是columb
前一个[1,3]保留了第一个row和第三个row
后一个[1,3]保留了第一个columb和第三个columb
最后结果是ans=[1 6;31 7]
A(x,:):指的是A矩阵中第x行全部
利用A()=[]可以删掉一个row或一个column
long array:
A = [1 2 3···100] === A=[1:100]
variable= a:b:c(数值a开始,c结束,然后以b为间隔的矩阵)
如果
F=[A B],A和B是矩阵,那么F也就是一个揽括A和B的矩阵
在矩阵中,各operators的用法:

其他特殊矩阵:
eye(n):n x n的原始I矩阵
zeros(n1,n2): n1 x n2的零矩阵
ones(n1, n2):n1 x n2的一矩阵
diag(): 对角线矩阵,沿着对角线排布(其他地方都是0)
max(A):给出一个新矩阵,这个新矩阵包含每个column中最大的一个数值
max(max(A)):给出矩阵中最大的数值
min(A):类似max(A)的用法
sum(A):给出一个新矩阵,这个新矩阵包含每个column的和
mean(A):新矩阵为每个矩阵的平均数
sort(A):给一个新矩阵,每个column重新排列,从小到大
sortrows(A):给一个新矩阵,每个row重新排列,从小到大
size(A): 列出矩阵的大小(几个row,几个column)
length(A):列出矩阵的长度
find(A):例如find(A==5),它会给出矩阵中第几个数字等于5
Matlab Script(脚本):
script一般会储存为file.m
点击新建(New)可以创建新的脚本
编写完脚本后,按Run保存并运行or按键盘F5保存(适用于台式机)
*保存时,命名脚本不能以数字开头
如何找公式
点击editor(编辑器)里的function,找到对应的公式or方程
%: matlab的注解,相当于python里面的#(代表这行程序不执行)
%%:把一个区块分为两个区块,只执行其中一个区块
点击行数,表示从此行开始暂停运行(用于debug检测)
smart indent(智能缩进):自动出现缩进,以防止程序出错或误导
script flow:

relational operators(逻辑符号):
逻辑符号是condition的一部分,condition连接control flow,是程序运行的条件和前因:
e.g: if(condition)

本质就是一个logical booleam(符合条件为true,也就是1,不符合条件为false,也就是0)
a==10和a=10的区别(类似于python):
=是assignment,指的是将常量10指定到一个变量a里。==指的是单纯的a等于10,a也是常量,一般用在条件语句中。
if/elseif/else:
if condition1
statement1
elseif condition2
statement2
else
statement3
if的使用:if后面跟一个condition1,当condition1成立(true),statement1执行。
*如果condition1不成立(false),跳转到第二个condition,如果condition2成立,statement2执行
“elseif”和“else”是optional的
switch:
if和switch的差别:if是判断condition是否成立(true或false),switch更精准,相当于搜索器,根据给出的expression,找到合适的case,再运行相对应的case的statement
例如:
input_num = 1;
switch input_num
case -1
disp('negative 1');
case 0
disp('zero');
case 1
disp('positive 1');
otherwise
disp('other value')
end
因为input_num是1,属于第三个case,所以运行第三个statement ‘positive 1’
while(类似于python中间的while):
while expression
statement
end
while跟一个condition,如果条件成立,循环执行statement,直到条件不成立。如果一开始就不成立,直接跳到n
e.g:
n = 1;
while prod(1:n) , 1e100
n = n+1;
end
如果n为1,那么1!小于10^100,执行条件,n = 1+1 =2,n=2回到条件,发现还是小于10^100,继续执行条件,n=2+1=3,3再代入条件,反复执行,直到condition不成立
Pre-allocating:
allocation会重新排列程序的大小
tic/toc:tic和toc是计时,当程序运行,计时开始直到程序运行结束,然后将计时结果显示出来
pre- allocating本质上是缩短程序运行时间
break:
break和while相连,指如果condition成立,break可以将执行直接跳到end,避免无限循环和电脑宕机。
写脚本的小技巧:
clear all:将工作区的所有变量消掉
close all:将图像关掉
;的作用:放在程序的结尾,让程序执行的结果不显示在命令行窗口
...:换行号
control+C的功能:对于执行很久的程序,control+C可以终止执行
Function:
function的形态y=ax,y也就是output,x是input
e.g:
function y = mean(x)
function是keyword,y是output,mean是function name/file name,x 是input
*在公式中,点乘(.*)试用于有vector的情况,可以适用于矩阵
多种output和input的情况:
e.g: function[a F] = acc(v2, v1, t2, t1, m)
a = (v2-v1)./(t2-t1);
F = m.*a;
*注意,在脚本编辑公式的时候,脚本名称和公式名称要一致
Function Default Variables:

假设说有一个function zeros,zeros会输出一个全是0的matrix,例如zeros(10)就是[0 0 0·····0 0 0]
nargin:给出函数输入的参数数量
e.g:zeros(10)给出的nargin就是1,zeros(10,10)给出的nargin就是2
nargout同理给出函数输出的参数数量
varargin给出变量的长度
以上所有的Function Default Variables给出的都是function的大小
第三课:
Matlab variable type:

int和uint的区别:int的取值范围可以存在负数,uint最小值只能为0
character(char):
*要用单引号制定一个char(不同于string,string是由多个字母组成)
whos:显示workspace中有多少个变数,并显示它们的详细信息(type是什么、class是什么)
String:
多个字源就是string,用''括起来
string concatenation:
用[]包括起来,把合适的string放在一起
e.g:s1='example'
s2='string'
s3='examplestring'
*加一个;指的是将string concatenation当成一个array的作用,相当于换行,但要注意两个string的char数量一致:
e.g:s1='string'
s2='string'
s3='string'
'string'
逻辑运算和逻辑字符的使用:
str = 'abcdeag'
str(3) = c
如何取验证一个char在string中的存在:
e.g:'a' = str
在str中,如果char为a,true,结果为1
如果char不为a,false,结果为0
结果:1 0 0 0 0 1 0
例子:str(str == 'a') = 'Z'
相当于把这串string中的所有a换成Z
structure(相当于python里面的dictionary):
structure相当于一个总览,里面包括若干个fields,fields相当于python中的key,后面跟一个value,这个matlab里面的value可以是string,也可以是char、array
如果说这个structure里面包括多个分览(比如你要记录两个学生的所有信息),
只需要在structure后面加个序号:
e.g:student(2).name

fieldnames(structure)相当于显示出structure所有的fields
rmfield相当于移除某个指定的field
Cell Array:
假设一个矩阵包括不同类型的variables,那么我们需要用{}来指代cell array
e.g:
我们可以用A(1,1)={[1 4 3]}表示,也可以用A{1,1}=[1 4 3]表示
e.g:
A(1,1)={[1 4 3;2 5 6;2 7 9;3 1 5]};表示第二象限内容为矩阵[1 4 3;2 5 6;2 7 9;3 1 5]
A(1,2)={'Jonny Li'};表示第一象限内容为string'Jonny Li'
A(2,1)={3+7i};表示第三象限内容为虚数3+7i
A(2,2)={-pi:pi:pi};表示第四象限内容为-pi到pi之间的值(每隔pi)
*小括号()和大括号[]的区别:
如果要看这个输入里面的详细内容,用大括号,小括号是一个概括,输出结果不同

怎么样把matrix转成cell:
比如把一个60x50的打matrix转换成若干个由6x5组成的大cell
用cell2mat(),可以把一个axa的矩阵转化成a^2个1x1的矩阵组成的cell
mat2cell:可以把一个矩阵分成若干个不同大小的矩阵组成的cell,大小和数量由自己输入决定
multidimensional array:
如何创造一个三维矩阵(columns、rows、layer)
A{1, 1, 1} = '123'
A{1,1,2} = 'Jonny'
但是多了很复杂、很难操作:
用cat()替代
e.g:
A=[1 2;3 4];B=[5 6;7 8];
C = cat(1,A,B)
相当于把A和B接起来,组成新的matrixC
如果:
C = cat(1,A,B),则A和B竖着接起来(row)
C= cat(2,A,B),则A和B横着接起来(column)
C = cat(3,A,B),则A和B三维着接起来(layer)
reshape():将一个矩阵的row和columns数量改变(r1、c1变成r2、c2)
*前提条件:r1c1=r2c2
File Access:
如何把workspace里面的data储存在file里面
存成text或者excel
save()和load()
save mydata1.mat相当于把worksapce所有的值给储存起来了
save mydata1.mat-ascii保存所有变量为 ASCII 文本,用于可编辑的纯文字档案
如何读取excel:xlsread()
score = xlsread('04Score.xlsx')
score = xlsread('04Score.xlsx','B2:D4')指的是读excel表格中指定的范围
算出平均数
mean(04Score.xlsx')
如何用Matlab编辑和写下新的信息(e.g:平均数):
xlswrite('04Score.xlsx',{'Mean'}, 1, 'E1')
文档 执行命令 sheet 编辑行
*1表示sheet,指的是excel的sheet1
写的时候,要关掉excel档案
取标题:[Score Header]=xlsread('04Score.xlsx')
档案的读取:
fid = fopen('[filename]','[permission]');
permission指的是权限,包括r(read)、w(write)
Read and Write through Formatted I/O
Read: A =fscanf(fid, format, size)
Write:fprintf(fid, format,x,y,...)
检查是否是file的结尾:feof(fid)
Plot from Data:
plot(): plot(x,y)指明在二维坐标轴,沿着x轴和y轴画二维图像
plot(y): e.g:plot(cos(0:π/20:2*π)
cos(0:π/20:2*π) 是一个向量,表示从 0 开始,以步长π/20递增,到2π结束。

*如果你想在一个平台里同时画两个图
需要用到hold on/off
e.g:
hold on
plot(cos(0:π/20:2*π)
plot(sin(0:π/20:2*π)
hold off

plot style: plot(x,y,'str')
表示可以改变颜色、线条种类等等

e.g:
hold on
plot(cos(0:pi/20:2*pi),'or'): o表示坐标点类型为圆圈、r表示线条为红色
plot(sin(0:pi/20:2*pi),'xg'): x表示坐标点类型为叉、g表示线条为绿色
hold off

legend(): legend(‘L1', 'L2','L3','L4'),表示在图上标志每一个线条所代表的公式:
e.g:
x=0:0.5:4*pi;
>> y=sin(x);
>> h=cos(x);
>> w=1./(1+exp(-x));
>> g=(1/(2*pi*2)^0.5).*exp((-1.*(x-2*pi).^2)./(2*2^2));
>> plot(x,x,'bd-',x,h,'gp:',x,w,'ro-',x,g,'c^-');
>> plot(x,y,'bd-',x,h,'gp:',x,w,'ro-',x,g,'c^-');
加上legend('sin(x)','cos(x)','Sigmoid','Gauss function')后变成了:

清晰可见,可以找到curve对应的公式
加title(标题)和label():
title()
xlabel()、ylabel()、zlabel()
例如:
xlabel('t=0 to 2\pi');
ylabel('values of sin(t) and e^{-x}');
title('Function Plots of sin(t) and e^{-x}')(*^表示x的几次放,后面用大括号表示)

text() 和annotation():
LaTex用来表示数学方法
如何显示积分符号:
例如:str = '$$ \int {0}^{2} x^2\sin(x) dx $$' ($$也就是积分符号)
e.g:
x = linspace(0,3); 表示x的范围在0到3
y = x.^2 .* sin(x); 表示公式
plot(x,y);画图
line([2,2],[0,2^2*sin(2)]);表示
str = '$$ \int_{0}^{2} x^2 \sin(x) dx $$'; 表示这个积分公式
text(0.25, 2.5, str, 'Interpreter', 'latex');
(0.25, 2.5) → 指定文字位置(图中的坐标点)。
str → 要显示的文字内容,这里是一个 LaTeX 数学公式:
'Interpreter','latex' → 告诉 MATLAB 用 LaTeX 格式显示,而不是普通文本。
annotation('arrow','X',[0.32,0.5],'Y',[0.6,0.4]);标注箭头,X和Y的取值范围也就是箭头的大小

Figure adjustment:如何调整、改观图像
Graphical Objects:
三要素:Figure object(整个图像)、axes object(坐标轴)、line object(线条),对三要素进行调整
如何去modify object
1.如何handle这个object(handle相当于这个object的id,里面有粗度、颜色······),相当于你告诉matlab我要改id中的哪一项
upon creation: h=plot(x,y);h相当于辨识码,把object储存到h中
gca和gcf:return handle of current axes/figure
get(): 比如说你把plot(x,y)指定到了h,get(h)回回传xy图像的所有信息(相当于显示它id里所有的properties)
get(gca):显示更多的properties,表示要接下来改变axis的property
set(gca,'XLim','[0,2*pi ]'):意思就是改变gca中XLim这个property,改编成
[0,2*pi ],然后执行
e.g:
y=sin(x);plot(x,y);
h=plot(x,y);get(gca)
原来的图长这样:

现在输入
set(gca,'XLim',[0,2*pi]);
set(gca,'YLim',[-1.2,1.2]);
图长这样:

除了我的坐标轴范围变化了,其他依旧不变
2.fetch还是modify,读取还是改变
e.g:
x=linsapce(0,2*pi,1000);
y=sin(x);
plot(x,y);
set(gcf,'Color',[1 1 1]);
表示的就是改变了figure的property中的color这一项
Line Specification:
除了用set去改变图像的property,也可以直接在画图时就设定property
如:plot(x,y,'-.g','LineWidth',7.0);

效果等于:
h=plot(x,y)
set(h,'LineStyle','-.','LineWidth',7.0,'Color','g')
Marker Specification
如何给坐标点做标记:
Marker face color和edge color的区别:marker face是主体,edge是标题
Multiple figures(一次性画很多图的时候):
在plot之前加上figure字眼,例如:
x=-10:0.1:10;
y1=x.^2-8;
y2=exp(x);
figure,plot(x,y1);
figure,plot(x,y2)


同时生成两个图在电脑屏幕上
*用gca和gcf要小心,它指代的现在的gca和gcf,所以按照上面那个例子,它指代的是第二个figure的gca和gcf。
Figure Position和Size:
figure('Position',[left,bottom,width,height]);
Subplot():用来在同一个图窗(figure)里,把画布分成多个小区域(子图),然后在不同区域里分别画图。
e.g:
t=0:0.1:2*pi; x= 3*cos(t); y = sin(t);
subplot(2,2,1); plot(x,y); axis normal
subplot(2,2,2); plot(x,y); axis square
subplot(2,2,3);plot(x,y);axis equal
subplot(2,2,4); plot(x,y); axis equal tight

生成四个图形
axis equal:指的是x轴和y轴一个unit的大小是一样的,最真实的图
axis square:指的是整体X的长度要等于整体Y的长度,所以图是一个正方形

axis off:将axis移除
上面那个例子,只有第四个的axis不见了,因为
axis on:将axis打开
box off:可以把图像的upper bound关掉
box on:可以把图像的upper bound打开
grid off:可以把图像的格线关掉
grid on:可以把图像的格线打开
将figure储存成file


Logarithm Plots:
x= logspace(-1,1,100):指的是x的范围从10^(-1)到10^1,中间隔了100个数
subplot(m,n,o): 把生成图分为m乘n个diagram,制定第o张
plotyy():图像有两个y轴,显示两个变数
y=ae^(-bx)·sin(cx),相当于把y分为两个部分:ae^(-bx)和sin(cx),两个图像相乘得到一个新图
例如:
>> x=0:0.01:20;
>> y1=200*exp(-0.05*x).*sin(x);
>> y2=0.8*exp(-0.5*x).*sin(10*x);
>> plotyy(x,y1,x,y2)

传回来了三个line(x、y1和y2)对应三个label,分别是Xlable、Y1lable和Y2lable
Histogram(柱状统计图形):
例如:
>> y=randn(1,1000);y的取值范围为1到1000
subplot(2,1,1); 在2*1的分割图像中的第一个图像绘制
hist(y,10);y的取值范围为10个bins,相当于有10个柱状图呈现curve的分布
>> y=randn(1,1000);
subplot(2,1,2);
hist(y,50);
得到图像:

Bar chart(柱状图):
x=[1 2 5 4 8];y=[x;1:5]
subplot(1,3,1); bar(x);title('A bargraph of vector x'):
解析:
当输入x=[1 2 5 4 8],MATLAB 会把它当作 5 个值,每个值对应一个 bar,相当于横坐标1到5,分别对应x的五个值,作为bar
subplot(1,3,2); bar(y);title('A bargraph of vector y')
解析:
bar(y)在 MATLAB 中的规则是:每一列对应一组 (group),每一行对应这一组里不同的 bar。
等于说输入y = [x; 1:5] = [[1 2 5 4 8]; [1 2 3 4 5]],相当于一个2*5矩阵,所以会有两组group。
subplot(1,3,3); bar3(y);title('A 3D bargraph'):
解析:
相当于是生成bar3(y)矩阵y的三维柱状图,横坐标是1到5,也就是5个bar,然后有两组group作为纵坐标,分别是[1 2 5 4 8]和[1 2 3 4 5],第三轴也就是其value
生成图像如下:

bar可以切换style:
x=[1 2 5 4 8];y=[x;1:5];
subplot(1,2,1);
bar(y,'stacked')
stacked也就是其中一个style,图像如下:

barh(y):绘制y的horizontal的方向
pie charts(饼状图):
a = [10 5 20 30]; 相当把65个单位分为4个部分,分别是10个单位、5个单位、20个单位、30个单位
>> pie(a)

pie(a,[0,0,0,1]);相当于把它的第四部分(30)和其他部分隔离开来,

pie3(a):饼状图的3维图形
Polar chart(极坐标轴):
x=1:100;theta = x/10;r=log10(x);
polar(theta,r);

Stairs and Stem Charts:
stem()用来画离散数据的棒状图
fill(): 填充图片
Color Space:
颜色由三部分构成[R G B]
0 is minumum
1 is maximum
8-bit equivalence:
如何指定一个bar的颜色:imagesc()
meshgrid(): 生成二维网格点
surf(x,y,z): 绘制三维曲面图(左边图)
imagesc(): 把矩阵 z 以颜色图像的形式显示
colormap
3D Plots:

plot3()是一个线的指令
例如:
x = 0:0.1:3*pi; 表示x 从 0 到 3π,步长 0.1
z1 = sin(x); 第一条曲线的 z 值 = sin(x)
z2 = sin(2*x); 第二条曲线的 z 值 = sin(2x)
z3 = sin(3*x); 第三条曲线的 z 值 = sin(3x)
y1 = zeros(size(x)); 第一条曲线的 y 值 = 0
y3 = ones(size(x)); 第三条曲线的 y 值 = 1
y2 = y3./2; 第二条曲线的 y 值 = 0.5
plot3(x,y1,z1,'r', ... 红色曲线:y=0, z=sin(x)
x,y2,z2,'b', ... 蓝色曲线:y=0.5, z=sin(2x)
x,y3,z3,'g'); 绿色曲线:y=1, z=sin(3x)
grid on;
xlabel('x-axis'); ylabel('y-axis'); zlabel('z-axis');
生成图像如下

meshgrid:
在三维图中我们通常画的函数为z=f(x,y),MATLAB 需要 一组 (x, y, z) 点 才能画曲面。但如果我们只是写 x = -2:1:2; y = -2:1:2;,这时 x 和 y 只是两个向量,不是点阵。为了生成 二维网格点 (grid of all (x,y) combinations),要用 meshgrid。
例如:
x = -2:1:2; % x = [-2 -1 0 1 2]
y = -2:1:2; % y = [-2 -1 0 1 2]
[X, Y] = meshgrid(x, y);
结果:
这样 (X(i,j), Y(i,j)) 就表示网格上的一个点。
相当于取出X和Y的所有网格点:

mesh()和surf()的区别:
mesh画出网格曲面,surf画出实心曲面
例如:
x = -3.5:0.2:3.5;
y = -3.5:0.2:3.5;
[X,Y] = meshgrid(x,y); 生成二维网格点 (X,Y)
Z = X .* exp(-X.^2 - Y.^2); 定义函数 z = x * exp(-x^2 - y^2)
subplot(1,2,1); mesh(X,Y,Z); 左图:mesh 网格曲面
subplot(1,2,2); surf(X,Y,Z);右图:surf 实心曲面

contour():
contour()相当于把三维图等比例投影到二维图像中
例如:
x = -3.5:0.2:3.5;
y = -3.5:0.2:3.5;
[X,Y] = meshgrid(x,y);
Z = X .* exp(-X.^2 - Y.^2); % 定义函数 z(x,y)
subplot(2,1,1);
mesh(X,Y,Z); % 上图:网格曲面
axis square;
subplot(2,1,2);
contour(X,Y,Z); % 下图:等高线图
axis square;

*meshc()和surfc就是直接在一张图中把三维和二维都放出来
View Angle的意思:
view(az,el): az也就是方位角(xy之间),el也就是仰角
例如:
sphere(50); 画一个球体
view(45,50); 相当于你从方位角45度,仰角50度观察这个球体
light():往生成的立体图形打光
例如:
sphere(50); % 画一个球体
shading flat; % 平面着色
light('Position',[1 3 2]); % 添加光源1
light('Position',[-3 -1 3]); % 添加光源2
material shiny; % 设置材质为闪亮
axis vis3d off; % 保持三维比例,关闭坐标轴
set(gcf,'Color',[1 1 1]); % 设置背景为白色
view(-45,20); % 设置视角:方位角 -45°, 仰角 20°
light('Position', [-1,-1,-1])
也就是在[1 3 2]和[-3 -1 3]这两个位置打光
生成图形如下:

图像处理:
数位图像的处理(digital image):
图像是一种人工产物(artifact),它用于描绘或记录视觉感知。
图像分类:色彩图像(Color)、灰阶图像(Grayscale)、二元图像(Binary)
色彩图像:RGB的量决定色彩类型
where does the color come from?
重现眼睛接收到的讯号,所以图像里面有色彩。
三原色:R(红色)、G(绿色)、B(蓝色)
由三原色叠加组成不同的色彩
二元图像(只有黑和白):
色彩只有两种,所以代表每个pixel的数值只有1和0
灰阶图像:数值变化比较大(比较亮数值比较大,比较暗数值比较小)
色彩图像:拆开后更复杂,有RGB三个图像叠加,等于说一个pixel有三个数值组,如果R越高,那么说明这个pixel越红。

读取和显示image:
读取图像:imread()
显示图像:imshow()
e.g:
脚本编辑
I = imread('gugugaga.tif');
imshow(I);
运行后显示图像:

点开工作区的图像的名称,可以看到很多数值,也就是每个pixel对应的数值,最大为255(纯白)、0(纯黑)。
数值越大越亮,数值越小越暗
workspace同时会告诉image的基本信息,包括name、size(Y乘X)、Bytes(相当于X和Y相乘,所有的pixel总和)、class(一般为uint8)
所以image实际上是一个matrix,影像处理就是改变矩阵里的每一个数值的资料。

如何改变matrix的数值,例如:
I = imread('gugugaga.tif')
for i = 1:size(I,1)
for j=1:size(I,2)
if (rem (i,2)==0 && rem(j,2)==0) #我把每个偶数的row和colum叫出来,设为0
I(i,j)=0;
end
end
end
imshow(I)
最后得到图像如下:

显示图像的信息:imageinfo('gugugaga.tif')
图像的指令:

immutiply:就是把某个pixel的数值乘以多少,让它更亮
如:
I = imread('gugugaga.tif'); 读取图像
subplot(1,2,1);imshow(I); 创建一个窗口,分成 1行2列的子图区域,选择第一个位置(左边)显示原图I
J=immultiply(I,1.5); 将图像I的每个像素值都乘以1.5,生成新的图像J
subplot(1,2,2);imshow(J); 选择在第二个位置显示新图J
*需要提前安装image processing tool来运行immutiply
生成图像如下:

可以看出图像更亮了,左边是原图I,右边是乘了1.5的新图J,暗跟亮的对比度更明显了
imadd(): 将两张图像相加 = 另一张图像
如:
I = imread('gugugaga.tif'); 读取图像1
J = imread('nanji.tif');读取图像2
K = imadd(I,J);合并
subplot(1,3,1); imshow(I);
subplot(1,3,2); imshow(K); C位显示合并后的图像
subplot(1,3,3); imshow(J);
*两张图像必须有相同的大小和种类
imhist()
把每个pixel的数值(graylevel)抓出来,做一个统计图表,看看哪个数值多
x轴是pixel的数值(0-255),y轴是频率
例如:

histogram euqalization:histeq():将图像拉大
Geometric Transformation改变图像的形状:
改变pixel的位置(比如旋转、折叠、倒置)
靠着改变矩阵来处理geometric transformation:

imrotate(): 告诉它旋转多少角度
例如:
I = imread('gugugaga.tif'); subplot(1,2,1);
imshow(I);J = imrotate(I,35,'bilinear');
subplot(1,2,2);imshow(J);

等于说原来图像旋转了35度
imwrite(): 如何去储存图像,适用于不同的格式
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删