|||
计算机表示颜色也是用二进制。16位色的发色总数是6553真彩色,也就是2的16次方;24位色被称为真彩色,它可以达到人眼分辨的极限,发色数是1677万多色,也就是2的24次方。
图像显示的时候可能涉及到真彩色显示、伪彩色显示和假彩色显示等方式。
IDL下显示图像又有直接图形法、对象图形法、智能化工具可视化和快速可视化四种,后面分别以代码的形式给出各种模式下的图像显示例程,仔细看注释。
二、 基本概念
真彩色(True Color):真彩色是指在组成一幅彩色图像的每个像素值中,有R、G、B三个基色分量,每个基色分量直接决定显示设备的基色强度产生彩色。
伪彩色(Pseudo Color):每个像素的颜色不是由每个基色分量的数值直接决定,而是把像素值当作颜色查找表(color look-up table,CLUT)的表项入口地址,去查找一个显示图像时使用的R,G,B强度值,用查找出的R,G,B强度值合成产生彩色。
假彩色(False Color):将多波段单色影像合成为假彩色影像,如landsat 7/ETM+有八个波段,用其中三个合成就是假彩色。
从实现技术上讲,假彩色与真彩色是一致的,都是R、G、B分量组合显示;伪彩色显示调用的是颜色表。
三、代码实现
1. 直接图形法
;直接图形法-- PRO SHOWIMAGEDIRECTGRAPHICS,imgDims,$ rgbImage,$ redChannel,$ greenChannel,$ blueChannel ;真彩色 ;显示窗口 WINDOW,0,xsize= imgDims[0],ysize = imgDims[1],$ title = '真彩色' DEVICE,decomposed = 1 ;/true相当于true=1,即对应图像数组为(3, w, h) TV,rgbImage,/true ;直接图形法--伪彩色 WINDOW,1,xsize= imgDims[0],ysize = imgDims[1],$ title = '灰度显示' ;原灰度显示 TV, redChannel ;加载已有颜色表(IDL提供了近40个现成的颜色表,可通过xloadct查看) DEVICE,decomposed = 0 LOADCT,13 WINDOW,2,xsize= imgDims[0],ysize = imgDims[1],$ title = '伪彩色(颜色表13)' TV,redChannel ;自定义颜色表 myR = BINDGEN(256) myG = myR[REVERSE(myR)] myB = myR ;增加编辑颜色表 MODIFYCT,41,'colorTable',myR,myG,myB LOADCT,41 WINDOW,3,xsize= imgDims[0],ysize = imgDims[1],$ title = '伪彩色(自定义颜色表)' TV,redChannel ;假彩色 DEVICE,decomposed = 1 WINDOW,4,xsize= imgDims[0],ysize = imgDims[1],$ title = '假彩色' TV,rgbImage[[2,1,0],*,*],/true END |
2. 对象图形法
;对象图形法显示图像 PRO SHOWIMAGEOBJECTGRAPHICS,imgDims,$ rgbImage,$ redChannel,$ greenChannel,$ blueChannel ;对象图形法-真彩色显示 oImage= OBJ_NEW('IDLgrImage',rgbImage) XOBJVIEW,oImage,title= '真彩色显示' ;对象图形法-伪彩色显示 oPalette = OBJ_NEW('IDLgrPalette') oPalette.LOADCT,13 oImage = OBJ_NEW('IDLgrImage',redChannel,$ palette = oPalette) XOBJVIEW,oImage,title = '伪彩色显示(颜色表13)' ;假彩色显示 oImage = OBJ_NEW('IDLgrImage',rgbImage[[2,1,0],*,*]) XOBJVIEW,oImage,title = '假彩色显示' END |
3. 智能化编程工具可视化
;智能化编程工具 PRO SHOWIMAGEITOOLS,imgDims,$ rgbImage,$ redChannel,$ greenChannel,$ blueChannel ;真彩色显示 IIMAGE,rgbImage,title = 'True Color' ;灰度显示 IIMAGE,redChannel,title = 'Gray' ;伪彩色显示-获取颜色表 LOADCT,13 TVLCT,r,g,b,/get rgbTable = BYTARR(3,256) rgbTable[0,*,*] = r rgbTable[1,*,*] = g rgbTable[2,*,*] = b ;伪彩色显示 IIMAGE,redChannel,title = 'Pseudo Color',$ RGB_TABLE = rgbTable |
4. 快速可视化
;快速可视化方式 PRO SHOWIMAGEQUICKVIS,imgDims,$ rgbImage,$ redChannel,$ greenChannel,$ blueChannel ;真彩色显示 img1 = IMAGE(rgbImage) ;原始灰度显示 img1 = IMAGE(redChannel) ;伪彩色显示 img1 = IMAGE(redChannel,rgb_table= 13) END |
5. 主函数
PRO TEST_DISPLAYIMAGE ;获取IDL自带的Examples目录下的jpeg文件 file = FILEPATH('rose.jpg', $ SUBDIRECTORY = ['examples', 'data']) ;获取文件信息 queryStatus = QUERY_IMAGE(file, imageInfo) imgDims = imageInfo.DIMENSIONS ;读取文件 rgbImage = READ_IMAGE(file) redChannel = REFORM(rgbImage[0,*,*]) greenChannel = REFORM(rgbImage[1,*,*]) blueChannel = REFORM(rgbImage[2,*,*]) ;直接图形法下的各种显示 SHOWIMAGEDIRECTGRAPHICS,imgDims,$ rgbImage,$ redChannel,$ greenChannel,$ blueChannel ;对象图形法下的各种显示 SHOWIMAGEOBJECTGRAPHICS,imgDims,$ rgbImage,$ redChannel,$ greenChannel,$ blueChannel ;智能化编程工具 SHOWIMAGEITOOLS,imgDims,$ rgbImage,$ redChannel,$ greenChannel,$ blueChannel ;快速可视化显示 SHOWIMAGEQUICKVIS,imgDims,$ rgbImage,$ redChannel,$ greenChannel,$ blueChannel END |
四、最终效果图
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-27 07:00
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社