色谱.docx
- 文档编号:10247561
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:19
- 大小:300.55KB
色谱.docx
《色谱.docx》由会员分享,可在线阅读,更多相关《色谱.docx(19页珍藏版)》请在冰豆网上搜索。
色谱
色谱(colomap)
色谱是matlab系统引入的概念。
在matlab中,每个图形窗口都配备着一个色谱。
色谱定义为由一组颜色的R,G,B值组成的列数为3的数值矩阵。
第一列为R值,第二列为G,第三列为B值。
色谱矩阵的行数为色谱矩阵的长。
可以说一个色谱矩阵就是由RGB三个颜色数组的函数组合构成的。
matlab里的系统色谱有
hsvjetbonehotcoolspringsummerautumnwinterprismcopper
flaggraylinespink。
可以用rgbplot查看它们分别是怎样组成的。
rgbplot(hsv);ylabel('hsv');axistight;colormap('hsv');colorbar('horiz');
Colormap(’hsv’),也可以通过M=hsv(m);colormap(M);实现
当不指定参数m时,上述的色谱矩阵生成的函数都是先取得当前图形窗口的色谱矩阵长度,再生成同样长度的色谱矩阵。
Matlab默认的色谱矩阵是由hsv生成的长度为64的色谱矩阵。
这种做法好处是可以同时有3个或4个图形窗口露的色谱的颜色互不相同(不超过256种颜色)。
对于颜色资源有限的计算机系统,如果在不同的图形窗口中使用较长的色谱矩阵,那么在不同的图形窗口之间切换时,windows操作系统可能会改变非活跃图形窗口的颜色。
使用色谱着色的图形生成函数有mesh,surf,pcolor和image。
色谱的调整
由于色谱是一个数值矩阵,故对色谱矩阵进行的数学运算可以获得其他性质的色谱。
Matlab函数brighten可以增加或减弱色谱暗色部分的强度值,从而改变色谱的视觉效果。
brighten(gray,0.5)
将灰度色谱的强度按x0。
5增强,新恶色谱强度曲线如图
m=brighten(gray,0.5);rgbplot(m);axistight;colormap(m);colorbar('horiz');
brighten(gray,-0.5)的作用是按x2的方式减弱色谱的强度
m=brighten(gray,-0.5);rgbplot(m);axistight;colormap(m);colorbar('horiz');
也可以按数学方式对色谱矩阵进行处理。
当然新的色谱矩阵表示的效果有时是很难知道的,系统色谱矩阵pink就是按如下方式得到。
sqart(2/3*gray+1/3*hot)
根据已有的色谱矩阵构造函数作自己的colormap
以RGBcolormap为例,它是又r,g,b按如下方式组成的,实际上是三个分段函数,其中比较重要的参量是midpoint和颜色的长度clength,可以构造如下函数生成。
functioncmap=RGBcolormap(factor,clength);
functioncmap=RGBcolormap(factor,clength);
%MethodDescription
%RGBsmall=red,middle=green,large=blue
%inputfactor-midpoint,
%default:
clength=64;
%default:
factor=0.4;
%output
%cmap:
3*clength'smatrix
%Basiccolorscale-----RGB
redpoint(1,:
)=[1,1];
redpoint(2,:
)=[floor(clength*factor
(1)),0];
redpoint(3,:
)=[clength,0];
greenpoint(1,:
)=[1,0];
greenpoint(2,:
)=[floor(clength*factor
(1)),1];
greenpoint(3,:
)=[clength,0];
bluepoint(1,:
)=[1,0];
bluepoint(2,:
)=[floor(clength*factor
(1)),0];
bluepoint(3,:
)=[clength,1];
redline=colorline(redpoint);
greenline=colorline(greenpoint);
blueline=colorline(bluepoint);
cmap=[redline'greenline'blueline'];
%%%%%%%%%%%%%%%%%%%%
functionlinedata=colorline(colorpoint)
[m,n]=size(colorpoint);
linedata=[];
fori=1:
m-1
ifi==1,
line1=[(colorpoint(i,1):
colorpoint(i+1,1))-colorpoint(i,1)]*(colorpoint(i+1,2)-colorpoint(i,2))/(colorpoint(i+1,1)-colorpoint(i,1))+colorpoint(i,2);
else
line1=[(colorpoint(i,1)+1:
colorpoint(i+1,1))-colorpoint(i,1)]*(colorpoint(i+1,2)-colorpoint(i,2))/(colorpoint(i+1,1)-colorpoint(i,1))+colorpoint(i,2);
end
linedata=[linedataline1];
end
另建一个m文件
x=peaks(20);
figure;
clength=64;factor=0.4;
cmap1=RGBWcolormap(factor,clength);
colormap(cmap1);
pcolor(x);shadinginterp;title('factor=0.4clength=64)');colorbar
clength=10;factor=0.4;
cmap2=RGBWcolormap(factor,clength);
figure;
colormap(cmap2);
pcolor(x);shadinginterp;title('factor=0.4clength=12)');colorbar
clength=64;factor=0.6;
cmap3=RGBWcolormap(factor,clength);
figure;
colormap(cmap3);
pcolor(x);shadinginterp;title('factor=0.6clength=64)');colorbar
结果如下
第二幅图
Clength=10
注意一个figure只能有一个colormap,有多个以最后一个为标准。
%RGBcanbeextendedintosixdifferentcolorgradients
cmap=[redline'greenline'blueline'];
%cmap=[blueline'redline'greenline'];
%cmap=[greenline'blueline'redline'];
%cmap=[blueline'greenline'redline'];
%cmap=[greenline'redline'blueline'];
%cmap=[redline'blueline'greenline'];
利用flipdim还有很多
再举一个例子
以RWBcolormap为例,输入参数加两个参数offset1,offset2.分别代表r,g,b各分量最小值向上,最大值向下的偏移量(【0,1】),offset1越大则白的成分多,offset2越大则黑的成分越多。
functioncmap=GWBcolormap(factor,clength,offset1,offset2);
%MethodDescription
%GWBsmall=green,middle=white,large=blue
%input
%default:
clength=256;
%default:
factor=0.4;
%output
%cmap3*clength'smatrix
%Basiccolorscale-----GWB
redpoint(1,:
)=[1,0+offset1];
redpoint(2,:
)=[floor(clength*factor
(1)),1-offset2];
redpoint(3,:
)=[clength,0+offset1];
greenpoint(1,:
)=[1,1-offset2];
greenpoint(2,:
)=[floor(clength*factor
(1)),1-offset2];
greenpoint(3,:
)=[clength,0+offset1];
bluepoint(1,:
)=[1,0+offset1];
bluepoint(2,:
)=[floor(clength*factor
(1)),1-offset2];
bluepoint(3,:
)=[clength,1-offset2];
redline=colorline(redpoint);
greenline=colorline(greenpoint);
blueline=colorline(bluepoint);
cmap=[redline'greenline'blueline'];
[i,j]=find(cmap>1);cmap(i,j)=1;
[i,j]=find(cmap<0);cmap(i,j)=0;
%rgbplot(cmap);axistight;colormap(cmap);colorbar('horiz');
%%%%%%%%%%%%%%%%%%%%%%%%%
functionlinedata=colorline(colorpoint)
[m,n]=size(colorpoint);
linedata=[];
fori=1:
m-1
ifi==1,
line1=[(colorpoint(i,1):
colorpoint(i+1,1))-colorpoint(i,1)]*(colorpoint(i+1,2)-colorpoint(i,2))/(colorpoint(i+1,1)-colorpoint(i,1))+colorpoint(i,2);
else
line1=[(colorpoint(i,1)+1:
colorpoint(i+1,1))-colorpoint(i,1)]*(colorpoint(i+1,2)-colorpoint(i,2))/(colorpoint(i+1,1)-colorpoint(i,1))+colorpoint(i,2);
end
linedata=[linedataline1];
end
另建一个m文件
x=peaks(20);
closeall;figure;
clength=64;factor=0.4;offset1=0.5;offset2=0.0;
cmap1=GWBcolormap(factor,clength,offset1,offset2);
colormap(cmap1);
pcolor(x);shadinginterp;title('factor=0.4clength=64)');colorbar
clength=64;factor=0.4;offset1=0.0;offset2=0.0;
cmap2=GWBcolormap(factor,clength,offset1,offset2);
figure;
colormap(cmap2);
pcolor(x);shadinginterp;title('factor=0.4clength=10)');colorbar
clength=64;factor=0.4;offset1=0.0;offset2=0.5;
cmap3=GWBcolormap(factor,clength,offset1,offset2);
figure;
colormap(cmap3);
pcolor(x);shadinginterp;title('factor=0.7clength=64)');colorbar
结果如下
以此类推可以得到如下的色阶矩阵的函数
Method
Description
RGB
small=red,middle=green,large=blue
BGR
small=blue,middle=green,large=red
RWB
small=red,middle=white,large=blue
BWR
small=blue,middle=white,large=red
RWG
small=red,middle=white,large=green
GWR
small=green,middle=white,large=red
GWB
small=green,middle=white,large=blue
BWG
small=blue,middle=white,large=green
BlkW
small=black,large=white
WBlk
small=white,large=black
最后举一个稍微复杂一点的例子,其实也很简单
做hsv的色阶矩阵的函数,这个色阶矩阵非常好,颜色比较齐全,红橙黄绿青兰紫都有我想要哪一段都行。
其实就是多设几个midpoint,分段函数多一点。
(5个point)
functioncmap=hsvcolormap(factor,clength);
%hsvcolormapdescription
%[100]red--[110]yellow--[010]green--[011]cyan--[001]blue--[101]magenta--[100]%red
%eachcolorscalecanbeextendedintosixcolorscales.
%input
%default:
clength=256;
%factorisa1*5arrays
%default:
factor=[1/6:
1/6:
5/6];
%default:
offset=0.0;
%output
%cmap3*clength'smatrix
redpoint(1,:
)=[1,1];
redpoint(2,:
)=[floor(clength*factor
(1)),1];
redpoint(3,:
)=[floor(clength*factor
(2)),0];
redpoint(4,:
)=[floor(clength*factor(3)),0];
redpoint(5,:
)=[floor(clength*factor(4)),0];
redpoint(6,:
)=[floor(clength*factor(5)),1];
redpoint(7,:
)=[clength,1];
greenpoint(1,:
)=[1,0];
greenpoint(2,:
)=[floor(clength*factor
(1)),1];
greenpoint(3,:
)=[floor(clength*factor
(2)),1];
greenpoint(4,:
)=[floor(clength*factor(3)),1];
greenpoint(5,:
)=[floor(clength*factor(4)),0];
greenpoint(6,:
)=[floor(clength*factor(5)),0];
greenpoint(7,:
)=[clength,0];
bluepoint(1,:
)=[1,0];
bluepoint(2,:
)=[floor(clength*factor
(1)),0];
bluepoint(3,:
)=[floor(clength*factor
(2)),0];
bluepoint(4,:
)=[floor(clength*factor(3)),1];
bluepoint(5,:
)=[floor(clength*factor(4)),1];
bluepoint(6,:
)=[floor(clength*factor(5)),1];
bluepoint(7,:
)=[clength,0];
redline=colorline(redpoint);
greenline=colorline(greenpoint);
blueline=colorline(bluepoint);
%RGBcanbeextendedintosixdifferentcolorgradients
cmap=[redline'greenline'blueline'];
%%%%%%%%%%%%%%%%%%%%%%%%%
functionlinedata=colorline(colorpoint)
[m,n]=size(colorpoint);
linedata=[];
fori=1:
m-1
ifi==1,
line1=[(colorpoint(i,1):
colorpoint(i+1,1))-colorpoint(i,1)]*(colorpoint(i+1,2)-colorpoint(i,2))/(colorpoint(i+1,1)-colorpoint(i,1))+colorpoint(i,2);
else
line1=[(colorpoint(i,1)+1:
colorpoint(i+1,1))-colorpoint(i,1)]*(colorpoint(i+1,2)-colorpoint(i,2))/(colorpoint(i+1,1)-colorpoint(i,1))+colorpoint(i,2);
end
linedata=[linedataline1];
end
另设一个Mfile
x=peaks(20);
clength=256;
factor=[1/6:
1/6:
5/6];
cmap=hsvcolormap(factor,clength);
figure;
colormap(cmap);
pcolor(x);shadinginterp;colorbar
factor=[1/6:
1/6:
4/611];
factor=[1/6:
1/6:
3/6111];
factor=[003/6:
1/6:
5/6];
通过调整factor可以把你想要突出的颜色加以放大以适合数据的需要。
这样做比matlab的colomapeditor要更加精细一些
如果大家觉得有用,会写下一部分,都是写paper时自己的小体会。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 色谱