什么是正面?- 自动图像旋转算法

24

像Google Picasa这样的软件很好地展示了一点,即软件可以在没有Exif数据的情况下判断照片的拍摄方向,因为并不是每个相机都能提供该信息。

是否有一种记录在案的算法可输出图像是否需要旋转? 我想找出旋转方向,但不使用EXIF数据。如果可能的话,我想用ImageMagick来做到这一点。


1
你看到过 Picasa 不能正确处理的例子吗?你尝试过加载合成图像来查看 Picasa 如何处理它们吗?另外,你能发布一些样本图像吗? - Rethunk
1
抱歉,我是一名自然语言处理模型,无法打开链接。请提供需要翻译的具体内容,谢谢。 - ergosys
1
我通过谷歌搜索“图像方向检测算法”找到了几篇论文(以及上述重复的内容)。 - ergosys
6个回答

29
这是一个复杂的问题,需要根据持续的研究进行相应的处理。Yann's answer基本上指向了已有的常规方法 (+1),而mfrellum's hint则涉及到模式识别这一主题同样适用 (+1) - 如果您想进行更深入的分析,可以阅读以下几篇论文(这是我个人过去研究的主观选择):

[请注意:下面大多数PDF链接都是从Google Scholar中推断出来的 - Google自然擅长在公开可用的论文摘要中找到匹配的PDF,而实际内容往往被隐藏在付费墙后面。当然,这种做法的合法性存在争议,对于通常公开资助的科学研究进行如此屏蔽也是如此 - 请自行判断!]

很遗憾,我不知道有哪些现成的实现/库可用,但如果没有几个可用的位,我会感到惊讶。

玩得开心 :)


15

当可用时,它可能会读取储存在JPEG头中的exif信息,来确定相机在拍摄照片时的方向。这比尝试分析照片找出哪个方向朝上的方法要简单得多。

共有八种可能的方向。标志告诉您哪个方向是朝上的:

EXIF Orientation Value  Row #0 is:  Column #0 is:
1                       Top         Left side
2*                      Top         Right side
3                       Bottom      Right side
4*                      Bottom      Left side
5*                      Left side   Top
6                       Right side  Top
7*                      Right side  Bottom
8                       Left side   Bottom

NOTE: Values with "*" are uncommon since they represent "flipped" orientations.

这将减少需要使用图像识别的照片数量。


4
请注意:在问题更新之前,我已经添加了这个答案。 - ChrisF

7
我不知道具体的实现方法,但以下是一些想法:
  1. 天空是蓝色的。寻找边缘上的蓝色。越多的蓝色 = 更可能是向上。
  2. 图像的上部区域通常比下部区域更少细节(天空、云)。
  3. 进行边缘检测并寻找长的水平线。如果它们不是水平的,那么图像可能是倾斜的。结合 #1 和 #2 来确定是否旋转了180度。

请注意,EXIF 数据中有一个旋转字段,来自相机的方向传感器。始终首先使用此数据,因为其余的是图像处理的猜测。


5

我不知道有没有现成的解决方案,但这是一个分类问题,有许多经典算法可以使用。B.D. Ripley的Pattern Recognition and Neural Networks 是这个主题的好读物。

openCV有一个机器学习模块可用于此。

解决方案可能涉及启发式方法,如 Yann Ramin 的答案中的 1-3,但以介于0和1之间的数字量化,并放入向量中。您可以使用具有关于方向的exif数据的图像来制作分类器的训练集。


4
主要光源通常在上方,无论是白天还是晚上,是否有人在场景中。将高光检测与边缘检测相结合,您可以确定场景光源的可能位置并判断哪个方向是上方。
编辑:好问题-我刚刚在Google学者上花了5分钟,未能找到正确的问题领域。
编辑:明白了。它被称为“图像方向检测”-不是太模糊的标题。
编辑:快速回顾表明,有两种主要方法:
1.组合分类器-训练许多不同的分类器并组合结果,这是一种经典的“尽力而为”的方法。在这里,论文的大部分创新贡献似乎在于设计不同分类器如何组合的新方法。
2.具体特征-选择一个特定(或小的一组特定)特征并使用它们进行分类、检测方向。一些例子是:面部识别+边缘检测,局部二进制模式重叠(相对:仅适用于同一对象的两个图像之间)。
无论如何,这绝对是一个有趣的领域,似乎专利比论文更多,这使得它变得更加有趣。然而,我没有找到任何解释Picasa方法的内容。但我找到了这个:

S. Baluja(来自Google)发表了以下论文:

从这些内容可以得出结论,其中的方法是Google使用的指示性内容。

0

Picasa具有面部识别功能,即使它没有实际标记已知的人,也可能会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接