PhotoShop算法实现
伪彩色(Pseudo-color)就是通过一种色彩映射,把一种颜色指定给灰度图像的一个灰度级,让灰度图像也有色彩。当然,这种彩色是通过人为着色的,不是图像场景中的真实色彩,故只能叫做“伪彩色”。伪彩色图像的每个像素值实际上是一个索引值或代码,该代码值作为色彩查找表CLUT(Color Look-Up Table)中某一项的入口地址,根据该地址可查找出包含实际R、G、B的强度值。
要了解伪彩色,先介绍几个概念:
1)真彩色(True Color)
自然物体的彩色叫做真彩色,一般可用红、绿、蓝三种滤色片把一副真彩色图像分离为红、绿、蓝三幅图像:把红、绿、蓝再三幅图像再合成,即恢复为原来的真彩色图像。
2)假彩色(Sham-Color)
假彩色分为三种:
(1)把真是景物的图像的像素逐个地映射为另一种颜色,使目标在原图像中更突出。例如蓝天上有银灰色的飞机,蓝天可映射为红色,飞机和草地可映射为蓝色。这种映射关系可以是一一对应的,也可以不是一一对应的,因此又称为假彩色指定。
(2)把多光谱图像中的任意三个光谱图像映射为红、绿、蓝三种可见光谱段的新号,再合成为一副彩色图像。通常这种映射的图像有接近于自然光彩色的效果。
(3)把黑白图像用灰度级映射或频谱映射而成为类似真实彩色的处理,相当于黑白图片的人工着色法。
3)伪彩色(Pseudo-color)
伪彩色相当于假彩色的一个特例,也就是指定某灰度为某种彩色。通常,这种指定最多为16级左右,最高也不超过30级,否则指定的色彩太多而无法记忆和区分。当每个像素可指定的彩色书目对红、绿、蓝分别达到256种时,也就变成模拟自然彩色的假彩色了,因此假彩色和伪彩色指定是很难严格区分的。通常,把黑白图像做少量彩色映射时叫做伪彩色指定。
伪彩色处理是用彩色来代替像素灰度值的一种技术,由于人眼对彩色的分辨率远高于对灰度差的分辨率,所以这种技术可以用来识别灰度差较小的像素,这是一种视觉效果明显而技术又不是很复杂的图像增强技术。在转换过程中,对灰度图像的每一个像素点,取得该点的灰度值并送入红、绿、蓝三个通道实施不同的变换,产生相应的红、绿、蓝的亮度值。具体的变换方法很多,下图是一种简单的映射变换曲线:


本文实现的算法不采用这种方法,而是采用另外一种方法:对于任意一副图像,可以先将灰度级降到16级,然后根据灰度与相应的颜色对应关系,求出新的颜色。
颜色映射表:
uchar ColorTalbe[]={0, 0 , 0,// 0黑色0, 0, 85, // 1深蓝0, 85, 0, // 2深绿85, 0, 0, // 3深红64, 64, 64, // 4深灰85, 0, 85, // 5蓝紫0, 0, 255, // 6蓝色85, 85, 0, // 7草绿0, 255, 0, // 8绿色255, 0, 0, // 9红色128, 128, 128, // 10灰色0, 255, 255, // 11青色255, 255, 0, // 12黄色255, 255, 255, // 13白色0, 85, 85, // 14深蓝率255, 0, 255 // 15紫色};
算法实现:
// img:需为灰度图像// ColorTable:为颜色映射表void PhotoShop::PseudoColor(Mat& img, Mat &gImg){if ( gImg.empty())gImg.create(img.rows, img.cols, CV_8UC3);gImg = cv::Scalar::all(0);int i, j;Size size = img.size();//int chns = img.channels();int chns = gImg.channels();if (img.isContinuous() && gImg.isContinuous()){size.width *= size.height;size.height = 1;}for ( i= 0; i<size.height; ++i){const unsigned char* src = (const unsigned char*)(img.data+ img.step*i);unsigned char* dst = (unsigned char*)gImg.data+gImg.step*i;for ( j=0; j<size.width; ++j){uchar val = src[j]>>4;dst[j*chns] = ColorTalbe[val*3];dst[j*chns+1] =ColorTalbe[val*3+1];dst[j*chns+2] = ColorTalbe[val*3+2];}}}
实现效果图:

另外,还有更多有关伪彩色的资料:
1、伪彩色增强
作者:kezunhai 出处:http://blog.csdn.net/kezunhai 欢迎转载或分享,但请务必声明文章出处。
