我正在尝试在 Yoshua Bengio 的深度学习书(第 12.2.1.1 节第 442 节)中的 python 中实现全局对比度归一化。从书中,为了使用全局对比度归一化获得归一化图像,我们使用以下等式:
在哪里 是图像的张量,并且 是归一化图像的张量,并且 是原始图像像素的平均值。 和 是一些常数,通常与 和 设置为一个非常小的数字,这是我的实现:
import Image
import numpy as np
import math
def global_contrast_normalization(filename, s, lmda, epsilon):
X = np.array(Image.open(filename))
X_prime=X
r,c,u=X.shape
contrast =0
su=0
sum_x=0
for i in range(r):
for j in range(c):
for k in range(u):
sum_x=sum_x+X[i][j][k]
X_average=float(sum_x)/(r*c*u)
for i in range(r):
for j in range(c):
for k in range(u):
su=su+((X[i][j][k])-X_average)**2
contrast=np.sqrt(lmda+(float(su)/(r*c*u)))
for i in range(r):
for j in range(c):
for k in range(u):
X_prime[i][j][k] = s * (X[i][j][k] - X_average) / max(epsilon, contrast)
Image.fromarray(X_prime).save("result.jpg")
global_contrast_normalization("cat.jpg", 1, 10, 0.000000001)
原图:
结果图像:
我得到了意想不到的结果。我的实施有什么问题?