1. 伽马变换
伽马变换主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,增强对比度。变换公式就是对原图像上每一个像素值做乘积运算:
伽马变换对图像的修正作用其实就是通过增强低灰度或高灰度的细节实现的,从伽马曲线可以直观理解:
γ值以1为分界,值越小,对图像低灰度部分的扩展作用就越强,值越大,对图像高灰度部分的扩展作用就越强,通过不同的γ值,就可以达到增强低灰度或高灰度部分细节的作用。
2. 实现
在对图像进行伽马变换时,如果输入的图像矩阵是CV_8U,在进行幂运算时,大于255的值会自动截断为255;所以,先将图像的灰度值归一化到【0,1】范围,然后再进行幂运算;
1 void GammaTransform(cv::Mat &image, cv::Mat &dist)
2 {
3
4 Mat imageGamma;
5 //灰度归一化
6 image.convertTo(imageGamma, CV_64F, 1.0 / 255, 0);
7
8 //伽马变换
9 double gamma = 1.5;
10
11 pow(imageGamma, gamma, dist);//dist 要与imageGamma有相同的数据类型
12
13 dist.convertTo(dist, CV_8U, 255, 0);
14 }
伽马变换对于图像对比度偏低,并且整体亮度值偏高(对于于相机过曝)情况下的图像增强效果明显,但需要手动调节r值。