当前位置:网站首页>Flir Blackfly S工业相机:颜色校正讲解及配置与代码设置方法
Flir Blackfly S工业相机:颜色校正讲解及配置与代码设置方法
2022-07-06 18:23:00 【月照银海似蛟龙】
Flir Blackfly S工业相机:颜色校正讲解及配置与代码设置方法
本博客主要内容为
- 介绍 Blackfly S相机使用的色彩校正矩阵(CCM,color correction matrix)
- 并展示了如何计算出自定义的CCM。
- 通过代码进行颜色校正和自定义CCM配置
我们看到的相机拍摄的照片,其实不是相机直接获取的样子,需要经过各种处理,例如白平衡、颜色校正等等,最后才是显示出来被我们眼睛看到,当然各种处理的最终目标就是让我们眼睛看到的照片和我们眼睛直接看到的场景更近似。
照片的处理过程就像下边的流程:
颜色校正概念
颜色校正是将源图像(捕获的图像)中显示的颜色转换为经过校正的颜色目标图像(最终视图)的过程。
每个传感器对光照都有特定的响应,并且每种照明条件(例如,阳光、荧光灯)都有自己的发射光谱,这会影响光信息捕获时图像的构成方式。
上图各种光源的发射光谱
传感器将光子转换为电子的效率被称为QE(quantum efficlency),这个值根据光的补偿改变。
这个是GS3-U3-51S5C(IMX250 sensor)的QE
‘
这里重点解释下什么是QE(quantum efficlency),就是上面的纵轴。
**量子效率(Quantum Efficiency)(光谱特性):**定义为CCD芯片在一定波长入射光的照射下,由光电效应产生的平均光电子数与入射光子数之比,表征了CCD芯片对不同波长入射光的敏感程度。不同波长的光量子效率不同,CCD对某些波长的量子效率可高达98%。
颜色校正考虑了每个颜色通道如何与其他通道相互影响,并独立地缩放每个颜色通道。 CCM 用于测量和补偿这些相互作用。
颜色校正准的重要性
在通过视觉检查或分拣产品等应用中,再现准确的颜色非常重要,因为颜色的微小差异会影响结果的准确性和可靠性。
Blackfly S 使用 CCM 转换将输出图像校正为 sRGB 颜色空间。
sRGB 颜色空间是最常用的色彩空间,因为它为显示器如何再现色彩提供了最佳猜测。
如何进行颜色校正
颜色校正是将源图像(捕获的图像)中显示的颜色转换为经过校正的颜色目标图像(最终视图)的过程。
下面计算公式展示了单个像素的计算:
展开则是:
对于 n x m 像素的图像大小,这个计算执行 n x m 次。
颜色校正和白平衡的区别
CCM 考虑了颜色通道如何相互影响并相应地缩放单独的通道。 CCM 是非对角线矩阵,并且目标 RGB 值是上述 RGB 值的函数。
白平衡 (WB) 通过独立缩放每个 R、G 或 B 通道来调整发射光谱。 白平衡矩阵是一个对角矩阵,目标 RGB 值根据其源 RGB 值按常数缩放。
两个矩阵如下:
那么白平衡调整颜色通过下面的计算公式:
以下图像是在暖色的荧光灯条件下拍摄的。
可以比较三种情况的图片效果,分别是:没有颜色校正方法、仅白平衡以及启用白平衡和 CCM 的结果。
左边的是 WB off,CCM off
中间的是WB on,CCM off
右边的是 WB on,CCM on
Blackfly S如何进行颜色校正
Blackfly S 使用预定义的 CCM 为不同的照明条件创建正确的 sRGB 输出。
预定义的 CCM 被集成到 RGB 变换光源中,因为 CCM 不能独立于白平衡(变换光源)。
CCM可以由Flir上位机 SpinView设置也可以通过API接口进行代码设置
颜色转换选择器显示 RGB 到 RGB 的标准选项。 如果使用不同的像素格式,例如 YUV 或 YCbCr 像素格式,颜色转换选择器会提供 RGB 到 YUV 的选项。 CCM 更改以说明 YUV 如何编码颜色信息。
通过SpinView设置颜色校正
- 1 连接相机的电脑
- 2 打开SpinView
- 3 打开Processing菜单检查 ISP Enable 是否打开
- 4 检查Color Transformation Enable 是否打开
- 5 在RGB Transform Light Source 中选择 适当的 RGB 变换光源(暖荧光、冷荧光、晴天、阴天、钨丝灯、阴天、一般)
相关设置在图片上的红框勾出
通过API 代码进行颜色校正设置
//设置 颜色校正
// 开启 ISP
CBooleanPtr ptrIspEnable = nodeMap.GetNode("IspEnable");
ptrIspEnable->SetValue(1);
// 开启 Color Transformation Enable
CBooleanPtr ptrColorTransformEnable = nodeMap.GetNode("ColorTransformationEnable");
ptrColorTransformEnable->SetValue(1);
// 设置RGB Transform Light Source
CEnumerationPtr ptrRgbTransformLightSource = nodeMap.GetNode
( "RgbTransformLightSource");
CEnumEntryPtr ptrRgbTransformationLightSourceWarm = ptrRgbTransformLightSource->
GetEntryByName("WarmFluorescent3000K");
ptrRgbTransformLightSource->SetIntValue(ptrRgbTransformationLightSourceWarm->GetValue());
如何 自定义 CCM 并设置
有几种类型的标准目标图像颜色。 以下是使用的典型颜色目标:
- sRGB:标准 RGB 颜色空间。 这是用于显示器、打印机和 Internet 的最常见的色彩空间。
- Adobe RGB:提供比 sRGB 更大的色彩空间。
- CIE XYZ:映射人眼如何响应特定波长的光的色彩空间。 sRGB 和 Adobe RGB 是这个空间的子集。
在某些情况下,默认设置可能不足以满足我们的需求。 例如,如果目标颜色不是 sRGB,则需要使用自定义 CCM。因为Blackfly S 是转成 sRGB。
下面用例子的形式,展示了如何将一个(源)的图像颜色转换为相机(目标相机)的图像颜色。
通过上位设置自定义的CCM
要派生自定义 CCM:
1 使用以下目标和源表示法来定义目标和源摄像机。
2 在标准照明条件下拍摄标准化颜色校准图的图像。 (这个例子显示了一个有 24 个方格的 Macbeth 颜色检查器。)
3 确定每个正方形中的平均像素颜色值,以建立 24 种唯一颜色进行比较。 在这些计算中,k = 24 作为每个正方形中 24 个平均像素颜色:
4 使用矩阵乘法确定 CCM:
5 定义 CCM 后,将 CCM 值映射到 Blackfly S 相机中的相应参数。
6 使用 SpinView 为自定义 CCM 设置增益值:
RGB Transform Light Source选择Custom
然后选择 Color Transformation Value Selector 选择 Gain00 然后下面设置值的大小
然后把00-22的都设置一遍
通过API代码设置自定义CCM
设置自定义CCM
//设置自定义CCM
//开启ISP
CBooleanPtr ptrIspEnable = nodeMap.GetNode("IspEnable");
ptrIspEnable->SetValue(1);
//开启ColorTransformationEnable
CBooleanPtr ptrColorTransformationEnable = nodeMap.GetNode("ColorTransformationEnable");
ptrColorTransformationEnable->SetValue(1);
// 将RgbTransformLightSource 设置为 Custom
CEnumerationPtr ptrRgbTransformLightSource = nodeMap.GetNode("RgbTransformLightSource");
CEnumEntryPtr ptrRgbTransformationLightSourceCustom = ptrRgbTransformLightSource
->GetEntryByName("Custom");
ptrRgbTransformLightSource->SetIntValue(ptrRgbTransformationLightSourceCustom
->GetValue());
//设置 Gain00
CEnumerationPtr ptrColorTransformationValueSelector =
nodeMap.GetNode("ColorTransformationValueSelector");
CEnumEntryPtr ptrGain00 = ptrColorTransformationValueSelector->GetEntryByName("Gain00");
ptrColorTransformationValueSelector->SetIntValue(ptrGain00->GetValue());
CFloatPtr Gain00Value = nodeMap.GetNode("ColorTransformationValue");
Gain00Value->SetValue([Enter CCM Value]);
// 同样设置 Gain00-22
边栏推荐
- centos8 用yum 安装MySQL 8.0.x
- HDU 4661 message passing (wood DP & amp; Combinatorics)
- Analyze "C language" [advanced] paid knowledge [i]
- AcWing 346. Solution to the problem of water splashing festival in the corridor (deduction formula, minimum spanning tree)
- MySQL's most basic select statement
- 场景实践:基于函数计算快速搭建Wordpress博客系统
- Reptile practice (VI): novel of climbing pen interesting Pavilion
- uva 1401 dp+Trie
- C语言关于链表的代码看不懂?一篇文章让你拿捏二级指针并深入理解函数参数列表中传参的多种形式
- The GPG keys listed for the "MySQL 8.0 community server" repository are already ins
猜你喜欢
js如何快速创建一个长度为 n 的数组
Errors made in the development of merging the quantity of data in the set according to attributes
微服务架构介绍
Ros Learning (23) Action Communication Mechanism
ROS学习(十九)机器人SLAM功能包——cartographer
Make DIY welding smoke extractor with lighting
开发中对集合里面的数据根据属性进行合并数量时犯的错误
dvajs的基础介绍及使用
Cat recycling bin
Let's see how to realize BP neural network in Matlab toolbox
随机推荐
JVM memory model
ROS学习(21)机器人SLAM功能包——orbslam的安装与测试
Introduction to microservice architecture
Ros Learning (23) Action Communication Mechanism
Box stretch and pull (left-right mode)
Blue Bridge Cup 2022 13th provincial competition real topic - block painting
AcWing 1142. Busy urban problem solving (minimum spanning tree)
Reptile practice (VI): novel of climbing pen interesting Pavilion
新工作感悟~辞旧迎新~
Image watermarking, scaling and conversion of an input stream
Use nodejs to determine which projects are packaged + released
mongodb查看表是否导入成功
C语言【23道】经典面试题【下】
uva 1401 dp+Trie
ROS learning (XX) robot slam function package -- installation and testing of rgbdslam
Analyze "C language" [advanced] paid knowledge [i]
开发中对集合里面的数据根据属性进行合并数量时犯的错误
C language [23] classic interview questions [Part 2]
WCF基金会
AcWing 345. 牛站 题解(floyd的性质、倍增)