Python中的指纹增强

15

我正在为计算机视觉课程做指纹识别项目,使用Python编写。

在图像预处理方面,我使用了Gabor滤波器高斯模糊Otsu二值化等技术,得到了如下图所示的图片(左侧是原始图像,右侧是经过处理的图像):

第一张照片-原始的,第二张-预处理后的

接着,我进行骨架提取,但我认为图像有太多细节了。我想要得到类似这样的图像(第一张图是当前的图像,第二张是我想要得到的):

第一张图是当前的图像,第二张是我想要得到的

当我在第二幅图上进行骨架提取时,它看起来比现在的图片好多了。你有任何使用OpenCV和Python实现类似右侧图像的想法吗?

我特别想去掉那些小刺,并平滑边缘。


1
看起来你的预处理(骨架化之前)将输入图像中较亮的区域输出为黑色。反转一下可以作为快速检查。 - dhanushka
1
我认为阈值处理后再进行一些形态学操作可以让你完成大部分工作。 "刺"实际上是原始图片中的白色间隙。而这些间隙主要出现在左右方向上。因此,你可以使用宽度较大但高度不太多的核进行形态学操作。 - bfris
2
请问您能否发布原始的源图像和目标图像,且不压缩? - Mercury
2个回答

1

在Otsu之后,您似乎得到了反转的二进制图像,脊线变成了山谷。

您想要去除的那些小线条实际上是沿着脊线的间隙,应该通过Gabor滤波器进行去除。您可以再次应用Gabor滤波器或调整参数。


0

使用形态学运算符,您可以在这里取得相当大的进展。

img = cv.dilate(img, kernel, iterations)
img = cv.erode(img, kernel, iterations)

在编程方面,需要使用

标签或者其他过滤和平滑技术。所有可能有助于未来更详细搜索的关键词。

我特别想要摆脱那些小刺并使边缘变得平滑。

接下来,我将专注于您的“尤其紧迫的问题”,通过将它们转换成技术术语和某种要求进行翻译。

小刺 小刺通常是垂直指向的,而特征指纹线大多是水平对齐的。因此,使用Sobel滤波器可以解决问题,强调水平线条同时稀疏垂直线条。

img = cv.Sobel(src=img, ddepth=cv.CV_64F, dx=0, dy=1, ksize=5)

平滑边缘 平滑处理基本上是通过模糊处理,然后在第二步确保获得清晰的线条来完成的。这是通过以下方式实现的:

img = cv.medianBlur(img, 7)

并且

ret, img = cv.threshold(img, 50, 255, cv.THRESH_BINARY)

我的反转结果看起来像这样(通过进一步的超参数调整肯定可以获得更多收益)。

Fingerprint after operations


1
你能提供创建这个(惊人的)结果的代码吗?你提供的代码行是否应该完成其他任何事情? - RedYoel
这些提供的代码行正是解决问题的关键。 - mrk
有膨胀和腐蚀,还是没有?我尝试了没有,结果是一张黑色的图像。如果需要使用,推荐使用什么样的内核大小? - RedYoel
有没有膨胀和腐蚀的操作?我尝试了没有,结果得到了一张黑色的图像。如果需要进行这些操作,推荐使用什么样的核大小? - undefined
使用 - kernele = np.ones((3, 3), np.uint8),kerneld = np.ones((3, 3), np.uint8)。然而,这应该是一个超参数优化问题,而不是基于单个样本的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接