文档视界 最新最全的文档下载
当前位置:文档视界 › MATLAB 软件使用简介 轮廓线提取 实验2 图像轮廓线提取技术 实验3 RGB向量空间中的图像分割技术 实

MATLAB 软件使用简介 轮廓线提取 实验2 图像轮廓线提取技术 实验3 RGB向量空间中的图像分割技术 实

MATLAB 软件使用简介  轮廓线提取  实验2  图像轮廓线提取技术   实验3  RGB向量空间中的图像分割技术  实
MATLAB 软件使用简介  轮廓线提取  实验2  图像轮廓线提取技术   实验3  RGB向量空间中的图像分割技术  实

MATLAB 软件使用简介

MATLAB 是一个功能强大的数学软件, 它不但可以解决数学中的数值计算问题, 还可以解决符号演算问题, 并且能够方便地绘出各种函数图形。MATLAB自1984年由美国的MathWorks公司推向市场,现已成为国际最优秀的科技应用软件之一。

一、MATLAB 的工作界面

启动MATLAB后, 出现MATLAB命令窗口,空白区域是MATLAB 的工作区, 在此可输入和执行命令。

二、 MATLAB 操作的注意事项

●在工作区输入MATLAB命令后, 按下Enter键才能执行命令。

●MATLAB 是区分字母大小写的。

●如果不想显示结果,只要在所输入命令的后面加上一个分号“;”即可。

如:x= 2 + 3↙ x=5

x = 2 + 3 ; ↙不显示结果5

●如果一个表达式一行写不下,可以在行尾键入“...”来换行。

如:q=5^6+sin(pi)+exp(3)+(1+2+3+4+5) ...

-5+1/2-567

●命令行与M文件中的百分号“%”标明注释。

三、MATLAB的变量与表达式

●MATLAB的变量名

MATLAB的变量名是用一个字母打头,后面最多跟19个字母或数字。应该注意不要用MATLAB中的内部函数或命令名作为变量名。列出当前工作空间中的变量命令为:

who 将内存中的当前变量以简单形式列出;

whos 列出当前内存变量的名称、大小、类型等信息;

clear 清除内存中的所有变量与函数。

● MATLAB 常用的预定义变量

ans :保存计算结果的缺省变量;Inf 或inf :无穷大; i 或j

pi :圆周率π。

● MATLAB 的运算符

数学运算符:+,-,*, \(左除), / (右除) , ^ (乘幂) 关系运算符:<, >, <=, >=, = =(等于), ~= (不等于) 逻辑运算符:&(逻辑与), |( 逻辑或), ~( 逻辑非)

● MATLAB 的表达式及语句

表达式由运算符、函数、变量名和数字组成的式子。MATLAB 语句由变量、表达式及MATLAB 命令组成,用户输入的语句由MATLAB 系统解释运行。MATLAB 语句的2种最常见的形式为:

形式1:表达式 形式2:变量=表达式

在第一种形式中,表达式运算后产生的结果如果为数值类型,系统自动赋值给变量ans ,并显示在屏幕上。

例1:用两种形式计算3

6sin 5e ++π算术运算结果。

解:形式1: 5^6+sin(pi)+exp(3) ↙

ans = 1.5645e+004

形式2: a=5^6+sin(pi)+exp(3) ↙

a =

1.5645e+004

例2:已知矩阵

??

?

???=????

??=22

11

,2121B A ,对它们做简单的关系与逻辑运算

解:A=[1,2;1,2]; ↙

B=[1,1;2,2]; ↙ C=(A

C=

0 0

0 0

四、MATLAB 的数据显示格式

虽然在MATLAB 系统中数据的存储和计算都是双精度进行的,但MATLAB 可以利用菜单或format 命令来调整数据的显示格式。Format 命令的格式和作用如下:

● format|format short 5位定点表示 ● format long 15位定点表示 ● format short e 5位浮点表示 ● format long e 15位浮点表示

● format short g 系统选择5位定点和5位浮点中更好的表示 ● format long g 系统选择15位定点和15位浮点中更好的表示 ● format rat 近似的有理数的表示 ● format hex 十六进制的表示

● format bank 用元 角分(美制)定点表示 ● format compact 变量之间没有空行 ● format loose 变量之间有空行

例3:对数7sin 5+=a 用五位定点、十五位定点以及有理数形式表示出来。 解: a=5+sin(7),format short,a ↙

a = 5.6570 format rat,a ↙ a =

3117/551 format long,a ↙ a =

5.65698659871879

五、MATLAB 中的常用函数

数学上的函数,MATLAB基本上都有。

表5.1 常用的三角函数

表5.2 常用的计算函数

六、矩阵的操作

MATLAB的基本单位是矩阵,它是的MATLAB精髓,掌握矩阵的输入、各种数值运算以及矩阵函数的使用是以后能否学好MATLAB的关键。

矩阵的输入

(1) 直接输入创建矩阵

整个矩阵以“[”和“ ]”作为首尾,同行的元素用“,”或空格隔开,不同行的元素用“;”或按Enter键来分隔;矩阵的元素可以为数字也可以为表达式,如果进行的是数值计算,表达式中不可包含未知的变量。

例4:直接输入创建矩阵

解:A = [1,2,3; 4,15,60; 7,8,9] ↙

(2) 用矩阵函数来生成矩阵

MATLAB 提供了大量的函数来创建一些特殊的矩阵。

表5.3 常用的矩阵函数

例5:输入矩阵。

解:ones(3) ↙ %生成元素都为1的3阶方阵

例6:输入矩阵

解:zeros(2,5) ↙ %生成元素都为0的2行5列零矩阵

例7:生成3阶魔方矩阵。

解:magic(3) ↙

●操作符“:”的说明

j:k 表示步长为1的等差数列构成的数组:[j, j+1, j+2,…, k] j:i:k 表示步长为i的等差数列构成的数组:[j,j+i,j+2*i,…, k] A(i:j) 表示A(i),A(i+1),…,A(j)

例8:操作符冒号”:”的应用

解:1:5 ↙ %步长为1的等差数列。

1:2:7 ↙ %步长为2的等差数列。

8:-2:0 ↙ %步长为-2的等差、递减数列。

●对矩阵元素的操作

A(i,j) 表示矩阵A的第i行第j列元素。

A(:,j) 表示矩阵A的第j列。

A(i,:) 表示矩阵A的第i行。

A(:,:) 表示A的所有元素构造2维矩阵

A(:) 表示以矩阵A的所有元素按列做成的一个列矩阵。

A(i) 表示矩阵A(:)的第i个元素。

[ ] 表示空矩阵

●元素的抽取与赋值

例9:已知矩阵,抽取与修改矩阵A的一些元素

解:A=[1 23 56;sin(3) 7 9;log(2) 6 1] ↙ %输入矩阵A。

A(2,3) ↙ %求矩阵A的第二行第三列元素。

A(4) ↙ %求矩阵A的第四个元素。

A(2:4) ↙ %取矩阵A的A(2),A(3),A(4)。

A(1,:) ↙ %取矩阵A的第一行。

A(:,3) %取矩阵A的第三列

a=A(1,3) ↙ %把矩阵A的第一行第三列元素赋值给变量a。

A(2,1)=100 ↙ %把矩阵A的第二行第一列元素修改为100。●矩阵的扩充

例10:已知矩阵

?

?

?

?

?

?

=

?

?

?

?

?

?

=

8

5

1

,

9

6

3

1

B

A

,利用A与B生成矩阵

13100

690

C

??

= ?

??,

()

D A B =,

A

AA

B

??

= ?

??。

解:A=[1,3;6,9]; %输入矩阵A

C= A↙

C(1,3)=100; %把矩阵A扩充为1行3列矩阵B=[1,5;0,8]; ↙ %输入矩阵B

D=[A,B] ↙ %由矩阵A与B合成矩阵D

AA=[A,zeros(2);zeros(2),B] ↙ %由矩阵A与B合成分块矩阵AA

●矩阵的部分删除

例11:已知矩阵,删除矩阵A的第一行。

解:A=[1 23 56;sin(3) 7 9;log(2) 6 1]; ↙

A(1,:)=[] ↙ %删除矩阵A的第一行

●矩阵的运算

A+B: 矩阵加法 A-B: 矩阵减法

A*B: 矩阵乘法 A\B: 矩阵的左除

A/B: 矩阵的右除 transpose(A)或A’:A的转置

A

k*:数k乘以A det(A): A的行列式:

rank(A):A的秩

七、数组

数组就是一行或者一列的矩阵,前边介绍的对矩阵输入、修改、保存都适用于数组,同时MATLAB 还提供了一些创建数组的特殊指令。

● 特殊数组的创建

linspace(a,b,n) 给出区间[a,b]的n 个等分点数据

logspace(a,b,n) 给出区间]10,10[b

a

的n 个等比点数据,公比为110b a

n --。

例12:linspace(0,1,6) ↙ %给出区间[0,1] 的6个等分点数据

logspace(0,1,6) ↙ %给出区间]10,10[1

的6个等比点数据

● 数组运算

除了作为1×n 矩阵应遵循矩阵的运算规则外,MATLAB 还为数组提供了一些特殊的运算: 乘法为:.* ,左除为:.\ ,右除为:./ ,乘幂为:.^

设数组[]n a a a ,,, 21=α,[]n b b b ,,, 21=β,则对应的运算具体为:

[]n n b a b a b a ,,,*. 2211=βα

[

]k

n

k k a a a k ,,,.^ 21=α

???

?

??=n n b a b a b a ,,,/. 2211βα

??

?

?

??=n n a b a b a b ,

,,\. 2

2

11

βα

例13:数组运算例题

a=1:5 ↙ %定义数组a b=3:2:11 ↙ %定义数组b

a.^2↙ %数组a 的每一个元素求平方

a.*b ↙ %数组a 的每一个元素乘以对应的数组b 的元素

例14:计算

sin(),2,1,0

2

k

k π

=±±的值。

解:x=-pi:pi/2:pi; ↙ %定义自变量x

y=sin(x) ↙ %求自变量x 的每一个元素对应的正弦值

八、M 文件

M 文件有两种形式:命令文件和函数文件。它们都是由若干MATLAB 语句或命令组成的文件。两种文件的扩展名都是.m 。若程序为命令文件,则程序执行完以后,中间变量仍予以保留;若程序为函数文件,则程序执行完以后,中间变量被全部删除。

● 文件的操作

在MATLAB 中新建M 文件的操作是在命令窗口中选择File|New|M-File ,然后用鼠标单击M-File ,就可以打开MATLAB 自带的M 文件编辑器。也可以对已经存在的M 文件进行编辑、存储、修改和读取。

● 命令文件

M 文件有两种运行方式:一是在命令窗口直接写文件名,按Enter 键; 二是在编辑窗口打开菜单Tools ,再单击Run 。M 文件保存的路径一定要在搜索路径上,否则M 文件不能运行。以下例题中如果不做特别说明,都是以第一种方式运行的。

例15:用M 命令文件画出衰减振荡曲线t

e

y t 3sin 3

-=及其它的包络线3

0t e

y -

=。

t 的取值范围是]4,0[π。

解: 1.打开M 文件编辑窗口; 2.在编辑窗口逐行写下列语句;

t=0:pi/50:4*pi; y0=exp(-t/3);

y=exp(-t/3).*sin(3*t);

plot(t,y,'-r',t,y0,':b',t,-y0,':b')

3.保存M 文件,并且保存在搜索路径上,文件名为a1.m;

4.运行M 文件。

● M 函数文件

M 函数文件的一般形式为:

function <因变量>=<函数名>(<自变量>)

M 函数文件可以有多个因变量和多个自变量,当有多个因变量时用[]括起来。

例16:设可逆方阵为A ,编写同时求 '

,,,1

2A A A A -的M 函数文件。

解:1.打开M 文件编辑窗口; 2.在编辑窗口逐行写下列语句;

function [da,a2,inva,traa]=comp4(x) %M 函数文件comp4.m 同时求矩阵x 的四个值 %da 为矩阵x 的行列式 %a2为矩阵x 的平方 %inva 为矩阵x 的逆矩阵 %traa 为矩阵x 的转置 da=det(x) a2=x^2 inva=inv(x) traa=x'

3. 保存M 函数文件,并且保存在搜索路径上,文件名为comp

4.m ; 4.命令窗口执行下列语句:

A=[1,2;5,8];↙ %输入矩阵A 。

comp4(A)↙ %调用comp4.m 函数计算矩阵A 的

'

,,,1

2

A A A A -。

九、程序设计语句

● for 循环

for i=范围表达式

可执行语句

end

例17:利用for循环求1 100的整数之和。

解:(1). 建立命令文件exam1.m。

%利用for循环求1~100的整数之和

sum=0;

for i=1:100

sum=sum+i;

end

sum

(2) 执行命令文件exam1.m。

exam1↙

例18:利用for循环找出100~200 之间的所有素数。

解: (1).建立命令文件exam2.m。

%利用for循环找出100~200 之间的所有素数

disp('100~200 之间的所有素数为:')

for m=100:200

k=fix(sqrt(m)); %求m的算术平方根然后取整. for i=2:k+1

if rem(m,i)==0 %求整数m与i的余数

break;

end

end

if i>=k+1

disp(int2str(m)) %以字符串的形式显示素数.

end

end

(2) 执行命令文件exam2.m。

while循环

while 逻辑表达式

循环体语句

end

例19:利用while循环来计算1!+2!+ +50!的值。

解: (1).建立命令文件exam3.m

%利用while循环来计算1!+2!+...+50!的值

sum=0;

i=1;

while i<51

prd=1;

j=1;

while j<=i

prd=prd*j;

j=j+1;

end

sum=sum+prd;

i=i+1;

end

disp(‘1!+2!+...+50!的和为:’)

sum

(2) 执行命令文件exam3.m

if-else-end分支

(1)if 逻辑表达式

执行语句

end

功能: 如果表达式的值为真,就执行语句,否则执行end后面的语句.

(2) if 逻辑表达式

执行语句1 else 执行语句2 end

功能:如果表达式的值为真,就执行语句1,否则执行语句2.

(3) if 逻辑表达式1

执行语句1 elseif 逻辑表达式2 执行语句2 else 语句n end

功能:如果表达式1的值为真,就执行语句1,然后跳出if 执行语句;否则判

断表达式2,如果表达式2的值为真,就执行语句2,然后跳出if 执行语句.否则依此类推,一直进行下去.如果所有的表达式的值都为假,就执行end 后面的语句.

例19:编一函数计算函数值:

???

??

?

?

>+≤<-≤≤-<=30ln sin 301011310

1121)(x x x x x x x x x x f

解: (1).建立M 函数文件yx.m 。

function y=yx(x)

if x<1 y=x

elseif x>=1 & x<=10 y=2*x-1

elseif x>10 & x<=30 y=3*x-11

else

y=sin(x)+log(x) end

(2).调用M 函数文件计算)10(),30(),2(),2.0( f f f f 。 result=[yx(0.2),yx(2),yx(30),yx(10*pi)]↙

switch-case-end 分支 s witch 表达式 case 常量表达式1 语句块1 case 常量表达式2 语句块2

case {常量表达式n ,常量表达式n+1,…} 语句块n

otherwise

语句块n+1

end

功能:switch 语句后面的表达式可以为任何类型;每个case 后面的常量表达式可以是多个,也可以是不同类型;与if 语句不同的是,各个case 和otherwise 语句出现的先后顺序不会影响程序运行的结果。

例20: 编一个转换成绩等级的函数文件,其中成绩等级转换标准为考试成绩分数在[90,100]分显示优秀;在[80,90)分显示良好;在[60,80)分显示及格;在[0,60)分显示不及格。 解:(1).建立M 函数文件ff.m function result=ff(x)

n=fix(x/10); switch n case {9,10} disp('优秀')

case 8

disp('良好')

case {6,7}

disp('及格')

otherwise

disp('不及格')

end

(2).调用M函数文件判断99分,56分,72分各属于哪个范围.。

ff(99) ↙ %优秀

ff(56) ↙ %不及格

ff(72) ↙ %及格

十、 Matlab绘图

1.plot(y)

功能:画一条或多条折线图。其中y是数值向量或数值矩阵。

说明:当y是数值向量时,plot(y)在坐标系中顺序的用直线段连接顶点(i,y(i))画出一条折线图;当y是数值矩阵时,Matlab为矩阵的每一列画出一条折线,绘图时,以矩阵y每列元素的相应行下标值为横坐标,以y的元素为纵坐标绘制的连线图。

例21:画出向量[1,3,2,9,0.5]折线图。

解: y=[1,3,2,9,0.5]; ↙

plot(y) ↙

2. plot(x,y)

功能:画一条或多条折线图。其中x可以是长度为n的数值向量或是n?m的数值矩阵,y 也可以是长度为n的数值向量或是n?m的数值矩阵。

说明:

当x ,y 都是长度为n的数值向量时,plot(x,y)在坐标系中顺序的用直线段连接顶点(x(i),y(i))画出一条折线图;

?当x 是长度为n的数值向量且y是n?m的数值矩阵时,plot(x,y)用向量x分别与矩阵y的每一列匹配, 在同一坐标系中绘出m条不同颜色的折线图;

?当x 和y都是n?m的数值矩阵时,plot(x,y)分别用矩阵x的第i列与矩阵y 的第i列匹配,在同一坐标系中绘出m条不同颜色的折线图。

注:plot(x,y)命令可以用来画通常的函数f(x)图形, 此时向量x常用命令x=a:h:b的形式获得f(x)函数在绘图区间[a,b]上的自变量点向量数据,对应的函数向量值取为y= f(x)。步长h可以任意选取,一般,步长越小,曲线越光滑,但是步长太小,会增加计算量,运算速度要降低。通常步长h取为0.1可以达到较好的绘图效果。如果想在图形中标出网格线,用命令:plot(x,y),grid on即可。

例22:画出函数y = sin x2在-5 ≤ x ≤ 5 的图形。

解: x=-5:.1:5;↙%取绘图横坐标向量点x

y=sin(x.^2); ↙

plot(x,y), grid on↙

例23:画出椭圆

1

2

52

2

2

2

=

+

y

x

的曲线图。

解: 对于这种情形,首先把它写成参数方程

)

2

0(

sin

2

cos

5

π

?

?

?

=

=

t

t

y

t

x

t=0:pi/50:2*pi; ↙

x=5*cos(t); ↙

y=2*sin(t); ↙

plot(x,y) ,grid on

3. plot(x1,y1,x2,y2,x3,y3…)

功能:在同一图形窗口画出多条不同颜色曲线,曲线关系为:

.

),

3

(

3

),

2

(

2

),

1

(

1

x

f

y

x

f

y

x

f

y=

=

=。

例24:在同一图形窗口画出三个函数y = cos 2x ,y = x 2 ,y = x的图形。解: x=-2:.1:2; ↙

plot(x,cos(2*x),x,x.^2,x,x) ↙

legend('cos(2x)','x^2','x') ↙

4.ezplot(F,[xmin,xmax])

功能: 画出符号函数F在区间[xmin,xmax]内的图像

说明: F是只含有一个变量的函数。如果区间[xmin,xmax]缺省,默认区间为[-2pi,2pi]

例25:绘制

t

e

y

t

2

3

cos

3

2

2

-

=

在]

*

4,0[pi间的图形。

解ezplot('2/3*exp(-t/2)*cos(3/2*t)',[0,4*pi]) ↙

5.二维特殊图形

除了plot指令外,Matlab还提供了许多其它的二维绘图指令,这些指令大大扩充了Matlab的曲线作图指令,可以满足用户的不同需要。

表2.4绘制二维图形的指令

例26:练习指令bar,stairs,pie,pie3,stem,area.

解: x=1:5;

subplot(2,3,1),bar(x),title('直方图')↙ subplot(2,3,2),stairs(x),title('阶梯图')↙ subplot(2,3,3),stem(x,'rp'),title('火柴棍图')↙ subplot(2,3,4),pie(x),title('饼图')↙ subplot(2,3,5),pie3(x),title('三维饼图')↙ subplot(2,3,6),area(x),title('面积图')↙

6.三维网格命令mesh

由函数meshgrid 生成格点矩阵后,就可以求出各格点对应的函数值,然后利用三维网格命令mesh 与三维表面命令surf 画出空间曲面。函数mesh 用来生成函数的网格曲面。函数mesh 有如下三种形式:

mesh(X,Y,Z) X,Y,Z 是同维数的矩阵 mesh(x,y,Z) x,y 是向量,而Z 是矩阵。

等价于??

?=),,(),(],[Z Y X mesh y x meshgrid Y X

mesh(Z) 若提供参数x,y,等价于mesh(x,y,Z),

否则默认x=1:n,y=1:m,其中n m Z ?

例27:画出函数)sin sin(y x z +=在-3 ≤ x ,y ≤ 3及2

22y x z -=在-10 ≤ x,y ≤ 10

上的图形。

解: (1)建立命令文件me.m

%函数 z=sin(x+siny) t1=-3:.1:3;

[x1,y1]=meshgrid(t1); %生成格点矩阵 z1=sin(x1+sin(y1)); %计算格点处的函数值 subplot(1,2,1),mesh(x1,y1,z1),title('sin(x+siny)') %马鞍面z=x^2-2y^2 t2=-10:.3:10;

[x2,y2]=meshgrid(t2);z2=x2.^2-2*y2.^2;

subplot(1,2,2),mesh(x2,y2,z2),title('马鞍面')

(2)执行命令文件me.m

数学实验课程公共邮箱帐号:publicmatlab@https://www.docsj.com/doc/2a6714774.html,密码:matlab

轮廓线提取

一.实验背景

图像理解是图像处理的一个重要分支,研究为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。边缘检测实际上就是检测图像特征发生变化的位置。在图像的众多处理手段中,有一项功能为图像轮廓线提取(抽取),一定程度上类似于边缘检测。它指的是从原始图像中,以手动或自动的方法,将图片中的人物、动物、植物或者其他任何对象的(特征)轮廓线提取出来,使之成为一幅独立的黑白线条图。提取轮廓线被应用于许多方面,例如人脸检测和跟踪。它结合了认知科学、图象处理、计算机图形学、机器视觉和模式识别等多个研究领域。人脸识别技术应用背景广泛,例如:可用于公安系统的罪犯身份识别、驾驶执照及护照等与实际持证人的核对、银行及海关的监控系统及自动门卫系统等。特别是在非接触环境和不惊动被检测人的情况下,人脸识别技术的优越性远远超过已有的虹膜、指纹等检测方法。

又如媒体上对照片轮廓的提取,将拍摄下来的建筑物群,风景图片等提取轮廓,转化为黑白背景图,进而进行下一步的处理工作。这种方式可以节省大量的人工处理时间,得到的轮廓快速、相对准确。传统的方法有追踪法,也叫跟踪法。在跟踪过程中通过一个反复迭代循环的过程,不断扰动外形参数中的平移量,旋转角度,缩放比例,直至形状变不大,可认为此时的形状即所要搜索的图像形状。它的弊端在于它是一个全局模板,没有局部信息,当某个局部信息跟踪出现错误的时候(如轮廓线不清晰,出现间断),这个错误会分布到整个模板,影响到其他部位的跟踪的精度。如果设计一个通用的算法方便地实现上壕功能,并且能够应用于所有的图片,无疑是非常重要的,本实验就试图做到这一点。

二、实验方法

1.基本知识介绍

我们采用数学工具软件Matlab来实现我们的算法设计。Matlab出自于MATrix LABoratory,原意为矩阵实验室,最开始是专门用于矩阵计算的软件。随着MATLAB推向市场,MA TLAB不仅具有了数值计算能力,而且具有了数据图示功能。它自产生之日起就以其强大的功能和开放性好而在数值计算诸软件中独占鳌头。随着MA TLAB版本的逐步升级,它的工具箱从简单的点、线、面处理发展到了集各种功能的二维图形、三维图形甚至四维表现图和对图形进行着色、消隐、光线、渲染及多视角处理等多项功能于一身的强大功能包。

用Matlab进行图像的轮廓线处理,正是利用了其强大的矩阵运算功能,将一般图像处理的功能化为对数学矩阵的运算、变换处理,放大其隐含的象素信息,从全新的角度研究提取轮廓线的方法。

要利用计算机对数字化图像进行处理,首先要对图像的文件格式要有清楚的认识,因为自然界的图像以模拟信号的形式存在,在用计算机进行处理以前,首先要数字化。计算机中比较常用的图片有BMP格式、JPEG格式、GIF格式等等。我们首先对图像作一个简单的分类。除了最简单的图像外,所有的图像都有颜色。

二值图:单色图像则是带有颜色的图像中比较简单的格式,它一般由黑色区域和白色区域组成,可以用一个比特表示一个像素,“1”表示黑色,“0”表示白色,当然也可以倒过来表示,这种图像称之为二值图像。

灰度图:我们也可以用8个比特(一个字节)表示一个像素,相当于把黑和白等分为256个级别,“0”表示为黑,“255”表示为白,该字节的数值表示相应像素值的灰度值或亮度值,数值越接近“0”,对应像素点越黑,相反,则对应像素点越白,此种图像我们一般称之为灰度图像。单色图像和灰度图像又统称为黑白图像。

彩色图:与黑白图像对应,就存在着彩色图像,这种图像要复杂一些,表示图像时,常用的图像彩色模式有RGB模式、CMYK模式和HIS模式,一般情况下我们只使用RGB模式,R对应红色,G对应绿色,B对应蓝色,它们统称为三基色,这三中色彩的不同搭配,就可以搭配成各种现实中的色彩,此时彩色图像的每一个像素都需要3个样本组成的一组数据表示,其中每个样本用于表示该像素的一个基本颜色。基于三刺激理论(Tristimulus Theory),我们的眼睛通过三种可见光对视网膜的锥状细胞的刺激来感受颜色。这些光的波长为630nm(红色)、530nm(绿色)和450nm(蓝色)时的刺激达到高峰。通过光源中的强度比较,我们感受到光的颜色。这种视觉理论是使用三种颜色基色:红、绿和蓝在视频监视器上显示彩色的基础,称为RGB颜色模型。以一个常见的例子来说明:Windows环境下主要的图像格式之一,BMP灰度图像,以其格式简单,适应性强而倍受欢迎。这种文件格式就是每一个像素用8bit表示,显示出来的图像是黑白效果,最黑的像素的灰度(也叫作亮度)值为“0”,最白的像素的灰度值为“255”,整个图像各个像素的灰度值随机的分布在“0”到“255”的区间中,越黑的像素,其灰度值越接近于“0”,越白(既越亮)的像素,其灰度值

越接近于“255”;与此对应的是在该文件类型中的颜色表项的各个RGB分量值是相等的,并且颜色表项的数目是256个。每一个象素颜色由其红、绿、蓝三色的强度值联合决定。常见的颜色值如下:

相关文档