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

news2024/11/18 3:32:16

文章目录

    • 概要
    • Gray-world Algotithm
    • Ground Truth Algorithm
    • 结论:

概要

随着数字图像处理技术的不断发展,白平衡算法成为了图像处理中一个关键的环节。白平衡的目标是校正图像中的颜色偏差,使得白色在图像中呈现真实的白色,从而提高图像的质量。
常用的白平衡算法:White Patch、Gray World、和 Ground Truth 算法

White Patch算法:
White Patch算法基于假设:图像中存在一个最亮的区域,该区域应该是白色的。该算法通过检测图像中最亮的区域并调整整个图像的色调来实现白平衡。White Patch算法适用于通用颜色校正,因为它相对简单且在许多情况下表现良好。

Gray World算法:
Gray World算法假设图像中的平均颜色应该是灰色的,通过调整图像的色调来使平均颜色趋近于灰色。这种算法对于一些场景中的光照条件变化较大的图像表现较好,适用于通用颜色校正。它在实现上相对简单,计算量也较小。

Ground Truth算法:
Ground Truth算法是一种专业应用的白平衡算法,它依赖于图像中有参考白色补丁的信息。通过分析这些参考白色补丁的颜色信息,算法可以更准确地进行白平衡校正。这种算法适用于对颜色要求较高、有参考标准的专业应用,例如医学影像、卫星图像等领域。

Gray-world Algotithm

灰色世界算法是一种白平衡算法,其原理基于假设图像的平均颜色应该是灰色的。在实现中,算法首先计算图像的平均亮度以及每个颜色通道的平均亮度。然后,通过计算亮度比例,对每个颜色通道进行相应的调整,以校正颜色映射关系。最终,通过灰色世界校正,图像呈现更为真实和自然的颜色。

该算法对于一些场景中光照条件变化较大的图像表现较好,是一种简单而有效的白平衡方法。通过调整图像的颜色映射关系,灰色世界算法能够提高图像的色彩准确性,使得图像更符合人眼感知的自然色彩。

import cv2
import matplotlib.pyplot as plt

def gray_world(image_path):
    # 读取图像
    image = cv2.imread(image_path)

    # 转换图像颜色通道顺序(OpenCV使用BGR,而matplotlib使用RGB)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    # 计算图像的平均亮度
    avg_brightness = image.mean()

    # 计算每个颜色通道的平均亮度
    avg_channel_brightness = image.mean(axis=(0, 1))

    # 计算亮度比例,并相应地调整每个颜色通道
    image_grayworld = ((image * (avg_brightness / avg_channel_brightness)).clip(0, 255).astype(int))

    # 绘制原始图像和灰色世界校正后的对比图
    fig, ax = plt.subplots(1, 2, figsize=(14, 10))
    ax[0].imshow(image)
    ax[0].set_title('原始图像')
    ax[0].axis('off')

    ax[1].imshow(image_grayworld)
    ax[1].set_title('灰色世界校正后的图像')
    ax[1].axis('off')

    plt.show()

# 调用函数应用灰色世界算法
# Use a raw string for the file path
gray_world('4444.png')


在这里插入图片描述
对于灰色世界算法,以下是其优缺点的总结:

优点:

简单且计算高效: 灰色世界算法是一种简单直观的颜色校正方法,计算过程相对高效。

合理性假设: 算法基于图像的平均颜色应该是灰色的合理性假设。在许多场景中,这个假设是成立的,因为在典型的场景中,整体色调趋于中性。

缺点:

对单一主色敏感: 该算法可能对大面积存在的单一主色较为敏感,导致颜色平衡算法无法正常工作。如果图像中存在大块的单一颜色,算法可能会偏向调整其他颜色,而对这个主色不敏感。

不总是正确的假设: 灰色世界算法的核心假设是图像的平均颜色应该是灰色的,然而,在某些场景中,这个假设并不总是正确的。例如,如果图像中有很强的色调偏移或特殊照明条件,灰色世界算法可能产生不理想的结果。

Ground Truth Algorithm

接着我们来介绍最后一种白平衡常用的算法 Ground Truth Algorithm,该算法需要图像中已知对象的颜色作为参考色。它根据此参考色来调整颜色通道以更正颜色投射关系

import cv2
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

def ground_truth(image, img_patch, mode='mean'):
    # 使用均值或最大值来进行颜色校正
    if mode == 'mean':
        image_gt = ((image * (img_patch.mean() / image.mean(axis=(0, 1)))).clip(0, 255).astype(int))
    elif mode == 'max':
        image_gt = ((image * 1.0 / img_patch.max(axis=(0, 1))).clip(0, 1))
    else:
        raise ValueError("Invalid mode. Use 'mean' or 'max'.")

    # 绘制原始图像和Ground Truth校正后的对比图
    fig, ax = plt.subplots(1, 2, figsize=(14, 10))
    ax[0].imshow(image)
    ax[0].set_title('原始图像')
    ax[0].axis('off')

    ax[1].imshow(image_gt)
    ax[1].set_title('Ground Truth校正后的图像')
    ax[1].axis('off')

    plt.show()

# 读取图像
image = cv2.imread('4444.png')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 选择参考色块的区域
img_patch = image[800:850, 1800:1850, :]

# 显示图像和参考色块的矩形框
fig, ax = plt.subplots(figsize=(10, 10))
ax.set_title('参考块在红色矩形框内')
ax.imshow(image)
ax.add_patch(Rectangle((1800, 800), 50, 50, edgecolor='r', facecolor='none'))

# 调用 Ground Truth Algorithm
ground_truth(image, img_patch, mode='mean')

在这里插入图片描述

结论:

三种白平衡算法各有优劣,选择适当的算法取决于应用场景的具体需求和假设。White Patch和Gray World算法适用于通用颜色校正,而Ground Truth算法更适合专业领域,特别是需要高精度白平衡的场景。在实际应用中,根据图像的特性和应用要求选择合适的白平衡算法,有助于提高图像质量和信息准确性

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

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

相关文章

Linux之基础开发工具gdb调试器的使用(三)

文章目录 一、Linux调试器-gdb使用1、安装gdb2、背景3、Debug和release4、区分Debug和release 二、Linux调试器-gdb命令演示1、显示指定行之后的代码(自动记录最后一条指令)2、断点1、打印断点2、查看断点3、删除断点4、使能(禁用/开启&#…

统计分钟级别的视频在线用户数+列炸裂+repeat函数

统计分钟级别的视频在线用户数 1、原始数据如下: uid vid starttime endtime select aa as uid,v00l as vid,2023-10-25 12:00 as starttime,2023-10-2512:15 as endtime union select bb as uid,v002 as vid,2023-10-25 12:05 as starttime,2023-10-25 12:19 …

笔记:AI量化策略开发流程-基于BigQuant平台(二)

五、模型训练股票预测 完成了数据处理,接下来就可利用平台集成的各算法进行模型训练和模型预测啦。本文将详细介绍“模型训练”、“模型预测”两大模块操作、原理。 模型训练和模型预测是AI策略区别于传统量化策略的核心,我们通过模型训练模块利用训练…

为什么Android 手机这么慢?如何提高 Android 手机的运行速度

速印机(理想、荣大等)、复印机(夏普、东芝、理光、佳能、震旦等全系列)、打印机、扫描仪、传真机、多媒体教学一体机、交互式电子白板、报警器材、监控、竞业达监考设备及其它监考设备、听力考试设备、特种安防设备维护及维修。吴…

Linux必备:这十个流程图让你变的更强!

图是我们与信息联系并处理其重要性的绝佳方法;它们有助于传达关系和抽取信息,并使我们能够可视化概念。 从基本工作流程图到复杂的网络图,组织图,BPMN(业务过程模型和符号),UML图等等&#xff0…

面试10000次依然会问的【ThreadLocal】,你还不会?

ThreadLocal简介与基本概念 ThreadLocal,即线程局部变量,是Java语言中用于实现线程数据隔离的一个重要类。这种机制允许在多线程环境中,每个线程都有自己的变量副本,从而使得每个线程都可以独立地改变自己的副本,而不…

JDK1.8 新特性(一)【默认方法、静态方法和Lambda表达式】

前言 今天学习Java8 新特性,主要是之前在学习 Scala、JavaFX 中遇到一些 Lambda 表达式,感觉 lambda 表达式确实很简洁,很有必要学一学。 目录 前言 1、接口的默认方法与静态方法 编写接口 编写接口的实现类 测试 2、Lambda表达式&am…

YOLO目标检测——交通标志分类数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用:交通标志识别数据集在自动驾驶、交通安全监控、智能交通系统、驾驶员辅助系统和城市规划等领域都有广泛应用的潜力数据集说明:交通标志分类数据集,真实场景的高质量图片数据,数据场景丰富,含多场景白天黑…

Linux之gdb

gdb就是一个Linux的调试工具,类似与vs里面的调试 可执行程序也有格式,不是简单的二进制堆砌

PyCharm因安装了illuminated Cloud插件导致加载项目失败

打开Pycharm时会有弹窗提示: The license for Illuminated Cloud is invalid or has expired. All Illuminated Cloud features will be disabled. 这个弹窗会导致你加载项目一直失败,close project 也关不掉,我都是用任务管理器杀死进程的…

DevChat全能型AI编程助手,助你“以一敌三卷翻好友”

DevChat全能型AI编程助手,助你“以一敌三卷翻好友” 什么是DevChat,它能帮助我们做什么? DevChat是OpenAI的一个产品,它是一个可以进行编程相关对话的AI。这意味着你可以使用它来解决一些编程上的问题或者获取关于编程的建议。 …

Doris:读取Doris数据的N种方法

目录 1.MySQL Client 2.JDBC 3. 查询计划 4.Spark Doris Connector 5.Flink Doris Connector 1.MySQL Client Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,用户可以通过各类客户端工具来访问 Doris。登录到doris服务器后&a…

基于SSM框架的高校试题管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

交换机工作原理

交换机工作原理 交换机功能:端口扩展(默认同一网络),如果只是两台设备进行通信,可以直接连接这两台设备而不用交换机,但如果设备较多,设备没有那么多接口,那么这个时候就需要交换机…

智慧水利整体解决方案:PPT全文43页,附下载

关键词:智慧水利发展前景,智慧水利解决方案,智慧水利建设方案,智慧水利平台系统 一、智慧水利建设背景 传统水利系统存在一些问题: 现有基础感知不能满足更高标准的水利管理需求;决策调度支撑能力亟需加强…

ztree结合hmap使用经验分享

项目背景 在建德封控拦截系统(Vue3antd2.x)为追求更快的地图初始化体验,在尝试了hmap2.5.0版本以及2.6.3版本后,由于这两个版本在现场电脑的初始化速度不够流畅,最终使用的是hmap2.1.3版本。同时由于布控选设备&#…

c语言练习第11周(1~5)

数列 1 1 2 3 5 8 13 21 ... 被称为斐波纳数列。 输入若干个正整数N,输出这个序列的前 N 项的和。 题干数列 1 1 2 3 5 8 13 21 ... 被称为斐波纳数列。 输入若干个正整数N,输出这个序列的前 N 项的和。输入样例3 5 4 1输出样例…

ftp服务器(filezilla服务端软件)下载、安装、使用

下载 通过360软件管家下载 输入filezilla,点击搜索,点击安装 修改安装路径 等待安装完成 配置服务端 启动配置 双击打开,点击软件中间按钮 不用输入密码,因为安装的时候没有设置密码 如果在安装的时候设置了密码,…

可以为一个servlet定义多个servlet-mapping、或url-pattern

在web描述符文件web.xml文件中,可以为同一个servlet定义多个servlet-mapping;也可以在同一个servlet-mapping中,定义多个url-pattern。也就是说,可以把多个地址(相对于上下文路径)映射到同一个servlet处理。…

基于MATLAB的关节型六轴机械臂轨迹规划仿真

笛卡尔空间下的轨迹规划,分为直线轨迹规划和圆弧轨迹规划,本文为笛卡尔空间下圆弧插值法的matlab仿真分析 目录 1 实验目的 2 实验内容 2.1标准D-H参数法 2.2实验中使用的Matlab函数 3 全部代码 4 仿真结果 1 实验目的 基于机器人学理论知识&…