EDA365电子论坛网

标题: Matlab的colormap函数详解(多个colormap) [打印本页]

作者: piday123    时间: 2020-7-31 14:22
标题: Matlab的colormap函数详解(多个colormap)
我们有一张图片,读进来后,转换为gray,然后打算画两张图,一张用gray的色图,一张用jet的色图。! o- C2 x9 M8 M7 B
首先我们读取图片:
. v8 r( {5 J. ]  X0 g6 t( xclear all;
% C& j' H9 h2 t0 Vclose all;2 Z2 B! J8 A' N4 M5 _5 W2 ]0 r+ k
clc;$ V: V: i  K& k* h
%%
5 W6 h: A+ H6 i7 M3 Zimgname='.\frog.bmp';: @, l: ?& v& X: x  t/ k
[imagRGB]     = imread( imgname );1 f5 ~0 @! w& R$ Y( n( x, m4 {
4 ?, M; w# b5 r; i" J& L
if (length(size(imagRGB)) > 2)6 S/ C$ [: k7 q3 W
    imagGray = rgb2gray(imagRGB);
9 }; q: G% W( [3 S* V1 nelse  }2 g3 G+ i* k9 o  X7 V; v
    imagGray = imagRGB;2 c5 o4 K" x( n- `8 J, R
end6 e9 g. b2 J# ^# ^. i' P
clear('imagRGB');
6 Z4 z, L0 a! p( Qdata =  double(imagGray);
. a% p; C/ A+ N! y4 R$ C! ]/ H# fdata =flipdim(data,1);  
( ?. j& Z% O4 ?   % Flip linear dimensions (image coordinate system starts at upper left
. `! {3 @6 N2 F$ f0 K2 q2 [   % corner ); I  B3 w' K/ L

! A6 u2 t; |: `( V4 p3 P5 S4 |2 j: ^: O* _8 J3 ]
方法1: 我们生成两个figure,分开画两个图6 E. T7 C5 k6 ~1 x$ q& p, ~# O' `5 \, |
fig1=figure;) w4 r  ^' `- ?! q9 [
plotHandles(1) = pcolor( data );
! H+ s$ \5 w0 Aset( plotHandles(1) , 'EdgeColor' , 'none');
* G. ]7 t0 [# |3 ]1 N; Ycaxis([0,255]);
" `* P1 C9 Y+ p  `5 J$ mcolormap gray;
: `# d( a- `5 F2 b: {/ Z7 o 0 O' x5 c9 y% A- S
fig2=figure;
& Y' u0 z. ]' m' QplotHandles(1) = pcolor( data );: E# R6 L, _5 Q
set( plotHandles(1) , 'EdgeColor' , 'none');+ o4 [- x3 t( T+ E; j
caxis([0,255])
' G  d/ y2 s/ U4 R3 Ycolormap jet;; l/ g0 V4 p. m; T/ B

: v0 D# V- I: |" l( M( I- V
. t* N; J/ H0 ?' n; H+ A
$ I( m4 _3 z* o& [/ d( U$ _结果如下:1 e+ G( L. P0 o" J& {

0 d: f  t0 v0 i- X* r6 Z注意:这是两个figure,每个figure可以使用一个唯一的colormap6 W: q# N- |" U1 \! `- o" S, K
. ~. i1 W. V0 |. [) j5 @
: E: I; D0 @: v$ L% s% `9 f7 ~
方法二: 一个figure,subplot
2 f$ A; a0 }' k7 R2 _fig3=figure;
4 F0 [- E5 z, D5 p0 u( {% f
8 w8 d; L% |. U7 Z3 ?! asubplot(1,2,1);9 z9 O: F/ [0 E
plotHandles(1) = pcolor( data );2 G% R# [9 i  T. P
set( plotHandles(1) , 'EdgeColor' , 'none');
4 a5 ~( v4 E; \caxis([0,255]);
/ }& p2 ?# t% M2 T, Z1 [( Z. q  ]colormap gray;, e$ J3 H, G+ D$ w6 M

2 p6 j9 _/ Q! \0 E6 Q4 P1 u8 @6 W+ }subplot(1,2,2);
8 M" v: [& q9 FplotHandles(1) = pcolor( data );) o9 k$ J7 W* ~+ o7 e9 J
set( plotHandles(1) , 'EdgeColor' , 'none');
1 y  _7 a! j9 l5 E0 O0 s! acaxis([0,255])- @* i) G' `! r, B1 P
colormap jet;
8 s' x. Q2 h, B6 P: u! H! b- `) h; B* r  b1 r8 o
1 Y) x/ e, t; X
结果如何呢?4 [% f  u/ N% y8 x; |
9 Y% n. f9 H# G9 s

1 o( M6 V$ m9 t: q  W; a: H * n- P+ L$ `3 E
后面定义的colormap会把前面的覆盖掉。因此最终两张图片都使用了jet的色图。
" \2 M# M1 H5 N; o( \
  A  j0 e* ], }( P; M方法三: 既然只能使用一个colormap,那么我们就自己动手组装我们需要的色图
4 v: X/ R/ h% j/ K9 Aoptions.colormaps{1}.offset     = 0;& k" X2 L* X/ |$ a2 D# h: I: |
options.colormaps{1}.num        = 256;  % Number of colors$ {  u; H. p; P2 u+ r
options.colormaps{1}.cmin       = 0    + options.colormaps{1}.offset;
* M' {" d0 A/ n& A& V1 ?1 Moptions.colormaps{1}.cmax       = 255  + options.colormaps{1}.offset;
2 [* ?. g; ~1 O2 N& f. ^options.colormaps{1}.map        = gray(256);
0 A9 r4 B  ^8 `) |8 D7 B# F" h' i2 A& a4 J7 }
options.colormaps{2}.offset     = 256;4 _! w- L: A& K+ a* F# y6 f
options.colormaps{2}.num        = 256;  % Number of colors% |$ x! v+ L; R' R8 k4 L4 ~0 M
options.colormaps{2}.cmin       = 0    + options.colormaps{1}.offset;  M! D& h" U8 ^/ `& h
options.colormaps{2}.cmax       = 255  + options.colormaps{1}.offset;
5 G& _5 V- P8 s4 N! S+ r) o5 ^5 woptions.colormaps{2}.map        = jet(256);" D  ?4 o1 X% p9 l- p

; k  Y: Z  y1 k0 U: pfor iCMap = 1 : length(options.colormaps). I, N" Q, D4 w* J2 F" s) J& z3 G
    if iCMap == 1
6 }9 z& x0 b% x) {$ Z        cmap = options.colormaps{iCMap}.map;9 p0 c/ z+ i1 f! G
    else
: ^& K' o  |  X# C9 r% ]        cmap = [cmap ; options.colormaps{iCMap}.map ];
: X( L2 s4 r; m" \+ l    end
8 }- p0 e; Y+ M) a: e2 B# f. R  X0 uend9 ^  W( k! s+ @6 F5 [0 j* A4 k

, C7 b/ M4 N2 u; A# R& M% {0 P& G5 z+ V( R6 D6 [* t" b
我们定义了两个色图,然后把两个色图拼装起来。
! N: G. {% S- |5 c8 h$ ^- l) W
  P- ^$ V$ r2 u8 Q" Rfig4 = figure;
% f. n2 o  R( c! Q# P9 `5 Lcolormap(cmap);, {3 W$ [. U5 x4 D- n; ?; ?
+ R/ @1 S" @# }5 d( y0 A2 q1 Y
subplot(1,2,1);1 q8 C: r+ N! M7 }5 R, P& L! I
data1 = data +options.colormaps{1}.offset;# u) e" m8 S1 ?! p+ j# p
plotHandles(1) = pcolor( data1 );
6 }# e/ l( j( j* X) ~set( plotHandles(1) , 'EdgeColor' , 'none');
# P( N- N' E+ N" ^3 ncaxis([0 , size(cmap,1) - 1]);
* [$ K2 t- |( F! n! ^
2 |/ X' X. {$ x6 T3 r4 T( Z- ^8 I# F4 `7 x8 q% Z6 ~
subplot(1,2,2);& K. L3 S5 f7 F; F7 L! j; o
data2 = data + options.colormaps{2}.offset;" ?2 @: ]2 I; Y% N3 @
plotHandles(2) = pcolor( data2 );; L- s# e3 `' F, l2 _

! x6 R( G; @$ y' i4 ?4 @/ a& Aset( plotHandles(2) , 'EdgeColor' , 'none');
$ q# z( V0 t4 \7 e% V9 Q# W" Ncaxis([0 , size(cmap,1) - 1]);
, o9 c( c; v! V' p# [' s* G' ~& F& X
" j* u1 Z5 _; p0 O% T
5 N# p2 j- y+ R2 ]/ p$ Q4 S结果如下:
) ~" ~* G" G7 i( s/ v% [# M
6 L9 `! g8 k8 [& p! u
. f& K3 M7 [* r( P0 Y. V实际上我们只有一个colormap,但达到了多个colormap的效果。# a# q2 V. i7 b
) E) p: T9 r6 d: o' j

作者: SsaaM7    时间: 2020-7-31 15:04
Matlab的colormap函数详解(多个colormap)




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2