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 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(i, j) = pow(img.at(i, j)/255.0, 0.3)*255.0; //[0,1]才会有gamma特性,0.2^0.3 == 0.6
}
}
imshow("效果图", newImg);
waitKey(0);
return 0;
}