我如何遇到OpenCV或寻找ColorChecker

我已经在新西伯利亚的CS中心学习了第二年。 在进入之前,我已经在IT部门工作过-我曾在Yandex中担任分析师,但我想进一步发展,发现当前任务之外的事情,并在同事的建议下,我进入了CS中心。 在本文中,我想谈一谈我在学习中经历的实践。

在第一学期开始时,我们获得了几个项目。 我的注意力立即吸引到了一个名为“评估照片中谷物颜色的方法”的项目。 SB RAS细胞与遗传学研究所的专家提出了这个主题,但是该项目本身与图像分析和处理有关,而与生物学无关。 我之所以选择它,是因为我对机器学习和模式识别感兴趣,并且我想在这些领域进行练习。

项目的实质


有一个SeedCounter应用程序设计用于从照片中计数和测量小麦籽粒的大小,以便使农艺师摆脱繁琐而繁琐的谷物计数和分析工作。 我需要研究从照片确定颗粒颜色的可能性,并在应用程序中实现这一点,以便可以将颗粒分为有意义的类别。 所获得的类别可以例如对应于对人类有用的物质的含量。

校准前后的示例照片:



从照片中获取和了解谷物的颜色似乎是一项简单的任务,尤其是如果已经有一种算法可以自行查找谷物。 但是,获得的颜色非常依赖于照明,并且照相机会引入其自身的失真。 结果,获得的颜色与谷物本身的性质几乎没有关系。 因此,主要目的是获得校准的谷物颜色,即 例如在理想的拍摄条件下。

为了调整颜色,我们使用了一个称为ColorChecker的参考调色板。 ColorChecker与谷物位于同一框架上,其颜色事先已知。 应用程序必须选择图像转换,以使ColorChecker上的颜色尽可能接近已知的参考颜色。

也就是说,该任务分为三个子任务:

  • 在图像中找到ColorChecker,
  • 计算颜色转换并将其应用于图像,
  • 根据获得的颜色分离谷物。

工作进度


首先,我们搜索了已经实现的ColorChecker搜索算法-在免费的macduff软件包中找到了它。 我在测试图像上进行了尝试,结果很糟糕:即使将ColorChecker旋转一小段,也无法识别出调色板的正方形,之后我开始寻找方向不重要的其他搜索方法。 事实证明,有一种方法可用于查找任意对象的更一般的任务-它基于对图像中特征点的选择,并将它们与模板进行比较。 所有必需的组件已经在OpenCV中,因此实现它并不困难。

为了突出OpenCV中的特征点,我们使用了几种算法:专利(SIFT / SURF)和免费(ORB / FAST)。 最初,该方法在获得专利的选件上效果很好,但速度非常慢,这在移动设备上使用时至关重要。 库的标准版本中也没有它们,这可能会导致移植到Android时遇到困难。 使用更快的选项时,识别质量下降。

为了提高识别质量,我查看了算法错误的示例。 在大多数情况下,该算法找到了ColorChecker的大概位置,但没有准确确定其面积。 由于无法准确确定从中获取颜色进行校准的点的面积,因此它们没有分别落入调色板的正确正方形中,因此颜色恢复不正确。 为了解决这个问题,我尝试重新运行该算法,得到了不准确的初始近似值,并且还根据经验将用于校准的点沿所需的平方方向移动。 在那之后,该方法的质量提高并被接受,即使对于最初较弱但快速的算法也是如此:
演算法准确度工作时间
冲浪75%2.8秒
83%(+ 8%)14秒
SIFT88%3.4秒
96%(+ 8%)15秒
轻快65%0.5秒
93%(+ 28%)1.5秒
天体56%0.4秒
79%(+ 23%)1秒

为了进行校准,我使用简单的最小二乘回归:颜色和更高阶均为线性。 因此,出现了一个问题:如何从多个模型中选择最佳。 基于颜色与标准品的接近度的指标得出的结果不一:从人的角度来看,根据形式标准进行良好校准的图像可能看起来不自然。 下图显示了这种效果的示例。 为了说明而不是谷物,我切了一块马铃薯块茎,因为它较大,因此我们可以更好地看到颜色失真。 我们尝试更改指标,但最终我们决定最好通过对最终任务(谷物分离)结果的影响来评估模型以进行校准。

马铃薯块茎切片,从左到右:校准之前,通过一阶,二阶和三阶回归进行校准后。



接下来,有必要组装一个数据集,以检查ColorChecker搜索和校准的质量,并解决按颜色分离颗粒的问题。 为此,我们采集了不同品种的谷物样品,并在各种设备上用不同的光源拍照:人造光源和日光。 之后,我将所有图像通过校准算法进行处理,并收集了谷物的颜色,我便准备了用于识别谷物的算法。 我必须重复进行多次此过程:对质量差的图像进行识别并不总是很有效,我不得不选择其他启发式方法来筛选出垃圾。

最后,结果是收集了一个令我满意的数据集。 我对谷物分离的问题进行了形式化的描述:将9种谷物分为三类(白色,红色和紫色)​​,每个谷物必须按颜色分类为三类之一。 我尝试了简单的分类方法,例如KNN和线性分类器,但未能获得良好的准确性。 但是,即使用肉眼观察,也很明显,这些类别彼此强烈相交,并且它们之间没有明显的分隔表面。

总结


这项工作的主要结果是ColorChecker搜索算法,该算法可以快速,高质量地工作,并可以进行颜色校准。 它不仅对谷物有用。 例如,可以将其应用于分析麦穗的任务。

我还检查了按颜色对颗粒进行分级的可能性-即使借助校准,在这里也无法获得高精度。

但是最重​​要的结果是,我获得了解决现有架子上没有现成算法的问题的经验,我为自己发现了令人兴奋的计算机视觉领域,希望以后会遇到。

Source: https://habr.com/ru/post/zh-CN437450/


All Articles