gpt4 book ai didi

python - 高斯差分滤波 (DoG) 未给出预期结果

转载 作者:行者123 更新时间:2023-12-01 06:39:36 25 4
gpt4 key购买 nike

我正在尝试实现原始论文中的方法(Enhanced LocalTextureFeatureSetsforFace在困难光照条件下的识别,作者:Xiaoyang Tan 和 Bill Triggs)在 python 3.6 和 Opencv 4.2 中,
但是当我将预处理应用于图像时,它没有给出与论文中相同的结果尽管我使用了指定的相同参数:
1- 进行gamma校正,gamma=0.2
2- 对于 DoG,(sigma0=1,sigma1=2)
3- 对于对比度均衡,tau=10 且 alpha=0.1

这是预期的结果和我得到的结果:

Original Image resulted image expected image

这是我使用的代码:

img_original = cv.imread('C:/Users/Ouss/Desktop/TP-LTP/face.jpg', cv.IMREAD_GRAYSCALE)

# gamma correction
lookUpTable = np.empty((1, 256), np.uint8)
for i in range(256):
# calculating the new values
lookUpTable[0, i] = np.clip(pow(i / 255.0, 2) * 255.0, 0, 255)
# mapping the new values with the original
gamma_corrected_img = cv.LUT(img_original, lookUpTable)

# DOG
blur1 = cv.GaussianBlur(gamma_corrected_img, (3, 3), 1, borderType=cv.BORDER_REPLICATE)
blur2 = cv.GaussianBlur(gamma_corrected_img, (7, 7), 2, borderType=cv.BORDER_REPLICATE)

dog_img = cv.subtract(blur1, blur2)

# contrast equalisation
# step 1
alpha = 0.1
tau = 10
temp1 = pow(np.abs(dog_img), alpha)
meanImg = np.mean(temp1)

Contrast_Equa_step01 = dog_img / pow(meanImg, 1/alpha)
# step 2
minMat = np.abs(Contrast_Equa_step01)
minMat[minMat > tau] = tau
temp2 = pow(minMat, alpha)
meanImg2 = np.mean(temp2)
Contrast_Equa_step02 = Contrast_Equa_step01 / pow(meanImg2, 1/alpha)
CEqualized_img = tau * np.tanh((Contrast_Equa_step02/tau))

最佳答案

我认为你的主要问题是 tau=10.0 太大。它似乎对我有用,tau=3.0,我的图像标准化为 0 到 1 范围内的 float 。然后最后乘以 255 并转换为 uint8。

这是我的 Python/OpenCV 代码。我保存了 Gamma 校正、DoG 和对比度均衡第一阶段的版本,缩放比例为 255 至 uint8,以供查看。我还通过除以最大绝对值将值拉伸(stretch)到 -1 到 1 来标准化 DoG(尽管不需要)。标准化为 DoG 提供了更好的对比度。我还交换了 DoG 中两个模糊图像的顺序以匹配他的对比度极性。

输入:

enter image description here

import cv2
import numpy as np

# Reference: Enhanced Local Texture Feature Sets for Face Recognition Under Difficult Lighting Conditions by Xiaoyang Tan and Bill Triggs
# https://lear.inrialpes.fr/pubs/2007/TT07/Tan-amfg07a.pdf

# read image as grayscale float in range 0 to 1
img = cv2.imread('face.jpg', cv2.IMREAD_GRAYSCALE).astype(np.float64) / 255.0

# set arguments
gamma = 0.2
alpha = 0.1
tau = 3.0

# gamma correction
img_gamma = np.power(img, gamma)
img_gamma2 = (255.0 * img_gamma).clip(0,255).astype(np.uint8)

# DOG
blur1 = cv2.GaussianBlur(img_gamma, (0,0), 1, borderType=cv2.BORDER_REPLICATE)
blur2 = cv2.GaussianBlur(img_gamma, (0,0), 2, borderType=cv2.BORDER_REPLICATE)
img_dog = (blur1 - blur2)
# normalize by the largest absolute value so range is -1 to
img_dog = img_dog / np.amax(np.abs(img_dog))
img_dog2 = (255.0 * (0.5*img_dog + 0.5)).clip(0,255).astype(np.uint8)

# contrast equalization equation 1
img_contrast1 = np.abs(img_dog)
img_contrast1 = np.power(img_contrast1, alpha)
img_contrast1 = np.mean(img_contrast1)
img_contrast1 = np.power(img_contrast1,1.0/alpha)
img_contrast1 = img_dog/img_contrast1

# contrast equalization equation 2
img_contrast2 = np.abs(img_contrast1)
img_contrast2 = img_contrast2.clip(0,tau)
img_contrast2 = np.mean(img_contrast2)
img_contrast2 = np.power(img_contrast2,1.0/alpha)
img_contrast2 = img_contrast1/img_contrast2
img_contrast = tau * np.tanh((img_contrast2/tau))

# Scale results two ways back to uint8 in the range 0 to 255
img_contrastA = (255.0 * (img_contrast+0.5)).clip(0,255).astype(np.uint8)
img_contrastB = (255.0 * (0.5*img_contrast+0.5)).clip(0,255).astype(np.uint8)

# show results
cv2.imshow('Face', img)
cv2.imshow('Gamma', img_gamma2)
cv2.imshow('DoG', img_dog2)
cv2.imshow('CE1', img_contrast1)
cv2.imshow('CE_A', img_contrastA)
cv2.imshow('CE_B', img_contrastB)
cv2.waitKey(0)
cv2.destroyAllWindows()

# save results
cv2.imwrite('face_contrast_equalization_A.jpg', img_contrastA)
cv2.imwrite('face_contrast_equalization_B.jpg', img_contrastB)


根据如何将结果从 float 缩放回 0 到 255 范围内的 uint8,得到的结果略有不同。第一种方法只是在乘以 255 之前偏置 0.5。第二种方法是先乘以 0.5,然后在乘以 255 之前偏置 0.5 .方法 A 可能更接近引用文献作者所实现的结果。

缩放方法 A: enter image description here

缩放方法 B: enter image description here

调高或调低 tau 以获得您想要的对比度。

关于python - 高斯差分滤波 (DoG) 未给出预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59516492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com