在 Photoshop 中,可以在 CIE L a b* 颜色空间中调整 L、a 和 b 的颜色曲线。我正在尝试使用 python 中的伽马校正执行类似的图像增强过程。
但是,这只会在一个方向上调整曲线,朝向左上角或右下角。我可以在 python 中执行任何转换来调整曲线吗?
我已经应用了伽玛校正技术,但这会使颜色偏斜太多。
我已经尝试了以下代码进行伽马校正
def adjust_gamma(image, gamma=1.0):
m,n,c = image.shape
res = np.zeros((m,n,c))
# build a lookup table mapping the pixel values [0, 255] to
# their adjusted gamma values
invGamma = 1.0 / gamma
table = np.array([((i / 255.0) ** invGamma) * 255
for i in np.arange(0, 256)]).astype("uint8")
# apply gamma correction using the lookup table
return cv2.LUT(image, table,res)
def toLAB(image, input_type = 'BGR'):
conversion = cv2.COLOR_BGR2LAB if input_type == 'BGR' else cv2.COLOR_RGB2LAB
image_LAB = cv2.cvtColor(image, conversion)
y,x,z = image_LAB.shape
LAB_flat = np.reshape(image_LAB, [y*x,z])
colors = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) if input_type == 'BGR' else image
colors = np.reshape(colors, [y*x,z])/255.
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(xs=LAB_flat[:,2], ys=LAB_flat[:,1], zs=LAB_flat[:,0], s=10, c=colors, lw=0)
ax.set_xlabel('A')
ax.set_ylabel('B')
ax.set_zlabel('L')
plt.show()
return image_LAB
lab_image = toLAB(image_BGR)
L,a,b = cv2.split(lab_image)
l = np.zeros((500,500,3))
l[:,:,0] = b
l[:,:,1] = b
l[:,:,2] = b
l = np.uint8(l)
adjusted = adjust_gamma(l, gamma=1.2)
cv2_imshow(np.hstack([l, adjusted]))
gamma_lab = cv2.merge([L,a,adjusted[:,:,0]])
# final_image = cv2.cvtColor(merged_channels, cv2.COLOR_LAB2BGR)
new = cv2.cvtColor(gamma_lab, cv2.COLOR_LAB2BGR)```