ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-06-08 12:34:21  阅读:350  来源: 互联网

标签:假彩色 title imgDims rgbImage 彩色显示 IDL redChannel


一、背景知识

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

四、最终效果图

标签:假彩色,title,imgDims,rgbImage,彩色显示,IDL,redChannel
来源: https://www.cnblogs.com/enviidl/p/16355195.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有