检测照片方向的算法

32

我希望能够自动旋转照片,即使图像方向的EXIF元数据不可用。

是否有好的算法来检测照片的方向?这些图像是数码相机拍摄的照片。该算法不必完美,但任何减少人类干预旋转照片所需数量的改进都将是受益的。

我已经找到了这两篇论文:

欢迎提供其他研究和尤其是实现的指针。


似乎没有自动垂直/水平方向的算法,但这是我能找到的最接近的算法,并且有一些实现:deskew。请检查ImageMagick deskew或者访问以下链接:http://www.google.com/codesearch/p?ct=rc#f0yt7jaEG7A/raster/deskewer.cpp - e.tadeu
3
人们正在将图像旋转的技巧作为新的CAPTCHA风格考虑。一个小的圆形图像呈现出一个明显(对我们来说)的对象,但没有清晰的地平线。我意识到这并没有对你有所帮助,但这确实突显了问题的深度。http://www.richgossweiler.com/projects/rotcaptcha/rotcaptcha.pdf - Omniwombat
@Luke Francl,我想做类似的事情,那最终对你有用的是什么? - Lazer
@eSKay - 目前还没有什么。我保持问题开放,以防有更好的解决方案出现。@smackfu 的建议是最好的,但目前没有现成的实现方式。你需要自己编写代码。我目前并不急需这个功能,所以没有进一步追问。 - Luke Francl
你只是想检测图像的四个边缘,选择哪一个作为顶部吗?还是希望能够选择在360度范围内任意旋转?我能想象到这两种情况需要不同的方法和算法。 - hippietrail
我和你处于同样的位置,只是晚了8年;-)。有很多东西可以用,我打算在Ubuntu上尝试exiftrans。你看过这篇论文吗?http://www.cs.toronto.edu/~guerzhoy/oriviz/crv17.pdf?他们声称在一个由数千张终端用户相机照片组成的数据集上取得了90%以上的成功率(失败的例子非常有趣)。祝你好运! - shellter
3个回答

9

许多消费数码相机拍摄的照片都是人物照片,这些照片可以用于定向。面部检测是一个经过深入研究的领域。基本的面部检测将给出一个长边应该是垂直维度的矩形。此外,如果您能检测到眼睛/嘴巴,您应该能够选择正确的矩形方向。

许多其他照片是旅游照片,天空是蓝色的向上,地面是绿色的向下。


5
许多人脸检测算法无法检测到倒置的人脸,因此需要在所有四个方向上寻找人脸。 - Janusz
2
这是我自从检查上面链接的论文以来一直在考虑的事情,因为其中至少有一篇使用人脸识别作为算法的一部分。由于我的照片库绝大部分都包含人脸,我认为这可能会很有效(假设我能找到一个可以识别方向的人脸识别程序,如Janusz所说)。 - Luke Francl
许多(大多数?)拍摄天空的旅游照片由于需要过度曝光天空以正确曝光较暗的主体,因此天空呈白色。 - Michael C
好主意,但很多照片里面没有人! - vy32

4

我只能找到http://sourceforge.net/projects/rotator/ 这个网站。

我使用了一个包含70张图片的测试集,其中大约有18张需要旋转。

在使用默认设置进行处理后,有20张图片因为旋转错误而导致问题。

结果不太理想。


感谢用户的报告! - vy32

0

如果图像不是正方形,您可能可以假设默认图像的宽度大于其高度。如果是这种情况,确定是否需要进行旋转只是比较纵横比并旋转以重新定向到默认位置的问题。虽然您可能最终会得到倒置的图像。


2
这仅适用于默认图像。经常拍摄脸部或人物的人会转动相机... - Janusz
当人们将相机转向拍摄这样的照片时,除非脸部侧着或倒立,否则您可以使用宽高比至少提供一些提示。 - bdbaddog
这是不正确的。每个对象都可以以纵向或横向方向拍摄照片。根据我的图像,比例为60:40(横向:纵向)。如果我有正方形图像,那是因为后期处理,而不是相机拍摄的结果。 - Romeo Ninov
@Janusz,这取决于很多因素。你会在横向方向上找到惊人的肖像照片。 - Romeo Ninov

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