0 前言
🔥 優質競賽項目系列,今天要分享的是
🚩 基于機器視覺的指紋識別系統
🥇學長這里給一個題目綜合評分(每項滿分5分)
- 難度系數:3分
- 工作量:3分
- 創新點:4分
該項目較為新穎,適合作為競賽課題方向,學長非常推薦!
🧿 更多資料, 項目分享:
https://gitee.com/dancheng-senior/postgraduate
1 課題背景
指紋是指人類手指上的條狀紋路, 它們的形成依賴于胚胎發育時的環境。“沒有2個完全相同的指紋”這一觀點已經得到公認。指紋識別已經有了很長一段歷史。
據考古學家證實:公元前6 000年以前, 指紋作為身份鑒別的工具已經在古敘利亞和中國開始應用。到了20世紀80年代,、光學掃描這2項技術的革新,
使得它們作為指紋取像的工具成為現實, 從而使指紋識別可以在其他領域中得以應用。
現在, 隨著取像設備的引入及其飛速發展, 生物指紋識別技術的逐漸成熟, 可靠的比對算法的發現都為指紋識別技術提供了更廣闊的舞臺。
本項目實現了一種指紋識別系統,通過過濾過程來確定用戶指紋是否與注冊的指紋匹配。通過過濾技術對捕獲的指紋進行處理,以從捕獲的圖像中去除噪聲。去除噪聲后的最終結果與注冊的指紋進行特征匹配,以確定它們是否相同。
2 效果展示
3
3 具體實現
3.1 圖像對比過濾
圖像融合是一種圖像增強方法,這里先融合兩個圖像便于特征點對比。利用的是opencv封裝的函數
?
cv2.addWeighted()
相關代碼
?
def apply_Contrast(img):alpha = 0.5 # assigned weight to the first imagebeta = 0.5 # assigned weight to the second imageimg_second = np.zeros(img.shape, img.dtype) # second image, copy of first onecontrast = cv2.addWeighted(img, alpha, img_second, 0, beta) # applying contrastreturn contrast
3.2 圖像二值化
簡介
圖像二值化( Image
Binarization)就是將圖像上的像素點的灰度值設置為0或255,也就是將整個圖像呈現出明顯的黑白效果的過程。二值圖像每個像素只有兩種取值:要么純黑,要么純白。
二值圖像數據足夠簡單,許多視覺算法都依賴二值圖像。通過二值圖像,能更好地分析物體的形狀和輪廓。
在計算機視覺里,一般用矩陣來表示圖像。也就是說,無論你的圖片看上去多么好吃,對計算機來說都不過是個矩陣而已。在這個矩陣里,每一個像素就是矩陣中的一個元素。在三通道的彩色圖像中,這個元素是由三個數字組成的元組。而對于單通道的灰度圖像來說,這個元素就是一個數字。這個數字代表了圖像在這個點的亮度,數字越大像素點也就越亮,在常見的八位單通道色彩空間中,0代表全黑,255代表全白。
相關代碼
def apply_Binarization(img):# if pixel value is greater then the threshold value it is assigned a singular color of either black or white_, mask = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY_INV)return mask
3.3 圖像侵蝕細化
圖像侵蝕(腐蝕)
腐蝕(Erosion)- shrink image regions,侵蝕是數學形態學領域的兩個基本算子之一,另一個是膨脹。
它通常應用于二值圖像,但是有些版本可用于灰度圖像。 算子對二值圖像的基本作用是侵蝕前景像素(通常為白色像素)區域的邊界。
因此,前景像素的區域尺寸縮小,并且這些區域內的孔洞變大。
圖像細化
細化(Thinning)- structured erosion using image pattern
matching,細化是一種形態學操作,用于從二值圖像中刪除選定的前景像素,有點像侵蝕或開口。 它可以用于多種應用程序,但是對于骨架化特別有用。
在這種模式下,通常通過將所有行減少到單個像素厚度來整理邊緣檢測器的輸出。 細化通常僅應用于二值圖像,并產生另一個二值圖像作為輸出。
相關代碼
def apply_Erosion(img):kernal = np.ones((3,3), np.uint8) # shape applied to image, 3x3 square shape is applied to contrast imageerosion = cv2.erode(img, kernal, iterations=1) # erosion mask applied to the contrast image to thin fingerprint ridgesreturn erosion
3.4 圖像增強
圖像增強的主要目的是提高圖像的質量和可辨識度,使圖像更有利于觀察或進一步分析處理。圖像增強技術一般通過對圖像的某些特征,例如邊緣信息、輪廓信息和對比度等進行突出或增強,從而更好的顯示圖像的有用信息,提高圖像的使用價值。圖像增強技術是在一定標準下,處理后的圖像比原圖像效果更好。
相關代碼
? def apply_highlighting(img):
? feature_points = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
? Image_blue = np.array(feature_points, copy=True)
? white_px = np.asarray([255, 255, 255])blue_px = np.asarray([0 , 255 , 255 ])(row, col, _) = feature_points.shapefor r in range(row):for c in range(col):px = feature_points[r][c]if all(px == white_px):Image_blue[r][c] = blue_pxreturn Image_blue
3.5 特征點檢測
指紋特征提取的主要目的是計算指紋核心點(Core)和細節點(Minutia)的特征信息。在提取指紋核心點時,采用的是Poincare
Index算法,該算法的思路是在指紋圖像某像素點區域內,按圍繞該點的閉合曲線逆時針方向旋轉一周,計算方向角度旋轉變化量的和,最后以計算結果來尋找核心點。計算過程中如果某像素點的Poincare
Index值為π則判定為核心點,然后便提取該點的坐標與方向場信息,記為P(Cx, Cy, θc)。
相關代碼
? def show_featurepoints(img):
? ? #show feature points found in fingerprint using orb detector
? orb = cv2.ORB_create(nfeatures=1200)
? keypoints, descriptors = orb.detectAndCompute(img, None)
? featurepoint_img = img
? featurepoint_img = cv2.drawKeypoints(featurepoint_img, keypoints, None, color=(255, 0 ,0))? return featurepoint_img
4 OpenCV
簡介
Opencv(Open Source Computer Vision
Library)是一個基于開源發行的跨平臺計算機視覺庫,它實現了圖像處理和計算機視覺方面的很多通用算法,已成為計算機視覺領域最有力的研究工具。在這里我們要區分兩個概念:圖像處理和計算機視覺的區別:圖像處理側重于“處理”圖像–如增強,還原,去噪,分割等等;而計算機視覺重點在于使用計算機來模擬人的視覺,因此模擬才是計算機視覺領域的最終目標。
OpenCV用C++語言編寫,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,
如今也提供對于C#、Ch、Ruby,GO的支持。
基礎功能速查表
5 最后
🧿 更多資料, 項目分享:
https://gitee.com/dancheng-senior/postgraduate