import cv2
import math
import imutils
import numpy as np
o=cv2.imread('C:/Users/xpp/Desktop/Lena.png')#原始图像
cv2.imshow("original",o)
gamma=np.zeros((o.shape[0],o.shape[1],3),dtype=np.float32)#幂律变换
for i in range(o.shape[0]):
for j in range(o.shape[1]):
gamma[i,j,0]=math.pow(o[i,j,0],0.4)
gamma[i,j,1]=math.pow(o[i,j,1],0.4)
gamma[i,j,2]=math.pow(o[i,j,2],0.4)
cv2.normalize(gamma,gamma,0,255,cv2.NORM_MINMAX)#图像归一化
gamma=cv2.convertScaleAbs(gamma)
cv2.imshow("result",gamma)
cv2.waitKey()
cv2.destroyAllWindows()

算法:幂律变换是是非线性变换。幂律变换应用在图像校正,对漂白的图片或者是过黑的图片进行修正。
幂律对数变换的一般形式为:
s=T(r)=c*r^γ
其中,r为原始图像灰度值,γ为幂指数,c为尺度比较常数,s为幂律变换后的目标灰度值。
考虑到偏移量ε:
s=T(r)=c*(r+ε)^γ
例子:

r>1的值所生成的曲线和r<1的值所生成的曲线的效果完全相反。当c=r=1时简化成了恒等变换。
根据γ的大小,一般分为以下两种情况:
注意:参数r和s的取值范围为[0,1]。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!