使用派生映射函数修改s?

Use a derived mapping function to modify s?

我已经多次阅读整篇论文,并且找到了一种方法来制作 python 中的所有内容...除了这个(第二条,C 节)。他们希望我用旧最小值的 2.589 倍的新最小值和旧最大值的 0.9 倍的新最大值来提升饱和度值。我该如何实现?

编辑:多亏了 fmw42,我现在有了一个代码,大致可以完成它应该做的事情,但是当我使用我的 dtw 值时它会抛出一个错误“'tuple' 对象没有属性 'dtype'” 我的代码:

hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv_img)
clahe = cv2.createCLAHE(clipLimit=2.6, tileGridSize=(3,3))
clahe_v = clahe.apply(v)
dwts = pywt.dwt(s, 'bior1.3')

smin = np.amin(dwts)
smax = np.amax(dwts)
print("smin:", smin, "smax:", smax)
sleep(2)
smin_new = 2.589 * smin
smax_new = 0.9 * smax
print("smin_new:", smin_new, "smax_new:", smax_new)
sleep(2)

magic_s = skimage.exposure.rescale_intensity(dwts, in_range=(smin,smax), out_range=(smin_new,smax_new)).astype(np.uint8)

抱歉 google link 顺便说一句 :( 文章 link:[https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwjx2_Cay9z3AhWDyYsKHdeFCn8QFnoECAoQAQ&url= https%3A%2F%2Fcore.ac.uk%2Fdownload%2Fpdf%2F228552574.pdf&usg=AOvVaw15wEM7_gVgvmVZhmHNTksN][1]

在Python/OpenCV/Numpy/Skimage中,您可以使用np.amin() 和np.amax() 来获取图像中的最小值和最大值。然后根据 Python 简单数学中的“旧最小值的 2.589 倍,旧最大值的 0.9 倍的新最大值”计算新的最小值和最大值。然后使用 skimage.exposure.rescale_intensity() 进行从输入值到新输出值的处理。

这是一个使用旧最小值的 5 倍和旧最大值的 0.5 倍的示例,以便更明显地看到变化。

输入:

import cv2
import numpy as np
import skimage.exposure

# read image
img = cv2.imread("lena.png")

# convert bgr to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# extract channels
h,s,v = cv2.split(hsv)

# get min and max of saturation channel
smin = np.amin(s)
smax = np.amax(s)
print("smin:", smin, "smax:", smax)

# compute new saturation values
#smin_new = 2.589 * smin
#smax_new = 0.9 * smax
smin_new = 5 * smin
smax_new = 0.5 * smax
print("smin_new:", smin_new, "smax_new:", smax_new)

# modify saturation
s_new = skimage.exposure.rescale_intensity(s, in_range=(smin,smax), out_range=(smin_new,smax_new)).astype(np.uint8)

# merge hsv channels
hsv_new = cv2.merge([h,s_new,v])

# convert hsv to bgr
result = cv2.cvtColor(hsv_new, cv2.COLOR_HSV2BGR)

# save result
cv2.imwrite('lena_modified_saturation.png', result)

cv2.imshow('saturation', s)
cv2.imshow('saturation_modified', s_new)
cv2.imshow('result', result)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

计算:

最小:10 最大:255 smin_new: 50 smax_new: 127.5

结果: