MATLAB图像处理-图像增强之不用MATLAB自带函数对数变换和幂次变换(伽马矫正)

对数变换
对数变换(Power-Law 变换)的公式为:
对数变换公式
由一个参数决定,c,1+r的目的是保证像素值为非负数
它的作用是:扩展图像中的暗像素,可以增加低亮度的区域
示例
MATLAB函数代码如下:

function img_after = log_img(img_before, K)
img_double = im2double(img_before);
img_after = K* log(1 + img_double);
end

其中的k为放大系数,img_before为要变换的图像,img_after为变换后的图像
完整的代码如下:

img = imread('路径');
subplot(1,2,1)
imshow(img)
title('原图像')

k = 1.6;
img_P = log_img(img, k);
subplot(1,2,2)
imshow(img_P)
da = ['k=' num2str(k) '变换后的图像'];
title(da)


function img_after = log_img(img_before, K)
img_double = im2double(img_before);
img_after = K* log(1 + img_double);
end

幂次变换
幂次变换(Log变换)公式如下:
在这里插入图片描述
幂次曲线中的 值决定了是把输入窄带暗值映射到宽带输出值还是把输入窄带亮值映射到宽带输出。
γ<1时,γ↓ ⇒ 该变换将低灰度值(暗值)进行拉伸
γ>1时,γ↑ ⇒ 该变换将高灰度值(亮值)进行拉伸

示例
为什么要进行γ校正?
几乎所有的CRT显示设备、摄像胶片、许多电子照相机的光电转换特性都是非线性的。所以,如果不进行校正处理的话,将无法得到好的图像效果。
光电传感器的输入输出特性:这些非线性部件的输出与输入之间的关系可以用一个幂函数来表示,形式为:设CCD的输入(入射光强度)为r,输出(电压)为v,则有:在这里插入图片描述
对于伽马值的选取,要根据实际情况而定
c取1,伽马取不同值(小于1)图像如下:
在这里插入图片描述
c取1,伽马取不同值(大于1)图像如下:
在这里插入图片描述

同时对上方的月球图片进行处理得到:
在这里插入图片描述
MATLAB函数代码为:

function img_after = Power_law(img_before, K, c)

img_double = im2double(img_before);
img_after = K* img_double.^c;

end

完整代码为:

%图片读取
img = imread('路径');
subplot(1,2,1)
imshow(img)
title('原图像')

%参数设置
k = 1.2;
c = 0.75;
img_P = Power_law(img, k, c);
subplot(1,2,2)
imshow(img_P)
da = ['变换公式' num2str(k) '*x .\^' num2str(c) '变换后的图像'];
title(da)


function img_after = Power_law(img_before, K, c)

img_double = im2double(img_before);
img_after = K* img_double.^c;

end

如果感觉文章有用的话,点个赞O(∩_∩)O哈哈~

如果你要交作业的话,还请认真阅读,懂了之后自己写一写,那样才是自己的。

ps:部分图片来自于湖南大学图像处理课程PPT(侵删)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章