自适应的直方图均衡化,Python

文章讨论了在RGB颜色空间直方图均衡化可能导致的问题,提倡在YUV或Lab颜色通道下进行,以保持更好的色彩保真性和避免颜色偏移。作者给出了Python代码示例,展示了如何在YUV和Lab空间中应用自适应直方图均衡化技术。
摘要由CSDN通过智能技术生成

彩色图为什么要在YUV或者Lab色彩通道下进行直方图均衡化的原因:

在RGB颜色空间中进行直方图均衡化可能引入一些问题。RGB颜色空间对颜色信息和亮度信息进行了混合,而YUV或Lab颜色空间将亮度信息与颜色信息分离,使得对亮度通道进行均衡化更为直接。

所以在RGB颜色空间执行直方图均衡化时,可能会导致颜色偏移或饱和度的变化,尤其是在图像中存在颜色梯度或色调变化较大的情况下。因为RGB颜色空间中的通道彼此相关,而且均衡化一个通道可能会影响整体颜色平衡。

所以使用YUV或Lab颜色空间能提供了更好的色彩保真性。

直接上代码:

import cv2
import os


def adaptive_histogram_equalization(input_folder, output_folder):
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 获取输入文件夹中的所有图像文件
    image_files = [f for f in os.listdir(input_folder) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp'))]

    for image_file in image_files:
        # 读取图像
        image_path = os.path.join(input_folder, image_file)
        img = cv2.imread(image_path)

        # 将图像转换为Lab颜色空间
        lab = cv2.cvtColor(img, cv2.COLOR_BGR2Lab)

        # 分割Lab通道
        l, a, b = cv2.split(lab)

        # 对亮度通道进行自适应直方图均衡化
        clahe = cv2.createCLAHE(clipLimit=0.5, tileGridSize=(8, 8))
        cl = clahe.apply(l)

        # 合并处理后的通道
        limg = cv2.merge((cl, a, b))

        # 将图像转换回BGR颜色空间
        result = cv2.cvtColor(limg, cv2.COLOR_Lab2BGR)

        # 保存结果图像
        output_path = os.path.join(output_folder, f"equalized_{image_file}")
        print("equalized_{image_file}")
        cv2.imwrite(output_path, result)


if __name__ == "__main__":
    input_folder = ".\\input"
    output_folder = ".\\output"

    adaptive_histogram_equalization(input_folder, output_folder)

YUV同理:

import cv2
import os


def adaptive_histogram_equalization(input_folder, output_folder):
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 获取输入文件夹中的所有图像文件
    image_files = [f for f in os.listdir(input_folder) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]

    for image_file in image_files:
        # 读取图像
        image_path = os.path.join(input_folder, image_file)
        img = cv2.imread(image_path)

        # 将图像转换为YUV颜色空间
        yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)

        # 对亮度通道进行CLAHE自适应直方图均衡化
        clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8))
        yuv[:, :, 0] = clahe.apply(yuv[:, :, 0])

        # 将图像转换回BGR颜色空间
        result = cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR)

        # 保存结果图像
        output_path = os.path.join(output_folder, f"equalized_{image_file}")
        print(image_file)
        cv2.imwrite(output_path, result)


if __name__ == "__main__":
    input_folder = ".\\input"
    output_folder = ".\\output"

    adaptive_histogram_equalization(input_folder, output_folder)

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值