【问题标题】:How can I go about extracting the background from an image?如何从图像中提取背景?
【发布时间】:2012-08-05 05:44:51
【问题描述】:

基本上,假设我有一个指纹。我知道我的图像的尺寸,并且我知道指纹在白色背景上是黑色的,或者在黑色背景上是绿色的或类似的东西。

有没有办法只处理界定图像的部分,在这种情况下是指纹?我要做的基本上是这样的:

1) 定界指纹
2) 提取重要点以与其他指纹进行比较
3) 在之前提取过点的其他指纹的数据库中找到最佳匹配

我已经有了 2 和 3 的方法,所以现在我只需要分隔图像。

编程语言必须是 Ruby、Java 或 C++。首选 Ruby,然后是 Java,如果我必须使用 C++,请上帝帮助我。我没有任何图像处理经验,但如果可能的话,我想使用多种常见格式,例如 jpg、gif、png。

【问题讨论】:

  • 这是一个大难题。要么你会找到一个包来为你做这件事,要么 C++ 是你最不用担心的。

标签: image image-processing image-manipulation


【解决方案1】:

我认为最好的方法是对您的图像应用边缘检测滤镜。

维基百科 (article) 建议了一些方法,但没有一个是微不足道的,因为它们适用于梯度或内核。您应该检查 Canny Edge Detection,这应该足以直接实施:tutorial

无论如何,如果您想避免深入了解实现细节,您应该使用 OpenCV,它是一个能够以简单的方式完成这些事情的计算机视觉库。您可以肯定地在 C++ 和 Java 中使用它,但我认为也提供了 Ruby 的包装器。 This 是一个使用 Canny 算法的库的简单示例。

编辑:实际上我的回答涵盖了第 2-3 点,所以我想知道您对图像进行定界是什么意思?想想如果你想比较不同的指纹也必须考虑缩放或旋转这一事实:你需要一个模糊比较器..也许你应该处理可以更好地处理这些事情的图像的快速傅里叶变换版本。

【讨论】:

    【解决方案2】:

    一种简单的方法是使用阈值,例如:

    将您的图像转换为灰度 - 这样您就有了黑底白字的指纹。

    找到一个能够获取大部分指纹的阈值。

    使用开运算 (http://en.wikipedia.org/wiki/Mathematical_morphology) 去除噪音。 (用扩张实验几次)

    求图像的重心 (x,y) 和标准差 (vx, vy)。

    在盒子里:

    [x-2vx,y-2vy], [x-2vx,y+2vy], [x+2vx,y+2vy], [x+2vx,y-2vy]

    你会发现 95.4% 的像素 如果您有许多异常值,您可以缩小框以找到其中的实际最大和最小像素。 使用该框从原始图像中剪辑。

    这是一种简单的方法,可能适合您的情况:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 2020-04-21
      • 2019-06-29
      • 2015-08-09
      • 1970-01-01
      • 2013-07-15
      • 2017-01-06
      相关资源
      最近更新 更多