【图像处理知识复习】02伽马校正matlab,C++实现

版权声明:原创文章,欢迎转载。转载请注明:转载自https://blog.csdn.net/jizhidexiaoming https://blog.csdn.net/jizhidexiaoming/article/details/80230066

1. 背景

伽马校正可以用来调整图像的亮度,公式为 I = I^gamma。

当gamma>1,高光部分动态范围被压缩,低光部分动态范围被扩展(使低光部分的细节可以看清),图像整体变暗;

当gamma<1,高光部分被扩展,低光部分被压缩,图像整体变亮。

如图:



2. matlab代码:

clc;
clear;

gamma = 0.3;
img = imread('D:/Code/Image/half.jpg');
img = rgb2gray(img);
figure,imshow(img);

img = double(img);
[row,col] = size(img);
new_img = zeros(row,col);
for i = 1:row
    for j = 1:col
        new_img(i,j) = img(i,j).^gamma;
    end
end

new_img = mat2gray(new_img);
figure,imshow(new_img);

效果如下,gamma设置为0.3,低光部分动态范围扩大:



3. C++代码:

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
	Mat img = imread("D:/Code/Image/half.jpg",0);
	imshow("原始图", img);

	Mat newImg = Mat::zeros(img.size(), img.type());
	for (int i = 0; i < img.rows; i++)
	{
		for (int j = 0; j < img.cols; j++)
		{
			newImg.at<uchar>(i, j) = pow(img.at<uchar>(i, j)/255.0, 0.3)*255.0;  //[0,1]才会有gamma特性,0.2^0.3 == 0.6
		}
	}

	imshow("效果图", newImg);
	waitKey(0);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/jizhidexiaoming/article/details/80230066