找回密码
 注册
关于网站域名变更的通知
查看: 564|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-7-31 14:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
我们有一张图片,读进来后,转换为gray,然后打算画两张图,一张用gray的色图,一张用jet的色图。) p$ K* n3 s7 B
首先我们读取图片:1 t$ r# H+ p  K' @% S* Z* a$ q: q
clear all;
/ i. d% z  @5 z" T; l( B' ^close all;+ U, O+ o, ~. B+ F1 R3 L6 i; [" R" ]
clc;
6 O8 W" x. p$ T+ L1 h( I% u%%
4 N+ x3 r4 z! T1 z# simgname='.\frog.bmp';
" }( p$ J3 Q* N0 ~3 L% f& z[imagRGB]     = imread( imgname );9 g0 A6 f3 q) x$ h+ l0 @) G
8 f" W1 W. a6 F2 s; H  E
if (length(size(imagRGB)) > 2)6 h- `$ R+ l! r; v2 t& B9 o. ^, S* B
    imagGray = rgb2gray(imagRGB);1 G& o! y' _! F3 R8 x" r
else
2 ^  w, R! N, C# }8 r( K5 o    imagGray = imagRGB;
' I/ k2 m6 m3 }+ j, Z* w; }end
# L5 C8 ~) C- _# H& e5 W+ dclear('imagRGB');
4 }0 R- }8 v- @5 _: rdata =  double(imagGray);  ]' k2 [; b$ x% g. D! z, Z
data =flipdim(data,1);  
, p6 p7 A6 c; v, @4 Q* P   % Flip linear dimensions (image coordinate system starts at upper left
/ p) R  n5 k* i" x! C& m( G1 M! F   % corner )' V' y* p, J8 T- b
5 z7 G/ a  w9 G

! U- L4 E* ^0 A+ u, n- A方法1: 我们生成两个figure,分开画两个图
/ r1 q7 a1 s8 f( cfig1=figure;
1 B# a3 ?# R6 e4 A/ C4 e& KplotHandles(1) = pcolor( data );0 S1 i3 [7 x' y  [8 F4 V# v
set( plotHandles(1) , 'EdgeColor' , 'none');
  [+ w3 K" I* [caxis([0,255]);
; b- h$ v# u" z' Q$ h0 Ccolormap gray;$ y$ U# a; @3 X- \) e
' m/ T2 w5 I0 a( X8 [
fig2=figure;
& f4 @& F( e' ]$ o4 XplotHandles(1) = pcolor( data );
! h8 N# J: z) S; j: Eset( plotHandles(1) , 'EdgeColor' , 'none');% `3 h4 B# q+ V- c/ p
caxis([0,255])7 z9 U3 ?% ]; \! W
colormap jet;
- D/ V& R7 ?" u! a( e0 m4 {7 b. U( x( I+ i' E

1 h. L# M0 C/ T9 m
5 S$ y7 }/ d$ a: Q, M7 w8 r+ v结果如下:
( b8 T0 ?9 h2 c2 T$ V
! M% G2 k0 O! l7 Z, S! X注意:这是两个figure,每个figure可以使用一个唯一的colormap8 k: Y- z5 V: o& r7 U+ v; `+ z
/ k- X) ^' r" n) L

1 Q7 L" |% H- N1 i8 g方法二: 一个figure,subplot& [& {( e' R: w) Z: j) s0 s, `
fig3=figure;+ n( Y, l; r* _/ o  S; L

  G$ ?* B! O. asubplot(1,2,1);
" N% X/ r# M# z% M: ?plotHandles(1) = pcolor( data );8 o" F% _" ]4 K+ h2 z, v9 N
set( plotHandles(1) , 'EdgeColor' , 'none');. H/ s& C* l4 p  @: Q5 E$ g+ L
caxis([0,255]);
' m; i5 b8 \% k( E9 qcolormap gray;
+ t, q4 b7 Y" S3 }. u' n 5 b# U% ^+ H$ `7 u
subplot(1,2,2);
# n6 S& D: i% I9 a! F. i  `& e  CplotHandles(1) = pcolor( data );8 \5 A3 j% k' J/ i$ {
set( plotHandles(1) , 'EdgeColor' , 'none');
. u4 H% h1 l& \' `' L' Dcaxis([0,255]): p" t7 A. u5 Z8 p* R5 T6 r
colormap jet;  @' U4 l+ P9 i

9 \# h9 S! |2 `( B. X; [- n. i2 J
$ `  P) N# }& G' t' l' `! k结果如何呢?
% M7 J( K' `* _9 u* X" B9 o' Z0 B4 ?  ?3 D: R: D

' |$ C0 c/ ?! X% y1 d% W 4 Y; i* Z  L4 d8 H
后面定义的colormap会把前面的覆盖掉。因此最终两张图片都使用了jet的色图。
3 l! e) L2 W! e  f* |4 S8 u  G3 f' C
方法三: 既然只能使用一个colormap,那么我们就自己动手组装我们需要的色图
( x0 t  M, k0 ~! y5 Eoptions.colormaps{1}.offset     = 0;& Y- T4 ]; ]& T% w& o; Q
options.colormaps{1}.num        = 256;  % Number of colors- Z( f; G1 b: Q/ ?
options.colormaps{1}.cmin       = 0    + options.colormaps{1}.offset;$ _& u* k* W7 e; x& @% \$ T
options.colormaps{1}.cmax       = 255  + options.colormaps{1}.offset;$ q' [! }9 r2 C
options.colormaps{1}.map        = gray(256);
( P% V! `: ?) g2 K. Q3 v: T" l
' m; r+ j( g; D) d0 [/ z4 Xoptions.colormaps{2}.offset     = 256;, c% E* T( u, Y# g
options.colormaps{2}.num        = 256;  % Number of colors% w; c- q9 a7 {0 K
options.colormaps{2}.cmin       = 0    + options.colormaps{1}.offset;0 e; {! S* p2 G2 n0 e6 H/ E. A0 ]
options.colormaps{2}.cmax       = 255  + options.colormaps{1}.offset;
, k) ~' s  M1 Q% N8 Eoptions.colormaps{2}.map        = jet(256);
* k* b5 U  u: N6 L8 k. b, t: i3 w2 i1 @7 X" x8 A3 J6 ~
for iCMap = 1 : length(options.colormaps)
+ g% p: o& V% W  L3 y; d    if iCMap == 1
( j: ]# F5 t$ S& I& u        cmap = options.colormaps{iCMap}.map;
9 A( t' n. }) W; i* Y& u8 j    else6 f3 c6 z& s: w) b
        cmap = [cmap ; options.colormaps{iCMap}.map ];. P% p( r9 Y3 u  H9 `
    end# ?! `* q! @1 e9 u+ F3 Q% O
end
8 X: F. b. g4 [/ \: Y- r+ h" p' G5 E$ I' u7 I

5 m2 A. |& {2 e6 P  I6 Q1 l我们定义了两个色图,然后把两个色图拼装起来。
! y% c+ _" B5 {* X6 f
3 y+ i% V3 |. s  W! ^) `& M6 bfig4 = figure;% u8 ?# w3 ~8 b. y0 e" C  Q0 g
colormap(cmap);' ~5 U- I" k/ P% D, u# L$ P# D

7 E: N) U3 F8 h% B$ }5 xsubplot(1,2,1);5 A, z) E7 ^! J( P! V  ~
data1 = data +options.colormaps{1}.offset;" U& e. x, ]9 ^' R. F2 _
plotHandles(1) = pcolor( data1 );8 Q' S- ]$ Z0 T) y8 o
set( plotHandles(1) , 'EdgeColor' , 'none');
6 d  `" D- Q% G! Ecaxis([0 , size(cmap,1) - 1]);
  U# {6 [: V* h& K$ o* t" N3 L ! I5 i+ c& n$ o: s3 K0 M" M
! |" [1 B! h/ [  Y
subplot(1,2,2);
  E- x* P( W. M3 j3 }0 Fdata2 = data + options.colormaps{2}.offset;
: ?8 _. n" l7 lplotHandles(2) = pcolor( data2 );* Z& A+ P- U/ H

$ W% E) a7 G' F& Cset( plotHandles(2) , 'EdgeColor' , 'none');5 S1 }& o0 M: N/ U
caxis([0 , size(cmap,1) - 1]);
3 Q) ]7 N* ^' `4 h% ^% \  ?
. ^  `2 E& N3 A+ \- n0 Q
# l$ F3 q0 A( ^1 |7 E! t4 {% F7 ^结果如下:( f5 B9 \& {2 I( y$ b
2 M! W' x8 u$ |; o2 h( @
- r$ _' D! q2 Q0 r. K) n( ?2 z; b2 L
实际上我们只有一个colormap,但达到了多个colormap的效果。) d. Z! }- K. Y" E/ I2 V$ J$ ]
" J5 R& q% Y, |

该用户从未签到

2#
发表于 2020-7-31 15:04 | 只看该作者
Matlab的colormap函数详解(多个colormap)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-26 09:12 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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