自动裁剪图像(自动识别图像与背景)

时间:2011-02-07 18:18:03

标签: image-processing crop

我正在寻找裁剪上传图片的方法。如果用户提供要裁剪的尺寸/位置,我花了很多时间搜索网站并找到很多好的解决方案。

我的照片大多是在较暗的背景下拍摄的纸条。考虑驾驶执照,信用卡,票根的相机手机镜头,背景稍暗(但不是标准)。我正在寻找一种方法,可以在上传之前或之后让我的代码识别应该裁剪的内容。

在一个完美的世界里,一些聪明人会提出关于裁剪什么的建议,并给予用户一个机会让它最终好。这将允许不那么完美的裁剪算法。

根据第一个答案查找'trim'而不是crop,看起来我可以使用Imagemagick imagemagick.org/script/api.php

Imagemagick似乎在PHP和&红宝石。它支持修剪“模糊”图像,其中边界不一致。我正在寻找建议的问题是对图形引擎的建议,该图形引擎具有良好的逻辑来查找图像的边缘。是否有更好的引擎,我应该看看imagemagick?

3 个答案:

答案 0 :(得分:3)

查看以下结果是否令人满意。我在Mathematica中实现了一个小程序来完成它。如果您喜欢这些结果,我可以进一步解释算法,或者您可以自己检查Mathematica帮助文件。

我们从这些图片开始:

enter image description here enter image description here

并定义以下功能:

f[image_] := 
 ImageCrop@
   ImageMultiply[image, 
    ColorNegate@
     Erosion[Dilation[
       DeleteSmallComponents[Binarize@ColorNegate@image, 10000], 3], 
      3]] // ImageAdjust  

结果是:

enter image description here enter image description here

HTH!

答案 1 :(得分:1)

意识到,在每个像素的基础上,您要裁剪的背景不一致。存在微妙的(有时不是微妙的)变体,您需要考虑使用容差

如果您熟悉Adobe Photoshop,则有一个功能可以完全按照您的建议执行(图像 - >修剪)。它的工作原理是查看用户选择的角点像素(左上角,右上角等),然后确定该颜色的最外围像素。

在编程中,您需要迭代图像中的像素,并确定所选颜色的的最顶部和最底部像素的Y坐标,即X坐标。最左边和最右边。然后这些坐标确定作物尺寸。

在确定某个像素是否为所选颜色时,可以通过允许百分比差异进行分解来引入容差。换句话说,如果背景不是一致的白色(RGB 255,255,255),您可能希望允许一些变化。

您没有提及编程语言,因此您需要研究可能希望利用的图形库和函数。

答案 2 :(得分:0)

可能有用的一个短语是“显着性” - 识别图像的“有趣”区域。开始研究这个问题的地方是Microsoft Research - 您可以通过概述“有趣部分”的图像示例。这是否达到了你的要求?