伪彩色
定义
伪彩色就是把灰度图转化为彩色图,但不能像机器学习那样生成和真实事件类似的图像。
与伪彩色相应的是真彩色。
人类视觉有一个特点就是,仅仅能分辨出二十几种灰度,也就是说采集到的灰度图像分辨率超级高。有一千个灰度级,但非常遗憾。人们仅仅能看出二十几个,也就是说信息损失了五十倍,但人类视觉对彩色的分辨能力相当强,可以分辨出几千种色度。 所以伪彩色应运而生。
应用
- 医学图像
- 遥感图像
医学和遥感图像由于其采样设备的原因,往往只能得到灰度图,这时可以考虑伪采样。
方法
1. HSV映射
我们通过调整HSV调色板可以知道,当我们把S,V的值设置为最大,通过改变H单个值可以得到大部分颜色。于是我们可以很轻松的把灰度值映射到H值就可以做到伪彩色。
hsv的取值范围为
H= 0-360
S= 0-1
V= 0-1
但是为了匹配目标数据类型 OpenCV 将每个通道的取值范围都做了修改,于是就变成了 0-180, 0-255, 0-255。
#include <opencv2/opencv.hpp>
#include <iostream>
#include <cstdio>
using namespace std;
using namespace cv;
int main()
{
Mat src;
src = imread("images/favorite/Lena.jpg",0);
imshow("src0", src);
cvtColor(src, src, CV_GRAY2RGB);
cvtColor(src, src, CV_RGB2HSV);
for(int i = 0; i < src.rows; i++)
{
for(int j = 0; j < src.cols; j++)
{
int temp = src.at<Vec3b>(i, j)[2];
src.at<Vec3b>(i, j)[0] = temp*180/255;
src.at<Vec3b>(i, j)[1] = 255;
src.at<Vec3b>(i, j)[2] = 255;
}
}
cout << src;
cvtColor(src, src, CV_HSV2BGR);
imshow("src", src);
waitKey(0);
return 0;
}
假彩色
定义
假彩色是一种彩色图映射到另一个彩色图,以增强对比度产生的彩色。
应用
- 遥感图像
- 大数据可视化
其实和伪彩色是一个东西。