我有一些彩色照片,照片中的照明不规则:图像的一侧比另一侧更亮。
我想通过校正照明来解决这个问题。我认为局部对比会帮助我,但我不知道如何:(
你能帮我一段代码或管道吗?
原文由 user3762718 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一些彩色照片,照片中的照明不规则:图像的一侧比另一侧更亮。
我想通过校正照明来解决这个问题。我认为局部对比会帮助我,但我不知道如何:(
你能帮我一段代码或管道吗?
原文由 user3762718 发布,翻译遵循 CC BY-SA 4.0 许可协议
HSV的值通道是B、G、R值中的最大值。因此感知亮度可以通过以下公式获得。
我已将 CLAHE 应用于此频道,看起来不错。
我计算图像的感知亮度通道
a - > 我将图像更改为 HSV 颜色空间,并通过添加 CLAHE 应用的感知亮度通道来替换图像中的 V 通道。
b -> 我将图像更改为 LAB 颜色空间。我通过添加 CLAHE 应用的感知亮度通道来替换图像中的 L 通道。
然后我再次将图像转换为 BGR 格式。
我的步骤的python代码
import cv2
import numpy as np
original = cv2.imread("/content/rqq0M.jpg")
def get_perceive_brightness(img):
float_img = np.float64(img) # unit8 will make overflow
b, g, r = cv2.split(float_img)
float_brightness = np.sqrt(
(0.241 * (r ** 2)) + (0.691 * (g ** 2)) + (0.068 * (b ** 2)))
brightness_channel = np.uint8(np.absolute(float_brightness))
return brightness_channel
perceived_brightness_channel = get_perceive_brightness(original)
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
clahe_applied_perceived_channel = clahe.apply(perceived_brightness_channel)
def hsv_equalizer(img, new_channel):
hsv = cv2.cvtColor(original, cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv)
merged_hsv = cv2.merge((h, s, new_channel))
bgr_img = cv2.cvtColor(merged_hsv, cv2.COLOR_HSV2BGR)
return bgr_img
def lab_equalizer(img, new_channel):
lab = cv2.cvtColor(original, cv2.COLOR_BGR2LAB)
l,a,b = cv2.split(lab)
merged_lab = cv2.merge((new_channel,a,b))
bgr_img = cv2.cvtColor(merged_hsv, cv2.COLOR_LAB2BGR)
return bgr_img
hsv_equalized_img = hsv_equalizer(original,clahe_applied_perceived_channel)
lab_equalized_img = lab_equalizer(original,clahe_applied_perceived_channel)
hsv_equalized_img 的输出
原文由 Sivaram Rasathurai 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答1k 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
1 回答926 阅读✓ 已解决
4 回答668 阅读
2 回答805 阅读
1 回答798 阅读
2 回答1.2k 阅读
将 RGB 图像转换为 Lab 颜色空间(例如,任何具有亮度通道的颜色空间都可以正常工作),然后将 自适应直方图均衡 应用于 L 通道。最后将生成的 Lab 转换回 RGB。
您想要的是 OpenCV 的 CLAHE(对比度受限自适应直方图均衡)算法。但是,据我所知,它没有记录在案。 python 中有一个例子。您可以在 Graphics Gems IV 中阅读 CLAHE,第 474-485 页
以下是 CLAHE 的示例:
这是基于 http://answers.opencv.org/question/12024/use-of-clahe/ 生成上述图像的 C++,但扩展了颜色。