【问题标题】:Find and Crop relevant image area automatically自动查找并裁剪相关图像区域
【发布时间】:2012-12-27 17:51:55
【问题描述】:

我们正在尝试以方形纵横比 (1:1) 裁剪图像(照片)的相关区域,类似于 Facebook 在创建缩略图时所做的。

在我们的例子中,裁剪是否具有要处理的图像的原始高度(或当图像方向为纵向 h>w 时的宽度)或者自动裁剪是否也在调整自身大小并不重要

我正在考虑一些算法,例如将对象与背景或焦点或热图之类的东西进行比较,组合颜色和/或区域以找到最相关的部分。可能有几种想法/方法可以找到要使用的图像的主要部分,类似于人脸检测。

我们正在寻找基于 Java (Android) 的解决方案或任何可用于 Java/Android 的解决方案。任何帮助或想法将不胜感激!谢谢!

【问题讨论】:

    标签: java android image-processing crop feature-detection


    【解决方案1】:

    我将分两步执行此操作,其中初始步骤更稳健,第二步可能基于熵等。第一步,你可以使用现在比较常见的 SURF,我希望能找到它的 Java 实现。 SURF 将给出一组它认为对描述您的形象很重要的关键点。考虑到这些关键点在图像中的位置,您有一组(x, y) 坐标,您可以使用这些坐标将初始图像的区域缩小到包含这组点的区域。现在,由于这些关键点可能在您的图像中的任何位置,您可能想要丢弃其中的一些(即,离其他点太远的那些——异常值)。执行此丢弃步骤的一种非常简单的方法是从初始关键点集中考虑凸包,从那里,您可以多次剥离该包。每次“剥离”它时,您实际上是在丢弃当前凸包中的点。

    这是第一步的示例:

    f = Import["http://fohn.net/duck-pictures-facts/mallard-duck.jpg"];
    kp = ImageKeypoints[f, MaxFeatures -> 200];
    Show[f, Graphics[{PointSize[Medium], Red, Point[kp]}]]
    

    将关键点形成的凸包剥离一次后,根据剩余点的边界矩形修剪图像:

    从上图中,您可以根据其他方法决定选择哪个子区域。一种显然很常见的是 Reddit 使用的一种,它连续地从图像中删除较小熵的切片。赶紧搜了一下,在https://github.com/christopherhan/pycrop/blob/master/pycrop.py#L33找到了一个这样的实现,很简单。

    您可能想尝试的另一种不同的方法称为Seam-Carving。另请注意,根据初始图像的大小,裁剪一小部分不太可能提供任何相关信息。在这些情况下,首先调整图像大小然后应用相关方法会更有趣。

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 2021-03-13
      • 1970-01-01
      • 2020-10-29
      • 2012-03-08
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多