python 简单图像处理(12) 伪彩色增强
人的生理视觉系统特征对微小的灰度变化感觉不敏感,而对彩色的微小差别极为敏感
利用这一特点么就可以把人眼不敏感的灰度信号映射为人眼灵敏的彩色信号,以增强人对图像中细微变换的分辨率
在图像处理技术中,彩色增强应用十分广泛且效果显著
常见的彩色增强技术主要有假彩色增强和伪彩色增强两大类
(1)假彩色增强
思路是将灰度分层几级,比如我们这里将灰度分为16级
然后每一级灰度对应一种彩色
在查看原图中某像素,找出它所属的灰度级,用相应的彩色代替就行了
(2)伪彩色处理
由灰度值根据一定的映射关系求出R,G,B的值
组成该点的彩色值
典型的映射关系图为
编写程序:
import cv
def Color(image):
w = image.width
h = image.height
size = (w,h)
iColor = cv.CreateImage(size,8,3)
for i in range(h):
for j in range(w):
r = GetR(image[i,j])
g = GetG(image[i,j])
b = GetB(image[i,j])
iColor[i,j] = (r,g,b)
return iColor
def GetR(gray):
if gray < 127:
return 0
elif gray > 191:
return 255
else:
return (gray-127)*4-1
def GetG(gray):
if gray < 64:
return 4*gray
elif gray > 191:
return 256-(gray-191)*4
else:
return 255
def GetB(gray):
if gray < 64:
return 255
elif gray > 127:
return 0
else:
return 256-(gray-63)*4
def FColor(image,array):
w = image.width
h = image.height
size = (w,h)
iColor = cv.CreateImage(size,8,3)
for i in range(h):
for j in range(w):
iColor[i,j] = array[int(image[i,j]/16)]
return iColor
FCArray = [(0,51,0),(0,51,102),(51,51,102),(51,102,51),\
(51,51,153),(102,51,102),(153,153,0),(51,102,153),\
(153,102,51),(153,204,102),(204,153,102),(102,204,102),\
(153,204,153),(204,204,102),(204,255,204),(255,255,204)]
image = cv.LoadImage('lena.jpg',0)
iColor = Color(image)
iFColor = FColor(image,FCArray)
cv.ShowImage('image',image)
cv.ShowImage('iColor',iColor)
cv.ShowImage('iFColor',iFColor)
cv.WaitKey(0)
效果如下:
中间为假彩色增强
右边是伪彩色增强
把原本变化不明显的灰度值转变为直观的彩色的变化
好了,伪彩色增强处理相对比较简单。也没有太多可讲的,就到这里吧!