【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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界