Я работаю над школьным проектом для своего класса биометрии. Я должен извлечь тип отпечатка пальца из поля направления (арка, направленная дуга, петля, завиток, двойная петля) и минуты из гребней.
Мне как-то удалось это сделать. извлеките линии из образца фотографии, но, несмотря на все виды фильтров, результат все равно очень-очень шумный и непригоден для извлечения минут. Мне нужны несколько советов относительно используемой фильтрации. Я понял, что одна из проблем заключается в том, что линии не связаны, а наличие шума делает невозможным поиск реальных минут. Я пробовал фильтры Гаусса, двусторонние фильтры, фильтры Габора и все такое. Это лучший результат, который мне удалось получить.
Это мой код (полностью рабочий, автономный пример). В этот пост также включен пример вывода, демонстрирующий проблемы, с которыми я столкнулся. Кроме того, я добавил фотографию отпечатка пальца в конце этого поста (это стандартная фотография, я обычно использую свои собственные отпечатки пальцев, которые не очень хочу публиковать здесь):
Я работаю над школьным проектом для своего класса биометрии. Я должен извлечь тип отпечатка пальца из поля направления (арка, направленная дуга, петля, завиток, двойная петля) и минуты из гребней. Мне как-то удалось это сделать. извлеките линии из образца фотографии, но, несмотря на все виды фильтров, результат все равно очень-очень шумный и непригоден для извлечения минут. Мне нужны несколько советов относительно используемой фильтрации. Я понял, что одна из проблем заключается в том, что линии не связаны, а наличие шума делает невозможным поиск реальных минут. Я пробовал фильтры Гаусса, двусторонние фильтры, фильтры Габора и все такое. Это лучший результат, который мне удалось получить. Это мой код (полностью рабочий, автономный пример). В этот пост также включен пример вывода, демонстрирующий проблемы, с которыми я столкнулся. Кроме того, я добавил фотографию отпечатка пальца в конце этого поста (это стандартная фотография, я обычно использую свои собственные отпечатки пальцев, которые не очень хочу публиковать здесь): [code]import cv2 import numpy as np import math import matplotlib.pyplot as plt
# Hardcoded path to input image IMAGE_PATH = '20241108_171310.jpg' # Replace with the path to your image
# Extracts the finger def crop_image(image): hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# I use skin tone to get the boundaries. There may be better options. lower_skin = np.array([0, 0, 80], dtype=np.uint8) upper_skin = np.array([7, 255, 255], dtype=np.uint8) lower_skin2 = np.array([170, 0, 80], dtype=np.uint8) upper_skin2 = np.array([179, 255, 255], dtype=np.uint8)
def enhance_continuity(binary_image): kernel = np.ones((3, 3), np.uint8) # Close small gaps closed = cv2.morphologyEx(binary_image, cv2.MORPH_CLOSE, kernel) # Remove small noise opened = cv2.morphologyEx(closed, cv2.MORPH_OPEN, kernel) return opened
def thin_lines(binary_image): # Ensure ridges are white, valleys are black for thinning operation thinned = cv2.ximgproc.thinning(binary_image) return thinned
def connect_ridges(thinned_image, max_gap=5): result = thinned_image.copy()