Matlab Gamma函数怎么用?新手入门教程看这里!

吉云

今天跟大家聊聊我在Matlab里捣鼓gamma函数的实践记录,这东西听起来高大上,用起来还挺有意思的。

我接到个小任务,要处理一批图像数据,听说用gamma校正能让图像看起来更舒服。当时我就懵,啥是gamma?赶紧上网查资料,大概知道gamma校正就是调整图像的亮度,让暗的地方亮起来,亮的地方暗下去,或者反过来,反正就是让图像更清晰、更符合人眼习惯。

知道概念,接下来就是实战。我得把图像读进Matlab里,这很简单,用imread函数就行。比如,我的图像叫,那就直接img = imread('*');,搞定!现在img就是一个包含图像数据的矩阵。

Matlab Gamma函数怎么用?新手入门教程看这里!

接下来就是重头戏,怎么用gamma函数进行校正?我找到imadjust这个函数,据说它可以调整图像的灰度。但是直接用imadjust好像没法直接指定gamma值,还得自己算一下。后来我发现,可以直接对图像矩阵里的每个像素值进行幂运算,这不就是gamma校正的原理嘛

比如,我想让图像变亮一点,那就设置gamma值小于1,比如0.5。代码大概是这样:


img = imread('*');

gamma = 0.5;

Matlab Gamma函数怎么用?新手入门教程看这里!

img_adjusted = im2double(img).^gamma;

imshow(img_adjusted);

这里im2double是把图像数据转换到0到1之间,方便进行幂运算。imshow就是显示图像。跑一下,图像果然亮一些,但是感觉有点过曝。

我又试gamma值大于1的情况,比如2。这回图像变暗,细节更明显。感觉找到点感觉。

Matlab Gamma函数怎么用?新手入门教程看这里!

后来我又发现,Matlab里有个gamma函数,但是这个函数不是直接用来校正图像的,而是用来计算伽马函数值的。伽马函数本身是个数学函数,跟图像处理没啥直接关系。不过我猜想,imadjust之类的函数内部可能也会用到伽马函数的一些特性,毕竟它跟亮度、对比度这些东西有关联。

为更精确地控制gamma校正,我还尝试自己写函数来实现。基本思路就是遍历图像矩阵的每个像素,然后根据gamma值进行调整。代码大概是这样:


function adjusted_img = my_gamma_correction(img, gamma)

img = im2double(img);

Matlab Gamma函数怎么用?新手入门教程看这里!

adjusted_img = img.^gamma;

end

然后调用这个函数:

Matlab Gamma函数怎么用?新手入门教程看这里!

img = imread('*');

gamma = 0.7;

adjusted_img = my_gamma_correction(img, gamma);

imshow(adjusted_img);

Matlab Gamma函数怎么用?新手入门教程看这里!

效果跟直接用幂运算差不多,但是自己写的好处是可以更灵活地控制参数,比如可以对不同的区域使用不同的gamma值。

我还尝试用histeq函数进行直方图均衡化,这个函数也能改善图像的对比度,但它的原理跟gamma校正不太一样,它是通过重新分布像素值的频率来实现的。有时候,直方图均衡化的效果比gamma校正更但有时候又不如gamma校正,具体用哪个还得看实际情况。

这回实践让我对gamma函数有更深的理解,也学会在Matlab里进行图像处理的一些基本技巧。虽然只是个小小的尝试,但感觉收获满满!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]