我有从滑动扫描仪拍摄的指纹图像。但是输出没有干净的背景。它看起来像这样:
dirty http://img208.imageshack.us/img208/2622/dirtyie0.png
我想删除背景,以便进一步处理更准确。像这样:
cleaned http://img515.imageshack.us/img515/7530/cleanhh6.png
怎么做?可以使用什么图像处理技术(如果有的话)?谢谢。
答案 0 :(得分:7)
您可以检查像素周围区域的频谱。您拥有的频率成分越少,像素就越有可能成为背景的一部分。
最复杂的方法是运行像素块的FFT并直接检查光谱。由于指纹具有不同的频谱,因此应该很容易将背景与指纹分开。
使用Wavelet也值得一试。这使您可以直接将图像分割成感兴趣频率的子带。找到一个好的小波需要很多练习。
如果你想要一个非过度杀伤解决方案,如果运行图像的高通滤波器并将其用于简单的掩码查找通道,可能就可以了。以下是大致如何运作的概述:
规范化图像:最暗的像素变为-1,最亮的像素变为1.如果您更喜欢使用字节,也可以使用-128 / 127.
在图像上运行高斯模糊。试验半径。
从模糊图像中减去标准化图像。通过饱和到-1和1来处理溢出。图像现在大致看起来像是边缘检测到的,但是使用灰色阴影而不是二进制掩模。
对步骤3中的图像执行掩码传递。每个像素的绝对值越高,它作为指纹的一部分的可能性就越大。您可以通过选择一个好的阈值来生成掩码。
使用蒙版准备源图像。
为了完整起见,您也可以使用图像形态学:
在图像上运行边缘检测器。使用Canny探测器是一个不错的选择,但是一个简单的3x3边缘探测器内核也可以工作。
在边缘上运行多次扩张传递。这将在每次通过时围绕所有白色像素生长边框并使边缘变粗。这样做直到指纹的所有区域都覆盖有白色像素。在你的例子中,我认为4或5次传球就足够了。
您现在可以直接使用扩张图像作为遮罩。
答案 1 :(得分:6)
您可以尝试使用边缘检测滤镜。这有助于消除背景噪音,并可能会在其余处理过程中提高指纹特征。
Canny edge detector可能是首先尝试的好人。甚至有free web implementations you can try和public-domain Java implementation available。
编辑:好奇它是如何工作的,所以我在默认设置上尝试了网络实现 - 不是太糟糕。它似乎确实提出了一些“幻像”功能,但总的来说它看起来更容易处理。alt text http://img356.imageshack.us/img356/5/ml00055edgedetectionwp7.png
答案 2 :(得分:2)
尝试一些对比度增强(例如墨西哥帽),然后进行一些高级增强。 当使用Gabor过滤技术改善树木的CT图像时,我们取得了良好的效果。我们使用gabor滤镜,因为它们广泛用于指纹匹配系统,我们的图像有些相似。 之后,你所要做的只是一些(我建议局部自适应)阈值,你得到了你的二进制图像。
答案 3 :(得分:1)
首先,我将对比度增加到100%以获得纯黑白图像(不是灰度)。
答案 4 :(得分:1)
有许多类型的算法可以对指纹进行分割。其中一个适用于传感器(您的情况)的工作基于图像中每个像素的平均值和方差。以下是算法的步骤,您可以在此处找到:
1. 加载尺寸为R x C像素的图像。这里指纹内的内容并不重要,所以我将其覆盖。您可以看到指纹周围的噪点(小点),这是从传感器获取的高质量图像,可能是您的图像质量差,背景噪点更多。
2。我没有像报纸那样执行图像的标准化。因此,下一步是定义大小为 w x w 的像素块,并将图像分成非重叠的块。
3。对于每个像素,移动块并计算均值和方差。将每个方差保存在矩阵中以进行进一步比较。你将不得不威胁边界。
4. 定义阈值。在 w = 15 的论文中,阈值 T = 210 。
5. 对于与阈值比较的每个差异,如果它小于背景,如果不是,则为指纹本身。
完成所有这些步骤后,您将获得背景噪点较少的图像。与此类似:
以下是论文中的算法:
对于其他算法,请参阅:
An Improved Fingerprint Segmentation Algorithm Based on Mean and Variance
Improved fingerprint image segmentation using new modified gradient based technique