python实现图像自动Gamma校正方式

这篇文章主要介绍了python实现图像自动Gamma校正方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

文章源自设计学徒自学网-http://www.sx1c.com/41371.html

python图像自动Gamma校正

python实现图像自动Gamma校正方式 -1文章源自设计学徒自学网-http://www.sx1c.com/41371.html

关于Gamma

Gamma校正是对动态范围内亮度的非线性存储/还原算法,即输入值进行的非线性操作,使输出值与输入值呈指数关系;文章源自设计学徒自学网-http://www.sx1c.com/41371.html

从效果上来说Gamma校正调整图像的整体亮度,没有校正的图像看起来可能会存在过亮或太暗的情况,所以想要图像显示效果更完美,Gamma校正就显得很重要了。文章源自设计学徒自学网-http://www.sx1c.com/41371.html

Gamma矫正的计算过程如下:文章源自设计学徒自学网-http://www.sx1c.com/41371.html

1
output=input〗^(1/Gamma)

使用上面的指数函数把每个像素的RGB值进行变换。文章源自设计学徒自学网-http://www.sx1c.com/41371.html

具体执行下列转换公式(假定像素值的取值范围为0到255):文章源自设计学徒自学网-http://www.sx1c.com/41371.html

1
2
3
R=255X(R/255)〗^((1/gamma))
G=255X(G/255)〗^((1/gamma))
B=255X(B/255)〗^((1/gamma))

一般处理Gamma矫正都是通过手动调节gamma值来完成的,文章源自设计学徒自学网-http://www.sx1c.com/41371.html

但如果图片多的情况下,手动设置gamma值显得过于麻烦,文章源自设计学徒自学网-http://www.sx1c.com/41371.html

这时候就需要采用自动Gamma矫正,将RGB图片转成灰度图,文章源自设计学徒自学网-http://www.sx1c.com/41371.html

计算灰度图的数据均值,通过下面的计算公式计算gamma值。

1
gamma_val = math.log10(0.5) / math.log10(mean / 255)

python实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import cv2
import numpy as np
import math
import os
def gamma_trans(img, gamma):  # gamma函数处理
    gamma_table = [np.power(x / 255.0, gamma) * 255.0 for x in range(256)]  # 建立映射表
    gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)  # 颜色值为整数
    return cv2.LUT(img, gamma_table)  # 图片颜色查表。另外可以根据光强(颜色)均匀化原则设计自适应算法。
def nothing(x):
    pass
data_base_dir = r'./1'  # 输入文件夹的路径
outfile_dir = r'./2'  # 输出文件夹的路径
list = os.listdir(data_base_dir)
list.sort()
list2 = os.listdir(outfile_dir)
list2.sort()
for file in list# 遍历目标文件夹图片
    read_img_name = data_base_dir + '/' + file.strip()  # 取图片完整路径
    image = cv2.imread(read_img_name)  # 读入图片
    img_gray = cv2.imread(read_img_name, 0# 灰度图读取,用于计算gamma值
    mean = np.mean(img_gray)
    gamma_val = math.log10(0.5) / math.log10(mean / 255# 公式计算gamma
    image_gamma_correct = gamma_trans(image, gamma_val)  # gamma变换
    out_img_name = outfile_dir + '/' + file.strip()
    cv2.imwrite(out_img_name, image_gamma_correct)
    print("The photo which is processed is {}".format(file))

总结

以上为个人经验,希望能给大家一个参考

继续阅读
我的微信
微信扫一扫
weinxin
我的微信
惠生活福利社
微信扫一扫
weinxin
我的公众号
 
设计学徒自学网
  • 本文由 设计学徒自学网 发表于 2024年3月6日10:09:29
  • 转载请务必保留本文链接:http://www.sx1c.com/41371.html
    本站展示的所有图文软件均来自于互联网,仅用于软件学习研究分享传递,请勿商用,本站如有侵权请联系客服删除。
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖动滑块以完成验证