我有一个从滑动扫描仪拍摄的指纹图像.但是输出没有干净的背景.它看起来像这样:
脏http://img208.imageshack.us/img208/2622/dirtyie0.png
我想删除背景,以便进一步处理更准确.像这样的东西:
清理http://img515.imageshack.us/img515/7530/cleanhh6.png
怎么做?可以使用什么图像处理技术(如果有的话)?谢谢.
您可以检查像素周围区域的频谱.您拥有的频率较低的组件,像素是背景的一部分的可能性越大.
最复杂的方法是运行像素块的FFT并直接检查光谱.由于指纹具有不同的频谱,因此应该很容易将背景与指纹分开.
使用Wavelet也值得一试.这使您可以直接将图像分割成感兴趣频率的子带.找到一个好的小波需要很多练习.
如果你想要一个非过度杀伤解决方案,如果你运行图像的高通滤波器并将其用于简单的掩码查找传递可能会很好.这是一个粗略的概述:
规范化图像:最暗的像素变为-1,最亮的像素变为1.如果您更喜欢使用字节,也可以使用-128/127.
在图像上运行高斯模糊.试验半径.
从模糊图像中减去标准化图像.通过饱和到-1和1来处理溢出.图像现在大致看起来像是边缘检测到的,但是使用灰色阴影而不是二进制掩模.
对步骤3中的图像执行掩码传递.每个像素的绝对值越高,它作为指纹的一部分的可能性就越大.您可以通过选择一个好的阈值来生成掩码.
使用蒙版来准备你的源图像.
为了完整起见,您还可以使用图像形态学:
在图像上运行边缘检测器.使用Canny探测器是一个不错的选择,但是一个简单的3x3边缘探测器内核也可以工作.
在边缘上运行多次扩张传递.这将在每次通过时围绕所有白色像素生长边框并使边缘变粗.这样做直到指纹的所有区域都覆盖有白色像素.在你的例子中,我认为4或5次传球就足够了.
您现在可以直接使用扩张图像作为遮罩.
链接:扩张http://homepages.inf.ed.ac.uk/rbf/HIPR2/dilate.htm
您可以尝试边缘检测过滤器.这将有助于消除背景噪音,并可能在其余处理过程中增强指纹功能.
Canny边缘探测器可能是一个很好的尝试.甚至还有一个免费的Web实现,您可以尝试使用公共域Java实现.
编辑:好奇它是如何工作的,所以我在默认设置上尝试了网络实现 - 不是太糟糕.它似乎确实提出了一些"幻像"功能,但总体而言,它看起来更容易处理.
替代文字http://img356.imageshack.us/img356/5/ml00055edgedetectionwp7.png