引言
伽马校正(Gamma Correction)是一种用于图像处理的技术,主要用于调整图像的亮度或对比度。其基本原理是对图像的每一个像素应用一个非线性变换,以更好地适应人眼的视觉感知。在数字图像处理中,伽马校正通常用于调整显示器的亮度和色彩。由于显示器的亮度和输入信号之间的关系并不是线性的,因此需要进行伽马校正以保证图像的正确显示。
幂律变换公式
O = C ⋅ I γ O = C \cdot I^\gamma O=C⋅Iγ
其中, O O O 是输出图像, I I I 是输入图像, C C C 是一个常数, γ \gamma γ 是伽马值。 γ \gamma γ 的值通常小于1,这样可以增强图像的暗部细节;如果 γ \gamma γ 的值大于1,那么可以增强图像的亮部细节。
点乘
在MATLAB中,点乘(element-wise multiplication)是一种对应元素之间的乘法操作。对于两个相同大小的矩阵(或向量),它们的点乘结果是一个同样大小的矩阵(或向量),其每个元素是原矩阵(或向量)对应元素的乘积。
例如,假设我们有两个向量A和B:
A = [1 2 3];
B = [4 5 6];
那么,A和B的点乘可以这样计算:
C = A .* B;
结果C是一个向量,其元素是A和B对应元素的乘积:
C = [4 10 18];
在伽马校正中,点乘常常用于将伽马值应用到图像的每个像素上。例如,I.^gamma
就是将伽马值作为指数应用到图像I的每个像素上。这是因为在MATLAB中,.^
操作符表示的就是点乘的指数形式。
应用举例
I = imread("Fig0307(a)(intensity_ramp).tif");
I = im2double(I);
figure;
subplot(2, 2, 1);
imshow(I, []);
title("Original image");
C = 1;
gamma = 0.5;
I2 = C * I .^ gamma;
subplot(2, 2, 2);
imshow(I2, []);
title("C = 1 gamma = 0.5");
C = 1;
gamma = 2;
I3 = C * I .^ gamma;
subplot(2, 2, 3);
imshow(I3, []);
title("C = 1 gamma = 2");
C = 10;
gamma = 0.5;
I4 = C * I .^ gamma;
subplot(2, 2, 4);
imshow(I4, []);
title("C = 10 gamma = 0.5");