如何从图像中提取背景?

时间:2010-01-02 14:03:10

标签: image image-processing image-manipulation

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

我认为最好的方法是在图片上应用边缘检测过滤器。

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

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

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

答案 1 :(得分:0)

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

将图像转换为灰度 - 因此您的指纹为黑色白色。

找到获取大部分指纹的阈值。

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

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

在框中:

[X-2vx,γ-2vy] [X-2vx,Y + 2vy] [X + 2vx,Y + 2vy] [X + 2vx,γ-2vy]

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

这种方法很适合您的情况:)