【图像处理】用传统方法进行图片过亮或过暗处理

本文介绍了如何利用直方图分析对图片进行过暗、过亮处理及对比度增强。通过直方图均衡化技术,使得图像的亮度分布更加均匀,提升图片的视觉效果。提供了Gitee链接、原理介绍、效果展示和OpenCV的Python代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Gitee地址:https://gitee.com/jzhou955/brightness-processing
欢迎 star or fork。
图片集下载:https://paperswithcode.com/dataset/lol

图片处理流程

  1. 判断图片的明暗,确定要对图片进行什么操作。
  2. 图片过暗处理。
  3. 图片过亮处理。
  4. 图片增强对比度。
  5. ……

https://juejin.cn/post/6969041259952341006
https://www.jb51.net/article/187993.htm

原理介绍

1. 直方图
  • 其实就是离散的概率分布图. 比如256灰度图.横轴就是像素值,从0-255,纵轴是当前像素值对应的像素个数。
  • 是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。
  • 可以借助观察该直方图了解需要如何调整亮度分布。这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。因此,一张较暗图片的图像直方图中的数据多集中于左侧和中间部分;而整体明亮、只有少量阴影的图像则相反。
  • 我们希望生成的新图的像素值的概率分布是平均分布的。
  • 直方图均衡化:以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图。新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化。
    • 灰度图像直方图均衡化
    • 彩色图像直
### 图像处理中的减少过曝方法和技术 在图像处理领域,减少图片过曝是一个常见的需求。以下是一些常用的技术和工具: #### 1. **自适应伽马校正** 自适应伽马校正是一种有效的技术,用于调整图像度分布。它通过分析图像的局部特征(如局部平均度、局部对比度),动态计算每个像素区域的伽马值[^3]。这种方法不仅能够改善度不均匀的问题,还能保留甚至增强图像的细节信息。 对于过曝部分,可以通过降低高区域的伽马值来减弱其影响,从而达到平衡整体度的效果。 #### 2. **直方图均衡化及其变体** 虽然传统的全局直方图均衡化主要用于提升低对比度图像的质量[^2],但对于过曝图像,可以考虑使用局部直方图均衡化其他改进版本。例如,CLAHE(Contrast Limited Adaptive Histogram Equalization)能够在保持图像自然外观的同时,有效减少因过度增强而导致的伪影问题。 MATLAB 中提供了 `adapthisteq()` 函数实现 CLAHE 功能,适合应用于含有过曝区域的图像。 #### 3. **基于 Retinex 的图像增强** Retinex 理论假设一幅图像由反射分量和光照分量组成。通过对光照分量建模并将其移除,可以显著改善图像的整体视觉效果。这种技术尤其适用于解决强光照射下的过曝现象。常用的 Retinex 变种包括单尺度 Retinex (SSR) 和多尺度 Retinex (MSR)[^4]。 #### 4. **曝光融合与 HDR 合成** 当单一图像存在严重过曝情况时,可尝试利用多张不同曝光程度的照片进行合成。HDR(High Dynamic Range Imaging, 高动态范围成像)技术正是为此设计的一种解决方案。通过将多个曝光层次不同的图像组合在一起,最终生成的画面既能展现部细节又不会丢失高光区的信息。 OpenCV 库支持多种方式创建 HDR 图像,并允许进一步色调映射以便于显示设备呈现[^5]。 ```python import cv2 import numpy as np # 加载 LDR 图像序列 images = [] for i in range(3): img = cv2.imread(f'image_{i}.jpg', cv2.IMREAD_ANYDEPTH | cv2.IMREAD_COLOR) images.append(img) alignMTB = cv2.createAlignMTB() alignMTB.process(images, images) calibrateDebevec = cv2.createCalibrateDebevec() responseDebesvec = calibrateDebevec.process(images, times=np.array([0.0333, 0.25, 1.6], dtype=np.float32)) mergeDebevec = cv2.createMergeDebevec() hdr = mergeDebevec.process(images, responseDebesvec) tonemapDrago = cv2.createTonemapDrago(gamma=2.2) ldrDrago = tonemapDrago.process(hdr.copy()) cv2.imwrite('result_dragon.jpg', ldrDrago * 255) ``` 上述代码片段展示了如何借助 OpenCV 实现基本的 HDR 流程[^5]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值