图像增强-伽马变换

幂律变换/gamma变换
幂律变换主要用于图像的校正,对漂白的图片或者是过黑的图片进行修正,幂律变换的公式如下:
 

根据 γ的大小,主要可分为以下两种情况:

γ > 1: 处理漂白的图片,进行灰度级压缩

γ < 1: 处理过黑的图片,对比度增强,使得细节看的更加清楚

图像增强-伽马变换_第1张图片

γ值以1为分界,值越小,对图像低灰度部分的扩展作用就越强,值越大,对图像高灰度部分的扩展作用就越强,通过不同的γ值,就可以达到增强低灰度或高灰度部分细节的作用。

伽马变换对于图像对比度偏低,并且整体亮度值偏高(对于于相机过曝)情况下的图像增强效果明显。

	Mat image = imread("test.jpg");
	Mat imageGamma(image.size(), CV_32FC3);
	for (int i = 0; i < image.rows; i++)
	{
		for (int j = 0; j < image.cols; j++)
		{
			imageGamma.at(i, j)[0] = (image.at(i, j)[0])*(image.at(i, j)[0])*(image.at(i, j)[0]);
			imageGamma.at(i, j)[1] = (image.at(i, j)[1])*(image.at(i, j)[1])*(image.at(i, j)[1]);
			imageGamma.at(i, j)[2] = (image.at(i, j)[2])*(image.at(i, j)[2])*(image.at(i, j)[2]);
		}
	}
	//归一化到0~255  
	normalize(imageGamma, imageGamma, 0, 255, CV_MINMAX);
	//转换成8bit图像显示  
	convertScaleAbs(imageGamma, imageGamma);
	imshow("原图", image);
	imshow("伽马变换图像增强", imageGamma);

图像增强-伽马变换_第2张图片


	Mat image = imread("test.jpg");
	Mat imageGamma;
	//灰度归一化
	image.convertTo(imageGamma, CV_64F, 1.0 / 255, 0);

	//伽马变换
	double gamma = 2.5;

	pow(imageGamma, gamma, imageGamma);//dist 要与imageGamma有相同的数据类型
    imageGamma.convertTo(imageGamma, CV_8U, 255, 0);

	imshow("原图", image);
	imshow("伽马变换图像增强", imageGamma);

图像增强-伽马变换_第3张图片

 

参考:

https://blog.csdn.net/zfjBIT/article/details/85113946

https://blog.csdn.net/dcrmg/article/details/53677739

你可能感兴趣的:(#,【OpenCV_增强】)