5 C, h3 D1 V0 r/ T9 r$ b- J2 u) ` This MATLAB function displays the image I in a Handle Graphics figure, where I, |3 [6 b$ T" Q1 }: q" N
is a grayscale, RGB (truecolor), or binary image.! @+ N- J, t! f; P9 r6 x
m; _. C' s0 o8 \ imshow(I) ( a1 g7 Y4 E) T# {5 q7 y1 L1 k imshow(I,RI)3 s! u5 f: c, |2 Z
imshow(X,map) 8 D3 N. @, k( T0 C; _8 Z, G3 {$ g imshow(X,RX,map)* m4 {. j9 r4 m! w1 N
imshow(filename)4 s4 R1 T6 h% K: p
imshow(___,Name,Value...)" e7 ?+ ?' H: S# C
imshow(gpuarrayIM,___) ! P- N, T4 s) O4 m( q: Y imshow(I,[low high]) 1 N$ a! Z; i+ @0 s5 O2 ^8 b8 Ihimage = imshow(___)( A; W1 I( {& H8 h( p
10 Q) {5 B) u2 I2 v2 v
2/ t. \; }$ S' R3 `$ `$ v" y6 U
3 ' x, R! w; K1 j/ W4% k% ]: g- t' ] B; c8 O
5 7 W5 j5 d# ~5 X/ i6 3 s5 x$ F3 l6 Z- r1 V7 4 h1 e9 ]. P( |89 _0 M. l/ P- F \. I; Q u% H. e
95 k# A6 }1 j3 P9 |+ x, l* r+ _( U
104 z; l% H8 G* J4 J8 M5 q
11 3 f& {" F6 U T; t; z+ Q126 u* M) B$ ]( I7 x" O9 v0 q) G( a
13 * |2 a; Y3 @. V4 {14 5 {% C6 }' l; d* f% i以其中一个常用的用法举例: + d4 Y# {8 R: \. x% l) j5 t, ^; ~& P) v( |! \. W! x2 P- M
imshow(I)* ~: H, [4 q, k' Y8 Q/ [3 k1 l4 Q
1 1 Y2 o+ b3 w8 L- x G4 I/ r5 Z1 q其中,I为一个矩阵。该函数将把该矩阵所代表的图像显示出来。 [2 i( x2 b% F* x& N- R
( [' E# j c, \5 }注:并不是只有读取的图片所生成的变量才可以显示出图像,一般而言自己创建的、符合要求的矩阵均可通过该函数显示出其代表的图像。 9 E& C5 T% w H4 I* Z1 Y9 p7 {: L1 Z: j: f
(3)批量获取图像2 }' F) W1 W3 _, |1 T
9 y. ]& |& ~3 O( n3 L
在做题的时候,有时会需要读取一个文件夹里的所有图像。输入几十行imread的确是一种方法,不过非常低级。此时应使用批量读取图像的方法。 & f: D2 V" c% v. d# v1 T ) x: m. ]. n* y& }1 g首先需学习dir函数,可以通过它获取当前文件夹下的文件名等信息。在此列出其几个常用用法: : [9 t1 g0 W+ h* {& v: u, R8 T: S2 q5 e! |* R' D# k( d
filepath=dir('.') %列出当前目录下所有子文件夹和文件& U% q4 L5 e: ~" ~7 T1 m6 }
filepath=dir('E:\matlab') %列出指定目录下所有子文件夹和文件4 G8 P" O0 N( l6 t+ u' e
filepath=dir('*.m') %列出当前目录下符合正则表达式的文件夹和文件% R% Y9 ~* C) Y' L) P0 j' H, A- M/ w
1. s2 F' Y: S% ?
2 4 ?1 [0 r/ |: F- I39 G6 n# q$ J& U g' T6 k
变量filepath用于存放dir函数返回的文件信息。filepath变量不再是一个单纯的数值矩阵,而是一个面向对象的对象矩阵。每个对象包含name、date、bytes等属性。可通过filepath.name调用文件名。+ n7 S% T' @' A
' N9 A! s) |+ g9 x, m3 Y: }3 P
有关正则表达式的知识在此不详细叙述,上述dir函数第三个用法中的正则表达式*.m表示所有文件名以.m结尾的文件。3 L v( E& z. S! Q% K
9 q2 H, U: @' I. q
以本校2017年新锐赛题目为例,将文件夹中20个图像统一格式、分别命名为1.jpeg~20.jpeg后,可用如下代码读取:8 g0 \3 n: T! `, S! s! |6 W
7 j c. u; t1 e2 I }5 w) Y
for i=1:20 # P) F; j7 x$ H6 p# L6 |) z# O imageName=strcat('附件1:英文纵切\',num2str(i-1),'.jpeg'); 0 N9 n( X5 t8 i pic(:,:,i)=rgb2gray(imread(imageName));! j- G, V' H# ?- V+ Q( A3 R6 E& A) x
end; l: S0 E# q- a7 d& v' b
1 4 b8 n/ j7 I7 d% _' B1 }5 G- G2 ; e- U u+ ]9 e38 m1 c, |3 H8 b0 D
49 |' X0 B, \0 v+ n
此代码读取了文件夹中的20个数字图像文件并将其转化成了灰度图像存储于三维变量pic中。最高维数字代表第几张图。 - v2 H" }7 z) V7 N# c0 b, @ {8 D& F' Q& Z
若不事先手动统一名称,可用如下代码读取: ( T2 s* `+ i: X; Y1 r( B ' a0 U: _- U4 s) F' K5 P$ cfilepath=dir(‘*.jpeg’); & m& P( T& [4 I. }
for i=1:size(filepath) & K9 Q, O8 r. I# K# a5 i! X; s6 m
filename=strcat('附件1:英文纵切\’,filepath(i).name); ) f' o! {5 P5 g3 U- i. V" a8 [$ j4 z
pic(:,:,i)=rgb2gray(imread(filename));! d/ T) w5 Q1 o, X( f
end ( O4 y" P8 _. H1 a( E# j" `14 u; n: ]& `) q) U
2: L' y/ _: n# ~8 s
3 5 `5 h' L" ^* a, D% W! O7 w4/ L2 E1 w5 q( f. g$ m# H
51 l0 p, G7 [+ x9 t+ E$ B8 C) `, e
三、数字图像基础操作。& J- |6 @1 U1 V3 k F; ~