找回密码
 注册
8月份电巢直播计划
查看: 28|回复: 1

Matlab的colormap函数详解(多个colormap)

[复制链接]

该用户从未签到

发表于 2020-7-31 14:22 | 显示全部楼层 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
我们有一张图片,读进来后,转换为gray,然后打算画两张图,一张用gray的色图,一张用jet的色图。
8 m: @6 e+ ~0 i首先我们读取图片:
0 f, ]4 ?# z8 L- D" Tclear all;
( c; t- I' H% N! I& X+ Iclose all;- j! o: w2 V' E& H8 {( S
clc;/ ?' \# H9 O% ^6 |2 z& ^
%%. N9 `3 N( C' G$ N8 E/ }9 z) s3 V
imgname='.\frog.bmp';5 z2 A6 K7 g7 |' e
[imagRGB]     = imread( imgname );
( L4 Y1 X& r0 x9 Z, V4 P
5 L. @+ s4 [6 y* m9 Vif (length(size(imagRGB)) > 2)1 X$ X' I8 D9 R' _
    imagGray = rgb2gray(imagRGB);5 p+ S6 z7 b7 `+ o
else
9 {" q3 q: s* n" \7 G  x; n6 ^6 [6 e    imagGray = imagRGB;
5 t. s- B9 Y6 k( o0 l2 X8 nend5 d; ^! M1 x* \2 {% K
clear('imagRGB');
# r. i4 Q* E: `& l9 ydata =  double(imagGray);: @+ D: T3 I5 o, M
data =flipdim(data,1);  + w7 G' T' K$ u) n. g
   % Flip linear dimensions (image coordinate system starts at upper left: n- F0 p. P! h) K4 u$ r
   % corner )" C" L9 x: B# C3 X& [- G5 b& T

7 r5 `7 \4 D7 Y2 T
5 \/ P, l5 t4 i, J0 x2 h6 V8 m4 k方法1: 我们生成两个figure,分开画两个图
4 f; ]  \, y$ \" t* S6 k, Rfig1=figure;% s3 z- z- [4 ^& z/ s( H
plotHandles(1) = pcolor( data );
1 ?5 _  U6 z7 N  H+ Jset( plotHandles(1) , 'EdgeColor' , 'none');( F# f4 R5 c, i- @* ]
caxis([0,255]);
% I' j: H! R) Ecolormap gray;
  K- a# r1 I( s) ~4 f
! |- C3 B$ b2 ]fig2=figure;; ?/ H! F+ u. y' }$ f2 f* V3 D! x
plotHandles(1) = pcolor( data );3 R3 C7 J; J3 }* c
set( plotHandles(1) , 'EdgeColor' , 'none');  O1 N' K0 u3 z6 p# N$ ^- l1 T
caxis([0,255])4 }% w% U' x5 \
colormap jet;- O* i8 _: \) g

! C# M& i( j) H7 ]/ M& Y. W0 d( _
2 h/ }: `- C+ j1 {8 `+ E. G' [6 W9 S% ?3 m1 g; A
结果如下:
1 r1 B& I/ a" |  x 7.jpg
2 ?  r% k/ m: p1 X+ Q注意:这是两个figure,每个figure可以使用一个唯一的colormap
5 k( A+ z5 k# X: E- l1 x: g1 o& `5 T) o$ z/ W" {2 C

, o. Z0 H) y9 L! j方法二: 一个figure,subplot' c0 E. _8 R' k
fig3=figure;
! G& `0 g! W6 K2 q! h3 Q# H( \8 X; _, ?1 N0 |! g
subplot(1,2,1);+ Q; s; T4 j, m- r
plotHandles(1) = pcolor( data );# c1 _2 l/ ~% |# D3 a( K7 \& @
set( plotHandles(1) , 'EdgeColor' , 'none');( F, A, \; M) z# M0 {: {
caxis([0,255]);
4 \  B3 z: D% J) _colormap gray;
' M7 o: d/ U1 h# w) J' E - ~) J. e; c5 {: @4 y4 M
subplot(1,2,2);
4 u/ U/ g. E( p, j! t: wplotHandles(1) = pcolor( data );$ s# I7 _  c. }: m  J$ @
set( plotHandles(1) , 'EdgeColor' , 'none');
; \) w: s8 P, R  Ycaxis([0,255]). m) k" `3 F. h6 K
colormap jet;0 S! g) ^* Y$ W0 X
0 `" a- M5 A7 p/ D" x

# `. X1 k! A) v+ b5 {) _结果如何呢?+ \4 s0 S8 O+ H8 _) |

) Y% _/ L) Z$ n/ h# q$ S; @- W: u9 q4 Z1 Y( P5 O
6.jpg . }% \5 D7 U& x+ D2 A6 H6 r3 P
后面定义的colormap会把前面的覆盖掉。因此最终两张图片都使用了jet的色图。
/ Z1 Q% K/ h, l
4 m* L* @0 I- A  H" O1 ~7 n方法三: 既然只能使用一个colormap,那么我们就自己动手组装我们需要的色图6 z8 J1 s: a7 l2 H8 U# H) g
options.colormaps{1}.offset     = 0;
0 p. |. [" D/ T7 U5 K' Q9 moptions.colormaps{1}.num        = 256;  % Number of colors
% }6 N2 j& n2 E+ M$ N: |, Qoptions.colormaps{1}.cmin       = 0    + options.colormaps{1}.offset;* ^( ~/ z4 B3 s2 U9 }
options.colormaps{1}.cmax       = 255  + options.colormaps{1}.offset;
2 [# [* [6 t, Z; L( noptions.colormaps{1}.map        = gray(256);9 v. j. A( V1 N& P
2 O* l; v& K* ~
options.colormaps{2}.offset     = 256;, e0 N6 m7 [2 N' }! f5 ]
options.colormaps{2}.num        = 256;  % Number of colors" D2 l, q* m$ W. L: y! m/ P5 n
options.colormaps{2}.cmin       = 0    + options.colormaps{1}.offset;
2 M0 ~7 ?/ T( s! Noptions.colormaps{2}.cmax       = 255  + options.colormaps{1}.offset;
4 p3 }5 O* o+ l1 [4 ^% V- soptions.colormaps{2}.map        = jet(256);
+ G! k, g, m/ {- F" a& i5 A/ j1 a2 o" H
for iCMap = 1 : length(options.colormaps)
/ K5 e. l1 v, `' p" H    if iCMap == 1% e8 h( `6 @" ], a, D. X" u9 u
        cmap = options.colormaps{iCMap}.map;3 g5 m" K5 D3 Q2 u  o
    else
! Q2 U7 |, t" a; C3 h6 x        cmap = [cmap ; options.colormaps{iCMap}.map ];5 y3 B! S! F4 e: v0 U5 }
    end
! P9 A# F9 _: c2 K5 t: ~  Send
1 ?$ K* f+ f; E4 N% |- N
8 ~( N; O7 Y7 z0 u) S: p  n; I- s) ?# P1 [5 N7 o! C
我们定义了两个色图,然后把两个色图拼装起来。6 l- B1 P, ]$ p) [- A1 l4 z; t8 Y
# X0 Q( ~' {: _  b2 V0 B
fig4 = figure;
1 ?9 S* ?' o( ]colormap(cmap);6 G; Y. q7 X, g3 Q
. I* o4 p+ C* _, v7 o( v
subplot(1,2,1);- x1 y8 M+ d3 M* N; B9 z/ f
data1 = data +options.colormaps{1}.offset;- |8 H2 V( U# `. {! f
plotHandles(1) = pcolor( data1 );& v( {7 i: E8 l5 o( ]
set( plotHandles(1) , 'EdgeColor' , 'none');
$ @$ J: u# N& n( s. s0 c' [caxis([0 , size(cmap,1) - 1]);  O' p- {- c7 s
- O" _, U# L8 a$ l( ]& n+ ]6 i' C
/ K" `% Q" z) m' U( @9 ]/ }7 @& E
subplot(1,2,2);# \& A& ~# M  ~# t
data2 = data + options.colormaps{2}.offset;
) o$ T4 l0 C# z- l6 B8 qplotHandles(2) = pcolor( data2 );3 D) U" Y5 T$ b1 z1 q# [. K
4 Q+ [! C# T0 `3 Y
set( plotHandles(2) , 'EdgeColor' , 'none');& r9 Z1 |1 s  T" s1 G" v
caxis([0 , size(cmap,1) - 1]);1 L8 D9 S& K* N% l3 A, Q
  A& U# b- h4 [, m. x8 R

4 Z! K- I( C+ W. ~# a) I结果如下:/ L1 c: }. X' N! m
5.jpg
9 u3 D0 n/ g* \: W4 E* ]: d
( f  {1 |6 O" W实际上我们只有一个colormap,但达到了多个colormap的效果。4 [- K- x7 l( t& a+ {/ j2 m2 ]

7 R6 }) m( q$ b- e4 K  K

该用户从未签到

发表于 2020-7-31 15:04 | 显示全部楼层
Matlab的colormap函数详解(多个colormap)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号 )

GMT+8, 2020-8-9 19:02 , Processed in 0.062500 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19925233282

快速回复 返回顶部 返回列表