ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

换个新头像(解决彩色图亮度不均衡)

2021-12-30 15:58:22  阅读:193  来源: 互联网

标签:log img 均衡化 亮度 头像 直方图 换个 对比度 gain


文章目录

前言

CSDN博客好久没有换过头像了,想换个新头像,在相册里面翻来翻去,然后就找到以前养的小宠物的一些照片,有一张特别有意思
在这里插入图片描述
惊恐到站起来的金丝熊:这家伙不会要吃我吧

没见过仓鼠的小猫:这啥玩意儿?

好,就决定把这张图当自己的头像了

一顿操作之后,把头像换成了这张照片

在这里插入图片描述
这时候我想起来我学过图像处理,这用亮度变换搞一下不就可以了吗,搞起来!

注意:一般对灰度图进行亮度变换的多一点,但是我这张图是RGB图(准确来说是RGBA,但我们只取前三个通道),对于RGB图,我这里对其每个通道分别进行处理然后拼接处理

处理

对比度拉伸

也就是把图像重新缩放到指定的范围内

# 对比度拉伸
p1, p2 = np.percentile(img, (0, 70))  # numpy计算多维数组的任意百分比分位数
rescale_img = np.uint8((np.clip(img, p1, p2) - p1) / (p2 - p1) * 255)

其中,numpy的percentile函数可以计算多维数组的任意百分比分位数,因为我的图片中整体偏暗,我就把原图灰度值的0% ~ 70%缩放到0 ~255

log变换

使用以下公式进行映射:
O = g a i n ∗ l o g ( 1 + I ) O = gain*log(1 + I) O=gain∗log(1+I)

# 对数变换
log_img = np.zeros_like(img)
scale, gain = 255, 1.5
for i in range(3):
    log_img[:, :, i] = np.log(img[:, :, i] / scale + 1) * scale * gain

Gamma校正

使用以下公式进行映射:

O = I γ ∗ g a i n O = I^{\gamma} * gain O=Iγ∗gain

# gamma变换
gamma, gain, scale = 0.7, 1, 255
gamma_img = np.zeros_like(img)
for i in range(3):
    gamma_img[:, :, i] = ((img[:, :, i] / scale) ** gamma) * scale * gain

直方图均衡化

使用直方图均衡后的图像具有大致线性的累积分布函数,其优点是不需要参数。
其原理为,考虑这样一个图像,它的像素值被限制在某个特定的值范围内,即灰度范围不均匀。所以我们需要将其直方图缩放遍布整个灰度范围(如下图所示,来自维基百科),这就是直方图均衡化所做的(简单来说)。这通常会提高图像的对比度。
在这里插入图片描述

这里使用OpenCV来演示。

# 直方图均衡化
equa_img = np.zeros_like(img)
for i in range(3):
    equa_img[:, :, i] = cv.equalizeHist(img[:, :, i])

对比度自适应直方图均衡化(CLAHE)

这是一种自适应直方图均衡化方法
OpenCV提供了该方法。

# 对比度自适应直方图均衡化
clahe_img = np.zeros_like(img)
clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
for i in range(3):
    clahe_img[:, :, i] = clahe.apply(img[:, :, i])

处理结果展示

使用Matplotlib显示上述几种方法的结果:
在这里插入图片描述
可以看到,前四种方法效果都差不多,都有一个问题亮的地方过于亮,这是因为他们考虑的是全局对比度,而且因为我们使用的彩色图像原因,使用log变换的结果图中有部分区域色彩失真。最后一种CLAHE方法考虑的是局部对比度,所以效果会好一点。

因为图像是彩色的,这里我只绘制了R通道的直方图(红色线)及其累积分布函数(黑色线)
在这里插入图片描述
可以看到均衡后的图像具有大致线性的累积分布函数

总之,经过以上的探索,我最终决定使用CLAHE均衡后的结果

在这里插入图片描述
感觉是比之前的好了点

标签:log,img,均衡化,亮度,头像,直方图,换个,对比度,gain
来源: https://blog.csdn.net/weixin_44456692/article/details/122235564

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有