图像白平衡

目录

效果

背景

什么是白平衡?

实现原理

将指定图色调调整为参考图色调主要流程

示例代码


效果

将图一效果转换为图二效果色调:

调整后,可实现色调对换

背景

现有两张图像,色调不一致,对于模型重建会有影响。因此需要将不符合需求的image进行白平衡,色调统一。

什么是白平衡?

图像信号处理算法(Image Signal Process,ISP),对图像传感器输出的原始图像进行处理,得到较好的场景还原效果。

其中,3A算法包括:AWB(自动白平衡)、AE(自动曝光)、AF(自动对焦)。

白平衡White Balance,简称WB,是一种相机设置,用于校正照片或视频中的色彩。

白平衡通过调整红、绿、蓝三种颜色的比例,补偿光源的色片,使得图像中白色看起来是真正的白色,从而使整个图像的色彩更加自然准确。

将图像A转换为图像B的色调,这是一个色彩迁移(Color Transfer的问题。色彩迁移旨在将源图像的颜色风格应用到目标图像中,使得目标图像看起来像是通过类似的光线或色调条件拍摄的。

实现原理

色彩迁移的基本原理是通过分析和调整图像的颜色分布,使源图像的颜色特征(如均值和方差)与目标图像匹配。通常,色彩迁移通过以下几个步骤实现:

  • 颜色空间转换:将RGB图像转换到一种颜色空间,如LAB或LUV。这些颜色空间更适合进行色彩调整,因为它们将亮度与颜色信息分离。
  • 统计特征匹配:计算源图像和目标图像在新颜色空间中的统计特征(如均值和方差)。然后,将源图像的颜色分布调整为与目标图像匹配。
  • 颜色映射:将调整后的颜色分布映射回原始颜色空间,生成最终的图像。
  • 颜色空间逆变换:将图像从LAB或LUV颜色空间转换回RGB,以获得最终结果。

将指定图色调调整为参考图色调主要流程

(1)图像从BGR转换到LAB颜色空间(因为LAB空间更适合进行颜色调整操作)

(2)分别计算参考图和源图 的 均值和标准差

(3)对源图进行标准化,并将参考图的均值和标准差 应用到源图

(4)将调整后的LAB图像转换回BGR颜色空间

示例代码

import cv2import numpy as npdef match_color(source, reference):# 将图像从BGR转换为LAB颜色空间source_lab = cv2.cvtColor(source, cv2.COLOR_BGR2Lab)reference_lab = cv2.cvtColor(reference, cv2.COLOR_BGR2Lab)# 计算参考图像的均值和标准差ref_mean, ref_std = cv2.meanStdDev(reference_lab)ref_mean = ref_mean.reshape((1, 1, 3))ref_std = ref_std.reshape((1, 1, 3))# 计算源图像的均值和标准差src_mean, src_std = cv2.meanStdDev(source_lab)src_mean = src_mean.reshape((1, 1, 3))src_std = src_std.reshape((1, 1, 3))# 对源图像进行标准化,并应用参考图像的均值和标准差lab_adjusted = (source_lab - src_mean) * (ref_std / src_std) + ref_mean# 将调整后的LAB图像转换回BGR颜色空间lab_adjusted = np.clip(lab_adjusted, 0, 255).astype(np.uint8)result = cv2.cvtColor(lab_adjusted, cv2.COLOR_Lab2BGR)return result# 读取源图像和参考图像,将image_B色调调整为image_A色调source_image = cv2.imread('image_B.png')reference_image = cv2.imread('image_A.png')# 调整色调result_image = match_color(source_image, reference_image)# 保存结果cv2.imwrite('result_1.jpg', result_image)

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

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

相关文章

不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信

不小心删除了一条短信,或者丢失了所有短信?希望还未破灭,下面介绍如何在 iPhone 上查找和恢复已删除的短信。 短信通常都是非正式和无关紧要的,但短信中可能包含非常重要的信息。因此,如果您删除了一些短信以清理 iPh…

vivado 创建时间约束1

步骤3:创建时间约束 在此步骤中,您打开合成的设计并使用AMD Vivado™定时约束 男巫定时约束向导分析门级网表并发现缺失 约束。使用“定时约束”向导为此设计生成约束。 1.在“流导航器”中,单击“打开综合设计”。 2.当综合设计打开时&#…

使用vscode编辑matlab完美解决方法

vscode里面的matlab插件都不好用,需要搭配互补一下 1先安装MATLAB 这个插件可以进行代码高亮、格式化、跳转,F5运行所有代码,或者选中要运行的代码,右键单独运行, 优点:运行速度很快,和matlab里…

HA里面如何添加美的智能设备

环境: Home Assistant 2023.8.0 问题描述: HA里面如何添加美的智能设备 解决方案: 1.打开 HACS 菜单,点开其中的集成选项,点击右下角的“浏览并下载存储库”,之后再搜索 Midea AC LAN 点击下载 如果下…

Qt将数据库中的数据导出为html

一、源码分享 bool ReportFormUtils::exportReportHtml(QString &errString, const QString tableName, const QString savePathAndName, const QString tableTitle, const QString tableInfo) {Q_UNUSED(errString)Q_UNUSED(tableName)Q_UNUSED(savePathAndName)#define …

ubuntu上通过openvswitch卸载实现roce over vxlan

环境 操作系统: uname -a Linux 5.4.0-187-generic #207-Ubuntu SMP Mon Jun 10 08:16:10 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux Mellanox网卡: ethtool -i ens6np0 driver: mlx5_core version: 23.10-2.1.3 firmware-version: 20.39.3004 (MT_0…

HarmonyOS NEXT仓颉编程语言开发环境搭建(安装DevEco Studio Cangjie Plugin)

仓颉编程语言开发环境搭建主要是两部分: 安装最新版DevEco Studio;在DevEco Studio里面安装仓颉插件(DevEco Studio Cangjie Plugin)。 本文主要介绍DevEco Studio Cangjie Plugin的使用。 DevEco Studio Cangjie Plugin概述 …

【机器人工具箱Robotics Toolbox开发笔记(一)】Matlab机器人工具箱简介

MATLAB是一款被广泛应用于科学计算和工程领域的专业软件。它的全称为Matrix Laboratory(矩阵实验室),因为其最基本的数据类型就是矢量与矩阵,所以在处理数学和科学问题时非常方便,可用于线性代数计算、图形和动态仿真的…

探索Python世界的趣味之旅:自制贪吃蛇游戏

通过本次贪吃蛇游戏的开发实践,不仅可以掌握Python编程语言的基础知识,还深入了解了游戏开发的基本流程和技术要点。这只是一个开始,Python的世界远不止于此。未来,你可以尝试开发更复杂、更有趣的游戏项目,甚至探索人…

Leetcode每日刷题之76.最小覆盖子串(C++)

1.题目解析 本题的题目是给定两个字符串 s 和 t ,找出在 s 中的某个最小子串保证该子串中包含所以 t 中出现的字母即可,并且该结果是唯一答案,找不到结果就直接返回空串即可 2.算法原理 关于本题的核心思路就是"滑动窗口"&#xff…

教育行业解决方案:智能PPT在教育行业的创新应用

在信息化时代,教育行业面临着巨大的变革。随着人工智能技术的不断发展,传统教学方式正在被重新定义。彩漩科技作为 AI 技术的先行者,推出了歌者 PPT &彩漩 PPT,为教师、学生和家长提供了一种全新的教育体验,实现了…

开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布

开源云原生数据库PolarDB PostgreSQL 15兼容版正式发布上线,该版本100%兼容开源PostgreSQL 15。PolarDB是阿里云自研云原生关系型数据库,基于共享存储的存算分离架构使其具备灵活弹性和高性价比的特性,在开源PostgreSQL很好的性能表现的基础上…

Java 入门指南:Java 并发编程 —— Java 线程池详解

线程池 线程池(ThreadPool)是一种用于管理和复用线程的机制,它可以预先创建一批线程,并维护一个线程队列,用于执行提交的任务。 线程池的主要目的是提高多线程应用程序的性能和效率,通过重用已创建的线程…

【陪诊系统-H5客户端】订单状态进度条

似乎~客户端相对来说,要简单一点,就挑几个其中感兴趣的记录一下 订单状态进度条是根据当前订单的状态动态改变,这里的动态改变实际上是利用后端返回的状态数据,给标签添加不同的class属性来实现。进度条样式其实是两个圆角矩形框…

ABAP正则表达式 特殊字符处理

REPLACE ALL OCCURRENCES OF REGEX [[:space:]] IN <fs_purhdinfo>-cell_value WITH ."可去掉空格或回车键 REPLACE ALL OCCURRENCES OF &#xff1a; IN <fs_purhdinfo>-cell_value WITH ."可去掉空格或回车键 REPLACE ALL OCCURRENCES OF R…

AI绘画SD中如何安装/更新/卸载 Stable Diffusion WebUI 插件?SD新手必看的保姆级教程!

大家好&#xff0c;我是画画的小强 最近有一部分朋友对如何在AI绘画StableDiffusion中 安装管理 WebUI 插件十分陌生&#xff0c;不知道如何下手。 今天就系统地为大家介绍一下 WebUI 插件安装、更新、卸载的相关知识&#xff0c;让初学者能快速掌握插件的使用方法&#xff0c…

iomuxc、pinctrl子系统、gpio子系统(学习总结)

iomuxc、pinctrl子系统、gpio子系统三者的关系 相互依赖&#xff1a;IOMUXC、pinctrl子系统和gpio子系统在功能上相互依赖。IOMUXC提供了引脚复用和电气属性的配置能力&#xff0c;pinctrl子系统负责从设备树中获取这些配置信息并完成初始化&#xff0c;而gpio子系统则在引脚被…

C++中protobuffer的具体使用方法以及重要原理的实现

一、protobuffer的具体使用 对于基本的知识可以看我之前的文章。 那一片文章主要是知识点&#xff0c;这一片是实战。 1、头部 我们通过syntax 这个来指定版本号&#xff0c;如果不写的话就会默认为proto2&#xff0c;2这个版本是一个比较旧的版本。旧的版本写起来就比较繁琐。…

25届计算机毕业设计,如何打造Java SpringBoot+Vue博客系统,一步一脚印,开发心得分享

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Spring源码-从源码层面讲解声明式事务配置文件的加载和相关对象的创建1(创建对向,属性填充,动态代理均有涉及)

tx.xml事务配置文件的解析 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"http://www.spr…