【IDL】图像真彩色、假彩色和伪彩色显示

一、背景知识

计算机表示颜色也是用二进制。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

四、最终效果图

 

posted @   地理遥感生态网平台  阅读(261)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示