基本概念
- gamma:该参数通过应用伽马校正来压缩动态范围。 当伽马等于 1 时,不应用修正。 小于 1 的伽玛会使图像变暗,而大于 1 的伽马会使图像变亮。
- 饱和度saturation:该参数用于增加或减少饱和度。 饱和度高时,色彩更丰富,更浓。 饱和度值接近零,使颜色逐渐消失为灰度。
- 对比度contrast:控制输出图像的对比度(即
log(maxPixelValue/minPixelValue))。
1.gamma mapping
非常简单的mapping function
伽马校正,或经常简单地伽马,是用于编码和解码一非线性运算,亮度或三刺激值在视频或静止图像系统。[1]在最简单的情况下,Gamma校正由以下幂律表达式定义:
其中非负实际输入值 的
次方并乘以常数A,得到输出值
。在A = 1的常见情况下,输入和输出通常在0-1的范围内。
我写了一个映射16bits灰度的图像到10bits的函数
cv::Mat UseGamma(cv::Mat& hdr, float gamma) {
// 16bits map to 10bits
cv::Mat m;
cv::Mat after[3];
hdr.convertTo(hdr, CV_32F);
hdr /= 65536;
cv::Mat channels[3] = { hdr, hdr, hdr };
cv::merge(channels, 3, m);
// Tonemap HDR image
Mat ldr;
Ptr<Tonemap> tonemap = createTonemap(gamma);
tonemap->process(m, ldr);
ldr = ldr * 1024;
ldr.convertTo(ldr, CV_16UC1);
cv::split(ldr, after);
return after[0];
}
gamma越大,pixel value 越大
2.直方图均衡化与直方图规定化
直方图均衡化的优点是能自动增强整个图像的对比度,但它的具体增强效果不易控制,处理的结果总是得到全局的均衡化的直方图.实际工作中,有时需要变换直方图使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度,这时可采用比较灵活的直方图规定化(也成为直方图匹配)方法。
直方图规定化(histogram specification)又称直方图匹配,是指使一幅图像的直方图变成规定形状的直方图而对图像进行变换的增强方法。就是通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图。所以,直方图修正的关键就是灰度映像函数
直方图规定化原理是对两个直方图都做均衡化,变成相同的归一化的均匀直方图。以此均匀直方图起到媒介作用,再对参考图像做均衡化的逆运算即可。直方图均衡化是直方图规定化的桥梁。
3.opencv 支持的另外四种tone mapping方法。
在api页面 搜(Drago...关键字就行了)
api:https://docs.opencv.org/3.1.0/d6/df5/group__photo__hdr.html#gabcbd653140b93a1fa87ccce94548cd0d
1.Drago tone mapping: Adaptive Logarithmic Mapping For Displaying High Contrast Scenes;
2.Durand tone mapping;
3.Reinhard tone mapping;
4.Mantiuk tone mapping;
reference:
https://zhuanlan.zhihu.com/p/38176640