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 欢迎转载或分享,但请务必声明文章出处。