Фильтрация отсканированного изображения в оттенках серого и двоичных файлов - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь получить бинаризованный отпечаток пальца из изображения сканирования большого пальца.Я добился устранения шумного фона.но я не могу найти фильтр, который может помочь мне достичь этого.У меня есть следующее обработанное изображение.

I want to extract fingerprint details in binarised form

Я хочу извлечь отпечатки пальцев в двоичном виде.Я уже попробовал,

    ret1,th1 = cv2.threshold(gray,48,80,cv2.THRESH_BINARY)

# Otsu's thresholding
ret2,th2 = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

# Otsu's thresholding after Gaussian filtering
blur = cv2.GaussianBlur(gray,(5,5),0)
ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

images = [gray, 0, th1,
          gray, 0, th2,
          gray, 0, th3]

titles = ['Original Noisy Image','Histogram','Global Thresholding (v=127)',
          'Original Noisy Image','Histogram',"Otsu's Thresholding",
          'Gaussian filtered Image','Histogram',"Otsu's Thresholding"]

for i in range(3):
    plt.subplot(3,3,i*3+1),plt.imshow(images[i*3],'gray')
    plt.title(titles[i*3]), plt.xticks([]), plt.yticks([])
    plt.subplot(3,3,i*3+2),plt.hist(images[i*3].ravel(),256)
    plt.title(titles[i*3+1]), plt.xticks([]), plt.yticks([])
    plt.subplot(3,3,i*3+3),plt.imshow(images[i*3+2],'gray')
    plt.title(titles[i*3+2]), plt.xticks([]), plt.yticks([])
plt.show()

, который дал мне это

enter image description here

Кроме того, я попробовал бинаризацию Catalano-Framework и Matlab,все дали мне черно-белые изображения.Буду признателен за любую оказанную помощь.

1 Ответ

0 голосов
/ 24 января 2019

Я немного поиграюсь с твоим изображением в MATLAB. и я думаю Canny Edge Detector будет работать нормально в вашем случае. Проверьте полученное изображение. Исходное изображение в сравнении с Canny Edge Detected

Надеюсь, это поможет вам. OpenCV-Python:

import cv2
import numpy as np

img = cv2.imread('thumbs_up.png',cv2.IMREAD_GRAYSCALE)
#Adjust the Range as per application
edges = cv2.Canny(img,50,200)
cv2.imshow('Output',edges)
cv2.waitKey(0)
...