【转载】自动化魔方求解器的Bug——选择合适的色彩空间
几天前我的朋友马克告诉我关于构建一个基于计算机视觉的自动化魔方求解器的想法,我很好奇。他试图使用颜色分割来查找立方体的当前状态。虽然他的颜色分段代码在晚上在他的房间里工作得很好,但是在白天他的房间外面,他的颜色分解代码却崩溃了!
他问我求助,我立即明白他哪里出了问题。像许多其他业余电脑视觉爱好者一样,他在做色彩分割时没有考虑不同照明条件的影响。我们在许多计算机视觉应用中遇到了这个问题,这些计算机视觉应用涉及肤色检测,交通灯识别等基于颜色的分割。
在本文中,我们将介绍计算机视觉中使用的一些重要色彩空间。我们不会在Wikipedia上找到它们背后的理论。相反,我们会发展一个基本的直觉,并学习一些重要的属性,这些属性将在以后作出决定时很有用。
1. 准备工作……
让我们加载同一个立方体的2个图像。 它将默认以BGR格式加载。第一张照片是在阳光明媚的室外环境下拍摄的,第二张照片是在正常照明条件下拍摄的。
2. RGB颜色空间
RGB色彩空间具有以下属性:
- 这是一个加色空间,通过红,绿和蓝色值的线性组合获得颜色
- 三个通道通过撞击表面的光量相关联
让我们把这两幅图像分解成它们的R,G和B分量,并观察它们以获得更多的色彩空间
如果你看蓝色的通道,可以看到在室内照明条件下,第二张图像中的蓝色和白色的部分看起来相似,但是在第一张图像中有明显的差别。这种不均匀性使得在这个色彩空间中基于颜色的分割非常困难。此外,两个图像的值之间存在总体差异。下面我们总结了与RGB颜色空间相关的固有问题:
- 显着的感知不均匀性
- 色度(颜色相关信息)和亮度(强度相关信息)数据的混合
3. LAB色彩空间
Lab色彩空间有三个组件。
- L - 亮度(强度)
- a - 从绿色到品红色的一种颜色成分
- b - 颜色分量从蓝色到黄色
Lab色彩空间与RGB色彩空间大不相同。在RGB色彩空间中,色彩信息被分成三个通道,但相同的三个通道也编码亮度信息。另一方面,在Lab色彩空间中,L通道独立于色彩信息,仅对亮度进行编码。另外两个通道编码颜色。
它具有以下属性:
- 感知上统一的颜色空间,接近我们如何看待颜色
- 独立于设备(捕获或显示)
- 在Adobe Photoshop中广泛使用
- 通过一个复杂的变换方程与RGB色彩空间相关联
让我们看看Lab色彩空间中的两个图像分成三个通道。
从图中可以清楚地看出,照度的变化主要影响L分量,包含颜色信息的A和B成分没有经历大的变化。
在B分量中,绿色,橙色和红色(它们是A分量的极值)的相应值没有改变,类似地,蓝色和黄色(它们是B分量的极值)的相应值在A分量中也没有太大变化。
4. YCrCb色彩空间
YCrCb颜色空间是从RGB颜色空间导出的,并具有以下三个组件:
- Y - 伽马校正后从RGB获得的亮度或亮度(Luma )分量
- Cr = R - Y(红色分量距离Luma有多远)
- Cb = B - Y(蓝色分量距离Luma的有多远)
此颜色空间具有以下属性:
- 将亮度和色度分量分离成不同的通道
- 主要用于电视传输的压缩(Cr和Cb组件)
- 设备依赖
对于照度变化,可以针对强度和颜色分量进行类似的观察。
- 与LAB相比,红色和橙色之间的感知差异甚至在户外图像中更小
- 所有3个部件中的白色都发生了变化
5. HSV色彩空间
HSV色彩空间有以下三个组成部分:
- H: 色调(主波长)
- S: 饱和度(纯度/颜色的阴影)
- V: 强度
我们列举一些属性:
- 最好的事情是,它只使用一个通道来描述颜色(H),使得指定颜色非常直观
- 设备依赖
- 在这两组图像中,H分量非常相似,即使在光照变化下,颜色信息也是完整的
- S组件在两幅图像中也非常相似
- V分量捕捉到的光线量因此会随着光照的变化而变化
- 红色的室外和室内图像的价值之间存在着巨大的差异。这是因为色调表现为一个圆形,红色是在起始角度。所以,可能需要[300,360]和[0,60]之间的值。
【转载】自动化魔方求解器的Bug——选择合适的色彩空间的更多相关文章
- FLUENT不同求解器离散格式选择【转载】
转载自:http://blog.163.com/wu_yangfeng/blog/static/16189737920104158950438/ 离散格式对求解器性能的影响 控制方程的扩散项一般采用中 ...
- (转载)通过dbgrideh 从数据集中选择合适的记录
通过dbgrideh 从数据集中选择合适的记录 //---------------------------------------------------------// 通过dbgrideh 从数据 ...
- pimpleFoam求解器 vs simpleFoam求解器 vs pisoFoam求解器 vs icoFoam
翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/68072-pimplefoam-vs-simplefoam ...
- 数学规划求解器lp_solve超详细教程
前言 最近小编学了运筹学中的单纯形法.于是,很快便按奈不住跳动的心.这不得不让我拿起纸和笔思考着,一个至关重要的问题:如何用单纯形法装一个完备的13? 恰巧,在我坐在图书馆陷入沉思的时候,一位漂亮的小 ...
- [转载]基于TFS实践敏捷-修复Bug和执行代码评审
本主题阐释了这些功能,以继续这一关注虚拟敏捷团队成员的一天的教程. Peter 忙于编写一些代码以完成积压工作 (backlog) 项任务.但是,他的同事发现了一个阻碍他们工作的 Bug,他想立即修复 ...
- Maxwell顺态求解器电磁力分析
文源:技术邻 问题描述:求解一段通有正弦交流电的直导线在某一稳态磁场中的受力情况,并简单验证仿真结果. 模型介绍: 如上几何模型中10mm边长立方体代表永磁体,材料属性为材料库中的NdFe35,修改磁 ...
- SCIP | 数学规划求解器SCIP超详细的使用教程
前言 小伙伴们大家好呀!继上次lp_solve规划求解器的推文出来以后,大家都期待着更多求解器的具体介绍和用法.小编哪敢偷懒,这不,赶在考试周之际,又在忙里偷闲中给大家送上一篇SCIP规划求解的推文教 ...
- win10安装z3求解器
因为课程要求,我不得不接触求解器,之前有在ubuntu上装过一个叫stp的求解器,没怎么用: 今天在我的电脑(win10)上上装了一款更方便的求解器---z3,下面先详细介绍一下怎么安装和配置: 1. ...
- chtMultiRegionSimpleFoam求解器的热源不在边界上【翻译】
翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/126777-chtmultiregionsimplefoa ...
随机推荐
- maven打包相关配置
1.在pom.xml中进行如下配置: <build> <plugins> <plugin> <groupId>org.springframework.b ...
- hdu2665可持久化线段树,求区间第K大
Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- LightOJ1030 Discovering Gold
题目链接:https://vjudge.net/problem/LightOJ-1030 知识点: 概率与期望 解题思路: 设某一个点 \(i\) 能到达的点的个数为 \(x\),其上有金 \(g\) ...
- Java——反射三种方式的效率对比
转载自:https://blog.csdn.net/aitcax/article/details/52694423 1 使用field(效率最高) long start = S ...
- UIAutomator2的API文档(二)
1.设备屏幕事件 熄灭屏幕d.screen_off() 唤醒屏幕d.screen_on() 屏蔽状态d.info.get('screenOn')#返回True or False 解锁屏幕d.unloc ...
- linux高级应用第九章-正则表达式
笔记部分 基础正则表达式: ^ 第1个符号 ,以什么什么开头 ^m $ 第2个符号,以什么什么结尾 m$ ,还表示空行,或空格,可以用cat -An 试一下 ^$ 第3个符号,空行 ...
- Java实现 LeetCode 821 字符的最短距离(暴力)
821. 字符的最短距离 给定一个字符串 S 和一个字符 C.返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组. 示例 1: 输入: S = "loveleet ...
- (Java实现) 最大团问题 部落卫队
首先介绍下最大团问题: 问题描述:给一个无向图G=(V,E) ,V是顶点集合,E是边集合.然后在这顶点集合中选取几个顶点,这几 个顶点任意两个之间都有边在E中.求最多可以选取的顶点个数.这几个顶点就构 ...
- Java实现 LeetCode 688 “马”在棋盘上的概率(DFS+记忆化搜索)
688. "马"在棋盘上的概率 已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始.即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1). 现有 ...
- Java实现 LeetCode 114 二叉树展开为链表
114. 二叉树展开为链表 给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 class S ...