【ISP】AWB的基本原理介绍(基于灰度像素检测)
🎨 基于灰度像素检测的自动白平衡(AWB)算法原理与实现
在图像处理中,自动白平衡(AWB, Auto White Balance)是调整图像色温、还原真实色彩的关键算法之一。本文介绍一种经典实用的 AWB 方法 —— 基于灰度像素检测(Gray Pixel Detection) 的算法原理,并附带经典论文及推导公式,适合工程实现与理论学习。
📷 为什么需要自动白平衡?
不同光源(如日光、白炽灯、荧光灯)具有不同的色温,会导致图像整体偏黄、偏蓝或偏绿。AWB 的目标是估计当前光源颜色,然后对图像进行反色偏处理,使图像中原本的“白色或灰色区域”真正呈现为中性灰。
🧠 灰度像素法(Gray Pixel Method)原理
✨ 核心假设
在真实场景中存在大量原本应呈现为灰色的像素,这些像素满足
R ≈ G ≈ B
,但由于光照偏色导致它们的 RGB 通道出现不等。通过检测这些“灰度像素”的偏差,可推测当前光源色彩。
🧪 算法步骤
1️⃣ 灰度像素检测
选出图中满足如下条件的像素作为灰度像素候选:
|R - G| < T1 and |R - B| < T2 and |G - B| < T3
其中 T1~T3 是经验阈值,常设为 10 或更小,用于捕捉 R/G/B 差异较小的像素。
2️⃣ 统计灰度像素均值
对这些“灰点”分别计算 R、G、B 通道的平均值:
mean_R = average(R)
mean_G = average(G)
mean_B = average(B)
这些值反映了灰度像素在当前光源下的实际观测颜色。
3️⃣ 设置目标灰值
假设我们希望灰度像素修正后呈现为标准灰色 [ref, ref, ref]
。我们可以选定 ref = mean_G
或固定为某个值(如 128 或 255)。
4️⃣ 计算增益值(Gain)
为了将图像矫正为中性色,我们对每个通道计算增益:
gain_R = ref / mean_R
gain_G = ref / mean_G
gain_B = ref / mean_B
通常以绿色通道为基准(gain_G = 1.0),计算相对增益。
5️⃣ 应用增益,矫正图像
对图像中的每个像素 (R, G, B)
应用增益:
R' = R * gain_R
G' = G * gain_G
B' = B * gain_B
最后 clip 到 [0, 255] 范围。
✅ 示例计算
假设从灰度点中得到:
mean_R = 180, mean_G = 160, mean_B = 140
目标灰值设为 ref = 160,则:
gain_R = 160 / 180 ≈ 0.89
gain_G = 160 / 160 = 1.00
gain_B = 160 / 140 ≈ 1.14
图像整体使用这组增益进行颜色校正,即可矫正偏色。
📚 相关论文与文献支持
论文标题 | 作者 | 贡献 |
---|---|---|
Gray Pixel: An Effective Statistical Method for Illumination Estimation | Kao et al. (CVPR 2016) | 提出直接在图像中寻找灰度像素,用于估计光源色彩 |
On Finding Gray Pixels | Qian et al. (CVPR 2019) | 引入灰度指数(GI),提升灰像素检测精度 |
Revisiting Gray Pixel | Qian et al. (VISAPP 2019) | 结合均值漂移聚类(MSGP)提升鲁棒性 |
这类方法在真实场景中比 Gray World、White Patch 更稳定,特别是在复杂光照或物体颜色丰富的场景中。
⚙️ 代码实现(Python + OpenCV 简化版)
import cv2
import numpy as npdef gray_pixel_awb(img):img = img.astype(np.float32)R, G, B = img[:,:,2], img[:,:,1], img[:,:,0]mask = (np.abs(R - G) < 10) & (np.abs(R - B) < 10) & (np.abs(G - B) < 10)mean_R = np.mean(R[mask])mean_G = np.mean(G[mask])mean_B = np.mean(B[mask])ref = mean_Ggain_R = ref / mean_Rgain_G = 1.0gain_B = ref / mean_BR = np.clip(R * gain_R, 0, 255)G = np.clip(G * gain_G, 0, 255)B = np.clip(B * gain_B, 0, 255)out = cv2.merge((B, G, R)).astype(np.uint8)return out
🧩 总结
- 灰度像素法是一种统计学上鲁棒、无需训练的 AWB 方法。
- 其核心在于:通过找出图像中应为灰色却被偏色污染的区域,反推出当前光源的偏移方向,从而计算出增益进行矫正。
- 在嵌入式设备或无校准标定条件下,非常实用。
相关文章:
【ISP】AWB的基本原理介绍(基于灰度像素检测)
🎨 基于灰度像素检测的自动白平衡(AWB)算法原理与实现 在图像处理中,自动白平衡(AWB, Auto White Balance)是调整图像色温、还原真实色彩的关键算法之一。本文介绍一种经典实用的 AWB 方法 —— 基于灰度像…...
uniappx项目上架各手机平台
前段时间用uniappx开发的App,领导要求要在各个主要手机平台上上架了,本来不是我的任务,后来其他人没有空交给我了,上架小白一枚,哭唧唧的自己研究吧,根据领导发的账号密码登录各个平台上架,花费…...
DIB:Drone in Box- 室内外场景无人机无人化自主巡检技术方案
DIB:Drone in Box- 室内外场景无人机无人化自主巡检技术方案 作为大疆机场3的无人机无人化巡检方案的补充三个自主巡检方案: 方案一、M350AIBOX自主机场-适合室外无人机自主巡检 方案二、M4AIBOX自主机场-适合室内自主巡检 方案三、停机坪AIBOX 自主巡…...
【大模型】GPT-4、DeepSeek应用与Prompt使用技巧
GPT-4 作为目前最先进的大语言模型之一,在多个领域都有广泛的应用。以下是一些典型的应用实例以及相关的 Prompt 使用技巧,帮助你更好地发挥 GPT-4 的潜力。 一、GPT-4 应用实例 1. 内容创作 博客/文章写作:生成高质量的技术博客、营销文案、…...
《分布式软总线:不同频段Wi-Fi环境下设备发现兼容性难题》
分布式软总线技术作为实现设备互联互通的关键,正逐渐成为构建万物互联世界的基石。然而,当分布式软总线面临不同频段Wi-Fi环境时,设备发现的兼容性问题成为了阻碍其广泛应用的一大挑战。这一问题不仅影响着用户体验,也制约着分布式…...
微电网与分布式能源:智能配电技术的场景化落地
安科瑞顾强 随着数字化转型与能源革命的加速推进,电力系统正经历从传统模式向智能化、网络化方向的深刻变革。用户侧的智能配电与智能用电技术作为这一变革的核心驱动力,正在重塑电力行业的生态格局。本文将从技术架构、应用场景及未来趋势等维度&#…...
Flutter实战(1)-- 调试工具
Flutter实战调试篇:从开发到上线的完整指南 工欲善其事,必先利其器。 本文使用的Flutter的相关版本信息: Flutter 1.19.0-4.3.pre • channel beta Engine • revision 9a28c3bcf4 Tools • Dart 2.9.0 (build 2.9.0-14.1.beta) 本文是Flutte…...
每日算法(双指针算法)(Day 1)
双指针算法 1.算法题目(移动零)2.讲解算法原理3.编写代码 1.算法题目(移动零) 2.讲解算法原理 数组划分,数组分块(快排里面最核心的一步)只需把0改为tmp 双指针算法:利用数组下标来…...
无人机的群体协同与集群控制技术要点!
一、技术要点 通信技术 高效可靠的通信链路:无人机集群需要稳定、低延迟的通信网络,以实现实时数据传输和指令交互。通信方式包括无线自组织网络(Ad Hoc)、蜂窝网络、卫星通信等,需根据任务场景选择合适的通信技术。…...
Linux常见指令介绍上(入门级)
1. ls指令 功能:显示出当前目录下的所有子目录与文件。 PS:注意显示的是当前文件下的子目录与文件。 以下这些是可以和ls配套使用的一些选项 -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 -d 将目录象文件一样显示,而不是显示其下…...
【Linux系统篇】:从匿名管道到命名管道--如何理解进程通信中的管道?
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:Linux篇–CSDN博客 文章目录 一.进程通信进程通信概念进程通信目的进程通信分类 二.管道匿名…...
三、The C in C++
第三章主要讲解了 C 中继承自 C 语言的核心元素,包括函数创建、执行控制、操作符、数据类型、作用域、存储指示、复合类型创建等。 3.1 创建函数(Creating Functions) C允许函数重载,同名的函数可以根据参数类型和数量区分&…...
探索图像分类模型的 Flask 应用搭建之旅
最近深入研究了利用深度学习模型进行图像分类,并将其部署到 Flask 应用中的项目,过程中遇到了不少挑战,也收获了满满的知识,迫不及待想和大家分享一下。 一、项目背景与目标 在当今数字化的时代,图像数据呈爆炸式增长…...
OpenAI发布GPT-4.1系列模型——开发者可免费使用
OpenAI刚刚推出GPT-4.1模型家族,包含GPT-4.1、GPT-4.1 Mini和GPT-4.1 Nano三款模型。重点是——现在全部免费开放! 虽然技术升级值得关注,但真正具有变革意义的是开发者能通过Cursor、Windsurf和GitHub Copilot等平台立即免费调用这些模型。…...
自动化测试工具playwright中文文档-------14.Chrome 插件
介绍 注意 插件仅在以持久化上下文启动的 Chrome/Chromium 浏览器中工作。请谨慎使用自定义浏览器参数,因为其中一些可能会破坏 Playwright 的功能。 以下是获取位于 ./my-extension 的 Manifest v2 插件背景页面句柄的代码示例。 from playwright.sync_api imp…...
VGA显示
屏幕扫描形式 在回扫的过程中,电子枪不能发射电子,否则会影响荧光屏上既有图像的颜色,所以 回扫期间,需要进行行消隐,简单来说就是关闭电子枪。每行结束时,用行同步信号进行行 同步,图中从右上方向左下方的斜向虚线就是其回行扫示意图。 当整个屏幕的所有行都扫…...
微服务1--服务架构
系统架构 单体应用架构 特点:所有功能集中在一个应用中(如传统的 Spring Boot WAR 包)。 适用场景:小型项目、快速验证阶段。 优缺点: ✅ 开发简单,部署方便。 ❌ 扩展性差,技术栈耦合。 …...
鸿蒙应用元服务开发-Account Kit配置登录权限
一、场景介绍 华为账号登录是基于OAuth 2.0协议标准和OpenID Connect协议标准构建的OAuth2.0 授权登录系统,元服务可以方便地获取华为账号用户的身份标识,快速建立元服务内的用户体系。 用户打开元服务时,不需要用户点击登录/注册按钮&#…...
zg-docker详解与部署微服务实战与k8s
一. Docker课程 Docker简介 Docker是一个开源的容器引擎,有助于快速开发,docker更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。 使用宿主机的网络:即使用宿主机的网段。 联合文件系统-一个镜像,启动了多个容器,对于镜像中的文件a,多个容器…...
【含文档+PPT+源码】基于Python的快递服务管理系统【
毕业作品基于Django和HTML的快递网站设计与实现 课程目标: 教你从零开始部署运行项目,学习环境搭建、项目导入及部署,含项目源码、文档、数据库、软件等资料 课程简介: 本课程演示的是一款基于Python的快递服务管理系统&#x…...
嵌入式WebRTC轻量化SDK压缩至500K-800K ,为嵌入式设备节省Flash资源
一、SDK轻量化的核心技术实现 1、WebRTC库裁剪与模块化设计 EasyRTC针对嵌入式设备的资源限制,对原生WebRTC库进行深度裁剪,仅保留核心通信功能(如信令管理、编解码、网络传输等),移除冗余组件(如部分调试…...
JAVA学习-Stream
Stream Stream也叫Stream流,是Jdk8开始新增的一套API (java.util.stream.*),可以用于操作集合或者数 组的数据。 优势: Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式 操作集合或者数…...
如何在同一个电脑配置多个jdk版本并随意切换
1.右键此电脑属性 2.点击高级系统配置 3.点击环境变量 4.进去后点击新建 变量名:JAVA_HOME_版本,来进行命名 变量值:jdk的路径即可,比如我的是D:\JAVA\JAVA11 5.创建完你所有的jdk版本之后接着新建 变量名:JAVA_HOME…...
网工_传输层协议概述
2025.02.19:网工老姜&小猿网学习笔记 第22节 传输层协议概述 2.1 进程之间的通信2.2 传输层的两个主要协议2.3 传输层的端口2.3.1 端口号 2.4 本章小结 2.1 进程之间的通信 前三层解决了数据从主机到主机的问题,也就是,我们现在已经可以把…...
《java面试宝典》之java多线程面试题
1:什么是线程? 轻量级的进程 2:线程的三个部分是? 处理机 代码 数据 3:为什么使用多线程 使UI响应更快 利用多处理器系统 简化建模 4:代码示例:Java中实现多线程的两种方式,包括如何…...
5款电脑健康状况监测软件
鲁大师:专业且免费,能检测电脑硬件配置,辨别硬件真伪,检查电脑病毒隐患。可一键清理系统垃圾,提升电脑性能。还能全程监护硬件状态,实时检测硬件温度变化,让用户轻松掌握电脑健康状况。360 安全…...
JWT令牌:实现安全会话跟踪与登录认证的利器
摘要:本文深入探讨了JWT令牌在实现会话跟踪和登录认证方面的应用,详细介绍了JWT令牌的概念、组成、生成与校验方法,以及在实际案例中如何通过JWT令牌进行会话跟踪和登录认证的具体实现步骤,为系统的安全认证机制提供了全面且深入的…...
uni-app/微信小程序接入腾讯位置服务地图选点插件
uni-app/微信小程序接入腾讯位置服务地图选点插件 0、常出现的错误及解决方法0.1插件未授权使用(见步骤1)0.2小程序类目不符合引用该类目插件的要求或主体类型不符合要求(见步骤1)0.3需要在app.json中声明permission scope.userLo…...
3款顶流云电脑与传统电脑性能PK战:START云游戏/无影云/ToDesk云电脑谁更流畅?
这里写目录标题 一、前言二、本地机器配置环境三、START云游戏/无影云/ToDesk云电脑配置对比3.1 START云游戏3.2 无影云个人版3.3 ToDesk云电脑 四、本地电脑与云电脑性能实战4.1 游戏场景体验4.1.1 本地电脑测试4.1.2 云电脑测试英雄联盟黑神话悟空其他游戏 4.2 主流设计场景体…...
WINUI——Background小结
在 WinUI/UWP XAML 中,Background(或其他颜色属性)支持 多种颜色表示方式,包括以下三种主流格式: 1. RGB 十六进制(不透明) 格式:#RRGGBB特点…...
公司内部自建知识共享的方式分类、详细步骤及表格总结,分为开源(对外公开)和闭源(仅限内部),以及公共(全员可访问)和内部(特定团队/项目组)四个维度
以下是公司内部自建知识共享的方式分类、详细步骤及表格总结,分为开源(对外公开)和闭源(仅限内部),以及公共(全员可访问)和内部(特定团队/项目组)四个维度&am…...
cursor AI编辑器的详细使用
以下是Cursor AI编辑器的详细使用介绍,涵盖核心功能、安装配置、使用技巧、高级应用及常见问题解决方案,结合了多个权威来源的实践指南和最新技术动态: 一、Cursor AI简介与核心功能 定位与架构 Cursor是基于Visual Studio Code(V…...
js逆向入门实战某某观察网响应数据解密
(base64解码 base64解码)地址:aHR0cHM6Ly93d3cuc3dndWFuY2hhLmNvbS9ob21lL2NpdHktZGV0YWlsP2NvZGU9MzEwMTAw 分析过程 1.抓数据包,发现响应数据是加密字符串。 2.对于这种回显数据解密,大概率通过拦截器实现,搜索intercepto…...
Ubuntu安装yum遇到Package ‘yum‘ has no installation candidate
环境说明 Window11,WSL2,Ubuntu24.04 错误描述 rootLAPTOP:~# apt-get install yum Reading package lists... Done Building dependency tree... Done Reading state information... Done Package yum is not available, but is referred to by anot…...
爱普生SG3225EEN低抖动差分晶振在网络通信的应用
在当今数字化时代,网络通信的飞速发展对数据传输的准确性、稳定性和高效性提出了极为严苛的要求。从 5G 通信网络的大规模部署,到数据中心的海量数据交换,再到智能家居系统的互联互通,每一个环节都离不开精准稳定的时钟信号作为支…...
软考教材重点内容 信息安全工程师 第22章 网站安全需求分析与安全保护工程
22.1.1 网站安全概念 网站是一个基于 B/S 技术架构的综合信息服务平台,主要提供网页信息及业务后台对外接口服务。一般网站涉及网络通信、操作系统、数据库、Web 服务器软件、Web 应用、浏览器、域名服务以及 HTML, XML,SSL; Web Services 等相关协议,同…...
数智读书笔记系列029 《代数大脑:揭秘智能背后的逻辑》
《代数大脑:揭秘智能背后的逻辑》书籍简介 作者简介 加里F. 马库斯(Gary F. Marcus)是纽约大学心理学荣休教授、人工智能企业家,曾创立Geometric Intelligence(后被Uber收购)和Robust.AI公司。他在神经科学、语言学和人工智能领域发表了大量论文,并著有《重启AI》等多部…...
UWB技术与5G、物联网结合的应用前景
一、核心应用场景与优势 工业自动化与智能制造 高精度设备协同:UWB技术(3cm定位精度)与5G(1ms级时延)结合,可实时追踪AGV、机械臂等设备位置,优化生产节拍,提升效率20…...
vue + element-plus自定义表单验证(修改密码业务)
写一个vue组件Password.vue 没有表单验证只有3个表单项 <template><div><el-form><el-form-item label"旧密码"><el-input></el-input></el-form-item><el-form-item label"新密码"><el-input>&l…...
如何将 Vue-FastAPI-Admin 项目的数据库从 SQLite 切换到 MySQL?
近期在github上看到一个开源项目,vue-fastapi-admin。它基于 FastAPI Vue3 Naive UI 的现代化前后端分离开发平台,融合了 RBAC 权限管理、动态路由和 JWT 鉴权,助力中小型应用快速搭建,也可用于学习参考。 由于该项目中数据库用…...
K8S运维实战之集群证书升级与容器运行时更换全记录
第一部分:Kubernetes集群证书升级实战 tips:此博文只演示一个节点作为示范,所有的集群节点步骤都可以参考。 项目背景 某金融业务系统Kubernetes集群即将面临生产证书集中过期风险(核心组件证书剩余有效期不足90天),…...
idea如何克隆拉取远程git项目到本地
概述 idea如何克隆拉取远程git项目到本地?方法很简单,找到入口,跟着引导窗口下一步下一步即可。 方法 File -> New -> Project from Version Control...然后根据引导窗口,一步一步操作即可...
聚铭网络亮相2025超云产品技术大会,联合发布“铭智安全运营大模型一体机及解决方案”
4月11日,于南京银城皇冠假日酒店举办的2025超云产品技术大会圆满落幕。聚铭网络受邀出席本次大会,并与超云联合发布了“铭智安全运营大模型一体机及解决方案”,为智能安全运营领域带来了全新突破。 会议背景 在全球人工智能技术加速产业化…...
成员访问运算符重载(详解)
目录 成员访问运算符 两层结构下的使用 三层结构下的使用(难点) 内存分析 成员访问运算符 成员访问运算符包括箭头访问运算符 -> 和解引用运算符 * ,它们是指针操作最常用的两个运算符。我们先来看箭头运算符 -> 箭头运算符只能以…...
无感改造,完美监控:Docker 多阶段构建 Go 应用无侵入观测
作者:牧思 背景 随着云原生的普及,Golang 编程语言变得越来越热门。相比 Java,Golang 凭借其轻量,易学习的特点得到了越来越多工程师的青睐,然而由于 Golang 应用需要被编译成二进制文件再进行运行,Golan…...
项目后期发现重大漏洞,如何紧急修复
项目后期发现重大漏洞的紧急修复关键在于: 迅速识别漏洞根本原因、制定修复优先级、协调团队资源、实施快速修复和验证、总结经验防止重复发生。 其中,迅速识别漏洞根本原因是最为关键的一步。找到漏洞的根本原因有助于确保修复措施不仅解决眼前的问题&a…...
设计模式:状态模式 - 复杂状态切换的优雅之道
一、为什么用状态模式? 在开发过程中,你是否遇到过这样的难题:对象需要根据不同的状态执行不同行为,但代码中却充斥着大量的if-else或switch-case语句? 随着状态的增多,代码变得臃肿且难以阅读࿰…...
【AI提示词】业务开发经理
提示说明 业务开发经理旨在帮助用户构建一个高效、有洞察力的业务发展角色,能够在竞争激烈的市场中寻找并抓住商机。 提示词 # 角色 业务开发经理专家## 注意 - 业务开发经理应具备强烈的市场洞察力和人际沟通能力。 - 专家设计应考虑业务发展的实际需求和挑战。…...
发电机参数详解
一、发电机参数体系概述 发电机作为将机械能转换为电能的核心设备,其参数体系涵盖电气、机械、结构、性能、控制五大维度,是设备选型、运行维护、故障诊断的重要依据。参数体系的完整性和准确性直接影响电力系统的稳定性与经济性。以下通过思维导图展示发电机参数的整体架构…...
每天五分钟深度学习PyTorch:RNN CELL模型原理以及搭建
本文重点 RNN Cell(循环神经网络单元)是循环神经网络(RNN)的核心组成部分,用于处理序列数据中的每个时间步,并维护隐藏状态以捕获序列中的时间依赖关系。 RNN CELL的结构 RNN是一个循环结构,它可以看作是RNN CELL的循环,RNN CELL的结构如下图所示,RNN CELL不断进行…...