2 V7 O ~# l6 B" Y* i- Z" r& g数字图像在计算机中以矩阵形式存储,通过一个或多个数字表示每个点的数值大小来控制每个像素点的颜色变化。常见的存储类型有灰度图像、RGB图像、二值图像、HSI图像等等。在这里我们着重介绍灰度图像与RGB图像。2 {2 e4 y% x! M2 O+ o8 {. ], H
0 w) \6 U/ X$ c1 s) i& m$ b6 E
灰度图像,顾名思义,是一种单色图像,只有纯白、纯黑、和254个不同深度大小的介于纯白、纯黑之间的灰色强度。对于灰度图,每个像素的亮度由且仅由一个数值来表示,通常数值范围在0到255之间,0表示黑、255表示白,其它值表示处于黑白之间的灰度,数字越小就越白。由于灰度图的存储方式易于理解,比较简单且涵盖了较多的图像信息,在不需要彩色信息时我们常将图像转化为灰度图像进行进一步操作。 {$ J# n$ f* }' P
3 [* D+ p( }! D0 D# ^0 f* q5 P
二值图像,可以作为一种特殊的灰度图像来理解。他只有纯黑和纯白两种颜色,在计算机中每个像素点只有0、1两种取值可能。其中0表示黑色,1表示白色。 3 r3 M, ~+ `# N' d3 E) J
7 S0 I% l5 g+ ~ x
在中学学习美术时,我们都知道红、黄、蓝是三原色。通过这三个颜色的颜料画在一起叠加即可组合成任意一种颜色。在计算机里,也类似,但三原色不再是红、黄、蓝,而是红(R)、绿(G)、蓝(B)。在计算机里通过控制这三个颜色的量组合在一起,也可以合成任意一种颜色,于是就有了RGB图。RGB图像里,每个像素点由三个数值控制颜色,分别对应红、绿、蓝的分量大小。范围一般也为0~255之间,0表示这个颜色分量没有,255表示这个颜色分量取到最大值。例如:某RGB图中一个像素点的红、绿、蓝分量均为255,则根据光学叠加的理论可知,该点为纯白色。 8 x! \: P4 H _8 Z) C0 r0 _& D
1 M) [9 G5 J3 @2 {& `6 F6 H7 o oHIS图像每个像素点由色调、饱和度、亮度决定。相比较之下,在数学建模类题目里并不常用。 $ H4 C2 {8 n' @, f; i8 @1 I. D: y! K( ]$ @% V; k: v
相关实例与代码:* v) M7 ^3 n3 D% F
& v/ U: ]4 Z: [8 G8 v: d
(1)假设matlab中有一张RGB图像存放于变量pic中,将其转化灰度图像。 8 N3 L& F/ D2 s! n1 @& T5 U9 X' w1 J% r/ f. N, T. {" _5 h% j
newPic= rgb2gray('pic')" C2 \' A3 F! i4 t) v9 y
1 % ~, S& l* C- y8 I: t注:rgb2gray函数中的2,按照英文读作two,与to同音。这个函数读为rgb to gray,同理,其他图像存储类型转化函数也类似此函数。 ( ?! O8 |) T3 ^' H8 ?, g4 r x 6 \/ L) G: Q* S$ U9 [/ A5 d: C4 D(2)生成一幅128*128的RGB图像,该图像左上角为红色、右上角为蓝色、左下角为绿色,右下角为白色。 & i- M6 ~' l5 i9 @% X( n) U( C: S4 k
代码:. o' K. I9 {' r* X
2 @1 W' A! _( `; e* {% q' N( Z
clear;clc; Q2 I6 c. Q1 e/ Q8 ]! W$ \picRed=zeros(128,128); %初始化RGB红色分量为0矩阵 - k( R- A* j& P) ipicRed(1:64,1:64)=1; 7 J& T# ?% Y/ K4 s' v% W+ r4 n# VpicRed(65:128,65:128)=1; %令左上角、右下角的红色分量值为1 9 {5 Y* S/ a I* dpicGreen=zeros(128,128); %初始化RGB绿色分量为0矩阵 ( m4 g) G6 C5 V# ~' |3 npicGreen(65:128,1:64)=1;# }+ V/ E. s0 i* M, d0 n5 E
picGreen(65:128,65:128)=1; %令左上角、右下角的绿色分量值为1. S0 l" ^, S# l, S& y
picBlue=zeros(128,128); %初始化RGB蓝色分量为0矩阵 7 y; W K/ _4 t6 S8 o/ n6 h! ypicBlue(1:64,65:128)=1; , _3 U; j- o! J5 ?picBlue(65:128,65:128)=1; %令左上角、右下角的蓝色分量值为1/ W1 M# e* p8 {! b, z) ` J! x! [
pic=cat(3,picRed,picGreen,picBlue); %合成RGB分量3 }8 s) [6 ~! |" e
imshow(pic);title('生成图像'); %显示图像# [. |6 P( n2 B) ?
1 , g8 g. \ T Z! I% f& g$ A2 & r, B$ }% B5 R0 u! D$ V37 b5 I( {7 N, h8 x+ \/ h
4 : l0 N0 L( s! L" P* b5/ d) g2 O! r& ]' s0 ?
6 & O. H" H3 k3 E/ t6 M9 L. r j E7 4 Z/ t4 Z! G2 i A' X5 f# a8$ ^. Q0 q0 s, K0 k
9 E" v/ w0 d3 F/ J2 \! L( D10. W3 M* N0 e F% g1 x3 u
110 y! ~* q& ]% ~2 ?7 X) n( Y
12 7 \! z6 G# X% Q5 [: x0 k结果: 9 q3 ^2 `9 G( F* ~! {8 E6 S, n \$ m : h9 C; Y% V" a, L4 i& _( ^$ r分析: + R3 m+ b$ t2 s3 \ j% v! `RGB图像存在红,绿,蓝三个颜色的通道。每个像素点由这三个通道的强度合成决定颜色。根据光学理论,当红色分量为255,其他分量为0时,呈现出红色;当绿色分量为255,其他分量为0时,呈现出绿色;当蓝色分量为255,其他分量为0时,呈现出蓝色。当三通道的颜色分量全为255时,显示出的颜色变为白色。同理,当三通道分量全为0时会显示黑色。" B2 j. f% v" L3 F5 ^5 V8 \
4 n2 r! ^7 u! X3 o c" C二、数字图像的读取与显示。- Q% z( A5 Y8 l2 u* _' g" C3 W
$ O3 A3 Q$ }3 f& n
(1)图像读取——imread : {& Y# P2 L3 ^4 |/ Y5 o* b K# N& I1 D" N5 B% g
Matlab自带参考文档里imread的用法介绍: % b2 g. E7 [/ w- G $ E( d' |' l& @+ R' `, J U3 ^: S8 Himread - Read image from graphics file # ?" h. p7 i2 M6 f & a# ^+ c' d$ u+ w This MATLAB function reads a grayscale or color image from the file specified by 9 v' ~# n& j: l0 k: Z the string filename.* O) G$ C6 p; R9 q3 z
/ i3 N3 H) X3 M5 o: o A = imread(filename, fmt) , }" I% l7 E! {7 ]0 M [X, map] = imread(...) ) g7 ]& S/ ^9 v0 H- c [...] = imread(filename)# Z9 _# ]2 J0 ^+ V5 t2 I+ u
[...] = imread(URL,...) 8 ^9 K) k& e: I+ x [...] = imread(...,Param1,Val1,Param2,Val2...)- u4 l% o( m" ?% c& B' f
1' F+ ]! K7 r8 x; E+ o, B5 c
2 & x$ [! H. J0 h9 d3 % L: r- G. L# F F4 + K% A, ]" z1 ^+ `! W5 A5 : H$ x8 P$ B3 S! \2 F6 8 p0 v, N) [; r8 l X9 e1 a8 u7" {! J* @( I' l. R( x3 Y! c, z% p
8 & R8 a8 G% w: r9 2 l! M! `; }$ p' I2 F10 7 w& ]' }+ ^9 U, a: [以其中一个常用的用法为例: ; Z! |% U, r/ F: `* r, E3 O" }0 w: q% K. a6 k0 z
[...] = imread(filename)4 A7 B3 ^+ g& k- f, k! Q
1$ g1 z( O7 U3 s y" Q# Z
其中filename为待读取图像文件名。若该图像不在matlab默认路径下并不与当前运行.m文件同目录时,需要手动添加路径名。 , ?: O' _3 ?3 y# ?# Y! l! z2 }* T6 s9 x4 D2 ~, C
实例:1 ^5 I7 J% y% Z! e" Q! H# E/ u
0 f `, n# h, f3 V. e# j>> pic=imread('E:\1.jpg') 2 } d1 ^- \5 E0 p& ^5 ~1( O! v5 t# d/ i# e
该代码将E盘下的1.jpg文件读入了matlab,用变量pic存储。) E( |$ O8 l* Y' Y; V