【OpenCV实现图像:用OpenCV图像处理技巧之白平衡算法】

news2024/11/24 14:22:29

文章目录

    • 概要
    • 加载样例图像
    • 统计数据分析
    • White Patch Algorithm
    • 小结

概要

白平衡技术在摄影和图像处理中扮演着至关重要的角色。在不同的光照条件下,相机可能无法准确地捕捉到物体的真实颜色,导致图像呈现出暗淡、色调不自然或者褪色的效果。为了解决这个问题,我们需要了解和应用白平衡技术。

白平衡的重要性

在日常生活中,我们经常会遇到不同光源下拍摄的照片,比如在室内使用白炽灯、荧光灯,或者在室外阳光下拍摄。不同类型的光源会产生不同色温的光线,而相机可能无法自动适应这些光线的差异。这就导致了照片中的颜色看起来不真实,不符合我们的视觉感受。

白平衡的原理

白平衡技术的基本原理是通过调整图像中各个颜色通道的增益,使得图像中的灰度区域呈现出中性灰色。简单来说,就是让白色看起来像白色,黑色看起来像黑色。这样一来,不同光源下拍摄的图像就能更准确地还原物体的真实颜色。

白平衡的调整方法

预设白平衡模式: 相机通常提供了一些预设的白平衡模式,比如日光、阴天、荧光灯、白炽灯等。选择合适的预设模式可以在一定程度上改善图像的颜色偏差。

手动白平衡: 在一些相机中,我们可以手动设置白平衡。这通常需要在拍摄场景中放置一个白色卡片,让相机通过这个参考物体来调整白平衡。

后期处理: 在图像处理软件中,我们也可以进行白平衡的调整。通过调整图像的色温、色调和饱和度等参数,我们可以更精细地控制图像的颜色效果。

白平衡技术的应用

白平衡技术不仅在摄影中应用广泛,在图像处理、广告设计、艺术创作等领域也有重要作用。在商品拍摄、人像摄影、风景摄影等各种场景中,合适的白平衡调整能够提高照片的质量,使其更具吸引力和真实感。

白平衡是一项用于校正由不同照明条件引起的图像颜色偏差的技术。它通过调整图像的颜色对比度,使白色看起来像白色,使黑色看起来像黑色。这个过程非常重要,因为它确保了图像中的颜色是准确的,同时也使图像对人眼来说看起来更加自然。

加载样例图像

# 导入必要的Python库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from skimage import io, img_as_ubyte
from skimage.io import imread, imshow
from matplotlib.patches import Rectangle

# 加载样例图像
from skimage import io
import matplotlib.pyplot as plt

# 读取图像文件
image = io.imread(r'E:\yolo项目\Opencv-project-main\Opencv-project-main\CVZone\img.png')

# 显示原始图像
plt.figure(figsize=(10,10))
plt.title('Original Image')  # 设置图像标题
plt.imshow(image)  # 显示图像
plt.show()  # 显示图像

结果:
在这里插入图片描述

统计数据分析

# 导入必要的Python库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from skimage import io, img_as_ubyte
from skimage.io import imread, imshow
from matplotlib.patches import Rectangle

# 加载样例图像
from skimage import io
import matplotlib.pyplot as plt

# 读取图像文件
image = io.imread('qmark.png')

# 显示原始图像
plt.figure(figsize=(10,10))
plt.title('Original Image')  # 设置图像标题
plt.imshow(image)  # 显示图像
plt.show()  # 显示图像

# 分析图像中的统计信息
def calc_color_overcast(image):
    # 计算每个通道的颜色偏差
    red_channel = image[:, :, 0]  # 红色通道
    green_channel = image[:, :, 1]  # 绿色通道
    blue_channel = image[:, :, 2]  # 蓝色通道

    # 创建一个DataFrame来存储结果
    channel_stats = pd.DataFrame(columns=['Mean', 'Std', 'Min', 'Median', 'P_80', 'P_90', 'P_99', 'Max'])

    # 计算并存储每个颜色通道的统计信息
    for channel, name in zip([red_channel, green_channel, blue_channel], ['Red', 'Green', 'Blue']):
        mean = np.mean(channel)  # 平均值
        std = np.std(channel)  # 标准差
        minimum = np.min(channel)  # 最小值
        median = np.median(channel)  # 中位数
        p_80 = np.percentile(channel, 80)  # 80th百分位数
        p_90 = np.percentile(channel, 90)  # 90th百分位数
        p_99 = np.percentile(channel, 99)  # 99th百分位数
        maximum = np.max(channel)  # 最大值

        # 将统计信息存储到DataFrame中
        channel_stats.loc[name] = [mean, std, minimum, median, p_80, p_90, p_99, maximum]

    return channel_stats
# 计算颜色通道的统计信息
channel_stats = calc_color_overcast(image)

# 打印统计信息
print(channel_stats)

定义了一个函数 calc_color_overcast(image),该函数用于计算图像中每个颜色通道(红色、绿色、蓝色)的统计信息,包括均值、标准差、最小值、中位数、80th、90th、99th 百分位数以及最大值。这些信息对于分析图像的颜色特性非常有用。

结果:
在这里插入图片描述

White Patch Algorithm

白色补丁算法是图像处理中常用的一种颜色平衡方法。其目标是通过缩放图像的颜色通道,使得每个通道中最亮的像素变为白色。这一方法基于假设:图像中最亮的像素应当代表白色。通过调整每个通道的亮度,算法可以校正图像的颜色投射,实现图像的白平衡。

# 导入必要的Python库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from skimage import io, img_as_ubyte
from skimage.io import imread, imshow
from matplotlib.patches import Rectangle

# 加载样例图像
from skimage import io
import matplotlib.pyplot as plt

# 读取图像文件




def white_patch(image, percentile=100):
    """
    Returns a plot comparison of original and corrected/white balanced image
    using the White Patch algorithm.

    Parameters
    ----------
    image : numpy array
            Image to process using white patch algorithm
    percentile : integer, optional
                  Percentile value to consider as channel maximum
    """
    white_patch_image = img_as_ubyte(
        (image * 1.0 / np.percentile(image,
                                     percentile,
                                     axis=(0, 1))).clip(0, 1))
    # Plot the comparison between the original and white patch corrected images
    fig, ax = plt.subplots(1, 2, figsize=(10, 10))
    ax[0].imshow(image)
    ax[0].set_title('Original Image')
    ax[0].axis('off')

    ax[1].imshow(white_patch_image, cmap='gray')
    ax[1].set_title('White Patch Corrected Image')
    ax[1].axis('off')

    plt.show()

# Read the input image
image = imread(r'E:\yolo项目\Opencv-project-main\Opencv-project-main\CVZone\img.png')

# Call the function to implement white patch algorithm
white_patch(image, 100)

在这里插入图片描述
使用默认参数percentile=100并没有明显改善图像,因为图像中RGB通道的最大值已经是[255, 255, 255]。通过观察前一章节中的统计信息,我们可以看到RGB通道的最大值和99百分位数都是255。

为了解决这个问题,我们可以考虑将像素值的较低百分位数视为最大值,而不是绝对的最大值。

white_patch(image, 85)

结果:
在这里插入图片描述

小结

优点:

简单易用:白色补丁算法的实现相对简单,易于理解和操作。这使得它成为修复图像白平衡问题的一种便捷选择,尤其是对于那些不需要复杂操作的场景。

针对特定场景有效:该算法在处理具有主要白色区域或中性灰色区域的图像时非常有效。特别是当图像中存在明显的明亮区域时,白色补丁算法可以显著地改善图像的色彩平衡问题,使图像更加清晰和自然。

适用性广泛:白色补丁算法可以广泛应用于各种场景,包括摄影、图像处理等领域。它不仅适用于专业摄影师,也可以被普通用户用于简单的图像修复工作。

缺点:

假设限制:算法的核心假设是图像中最亮的颜色是白色,然而,在实际场景中,图像中的最亮颜色可能是其他颜色。当这一假设不成立时,白色补丁算法的效果可能受到限制,无法完全修复图像的白平衡问题。

过度校正风险:如果算法的假设不成立,可能会导致过度校正,使图像出现不自然的颜色或伪影。过度校正可能会引入新的问题,影响图像的质量和真实性。

颜色偏移和伪影:由于算法的基本假设,即图像中最亮的区域是白色,可能会导致图像的某些区域出现颜色偏移或伪影。这种现象可能在图像的边缘或高光区域更为明显,影响整体视觉效果。在一些特殊场景下,这种颜色偏移和伪影可能会对图像的真实性产生负面影响。

在使用白色补丁算法时,用户需要根据具体情况权衡其优点和缺点,确保选择合适的场景和图像以获得最佳的修复效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1189410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++11常用特性

目录 1、{}初始化 2、auto 3、decltype 4、nullptr 5、范围for 6、STL容器 7、右值引用 ①左值引用和右值引用 ②移动构造 ③移动赋值 ④万能引用与完美转发 8、新的类功能 9、可变模版参数 10、lambda表达式 捕捉列表的使用 [val]:传值捕捉 [&…

ChatGPT生产力|中科院学术ChatGPT优化配置

资源链接:GitHub - binary-husky/gpt_academic b站配置讲解链接:chatgpt-academic 新手运行官方精简指南(科研chatgpt拓展) 某知配置图文讲解:图文详解:在windows中部署ChatGPT学术版 - 知乎 (zhihu.com) 一…

经典OJ题:随机链表的复制

目录 题目: 本题的解图关键在于画图与看图! 思路分析: 方法一:暴力求解法。 方法二:插入法 方法解析: 步骤一、插入 步骤二、 处理每一个copy的randdom指针⭐————重点 步骤三、拆卸节点 代码…

轻松与任何 SQL 数据库集成:Directus 助你无代码开发 | 开源日报 No.69

Ebazhanov/linkedin-skill-assessments-quizzes Stars: 26.5k License: AGPL-3.0 这个项目是一个 LinkedIn 技能评估答案的存储库。它提供了各种领域和主题的问题和答案,以帮助用户更好地学习新概念并准备相关考试。该项目具有以下核心优势: 提供多语…

HarmonyOS开发:UI开展前的阶段总结

前言 关于HarmonyOS,陆陆续续总结了有14篇的文章,大家可以发现,没有一篇是关于UI相关的,不是自己没有分享的打算,而是对于这些UI而言,官方都有着一系列的文档输出,如果我再一一的分享&#xff0…

SPSS线性回归

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…

高级运维学习(十五)Zabbix监控(二)

一 Zabbix 报警机制 1 基本概念 自定义的监控项默认不会自动报警首页也不会提示错误需要配置触发器与报警动作才可以自动报警 2 概念介绍 (1)触发器 (trigger) 表达式,如内存不足300M,用户超过30个等 当触发条件发生后&a…

【自然语言处理】基于python的问答系统实现

一,文件准备 该问答系统是基于已知的问题和其一一对应的答案进行实现的。首先需要准备两个文本文件,分别命名为“question.txt”和“answer.txt”,分别是问题文件和答案文件,每一行是一个问题以及对应的答案。 问题文件: 中国的首…

Pytorch模型使用与修改、保存与加载

模型的使用及修改、保存与加载 以图像处理中torchvision为例,PyTorch通过torchvision.models模块提供了更多的预训练模型. 在图像分类当中,包括许多模型 import torchvision import warnings import torch warnings.filterwarnings("ignore&quo…

3D Gaussian Splatting:用于实时的辐射场渲染

Kerbl B, Kopanas G, Leimkhler T, et al. 3d gaussian splatting for real-time radiance field rendering[J]. ACM Transactions on Graphics (ToG), 2023, 42(4): 1-14. 3D Gaussian Splatting 是 Siggraph 2023 的 Best Paper,法国团队在会议上展示了其实现的最…

软件测试|iOS 自动化测试——技术方案、环境配置

移动端的自动化测试,最常见的是 Android 自动化测试,我个人觉得 Android 的测试优先级会更高,也更开放,更容易测试;而 iOS 相较于 Android 要安全稳定的多,但也是一个必须测试的方向,这个系列文…

Bean作用域

从笔者之前的博客,我们可以看出 Spring 是⽤来读取和存储 Bean,因此在 Spring 中 Bean 是最核⼼的操作 资源,所以接下来我们深⼊学习⼀下 Bean 对象:Bean作用域! 限定程序中变量的可用范围叫做作用域!或者…

【遮天】荒古禁地采取圣药,姬老自己走上绝路,故事扣人心悬

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料,《遮天》动漫第30话最新剧情解析,姬云峰,姬家的长老,地位崇高,深受家族成员的尊敬和信赖。他的智慧和经验在家族中享有极高的声望&#xf…

【MATLAB源码-第72期】基于matlab的OFDM-IM索引调制系统在高斯,瑞利,莱斯信道误码率对比,对比传统OFDM系统。

操作环境: MATLAB 2022a 1、算法描述 OFDM-IM索引调制技术是一种新型的无线通信技术,它将正交频分复用(OFDM)和索引调制(IM)相结合,以提高频谱效率和系统容量。OFDM-IM索引调制技术的基本思想…

【字符串】【完整程序+倒序输出+每个区间倒序输出】KamaCoder55

【字符串】【完整程序倒序输出每个区间倒序输出】KamaCoder55 解法1 完整程序书写kama 倒序输出每个区间倒序输出 ---------------🎈🎈题目链接🎈🎈------------------- 解法1 完整程序书写kama 倒序输出每个区间倒序输出 时间…

docker部署redis6

前言:在离线服务器上(无联网),部署redis的方式,采用docker是比较方便的。下面将描述如何使用docker部署单机版redis 环境:centos 7 redis:6.2.14 docker:20.10.9 1.下载 redis 镜像…

取产品之道、赚效率的钱,锅圈万店背后的赢家法则

万店,一个真正意义上的规模壁垒,当它出现在任何行业时,都意味着这个玩家身上存在许多领先于行业的优势。 这一点,在刚于近日登录港交所的锅圈食品(以下简称“锅圈”)身上尤其明显——2017年,锅…

浅谈插接母线温度在线监测系统研究与应用-安科瑞黄安南

摘要 低压封闭式插接母线是供配电设施的关键部件,安装在生产车间内部高空,不易保养和维护,在安装不良或保养不当时易发生故障。插接点温度的异常变化与母线故障的发生有着密切的关系,以汽车整车制造工厂为例,提出母线接…

梓航DIY无限建站-3.5.8(企业官网 应用首页 PC建站 14套模板切换,自由组合页面,无限多开)

梓航DIY无限建站是一款支持无限建站的公众号应用。 自定义网址 全局样式设置 极速建站 更灵活 更方便。 1、默认页面指定设置,更灵活、更方便; 2、全局样式设置,减少页面重复设置工作; 3、不限数量网站制作装修(想做…