许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  台大郭彦甫教授MATLAB 2025最新版零基础入门精讲

台大郭彦甫教授MATLAB 2025最新版零基础入门精讲

阅读数 3
点赞 0
article_banner


第一课:

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 是一个矩阵,每一行都复制 x;
  • Y 是一个矩阵,每一列都复制 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(): 如何去储存图像,适用于不同的格式


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空