日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

数字图像处理与分析---指纹图像增强(Python)

發布時間:2023/12/14 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字图像处理与分析---指纹图像增强(Python) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

???圖1是一幅包含指紋的真實圖像,請使用所學的圖像處理技術進行處理,滿足下面的要求:

???1. 使圖像中的指紋更加清晰;

???2. 考慮到冬季皮膚粗糙的情況(成像時存在噪聲,請自行添加噪聲點),盡可能去除其中的噪聲。

圖1 基礎題圖像

目錄

1需求分析... 3

1.1給指紋圖像加噪聲點... 3

1.2 指紋圖像去除噪點... 3

1.3 圖片轉為灰度圖... 4

1.4 灰度直方圖... 4

1.5 圖像分割... 4

1.6斷點連接... 5

1.7 使得指紋圖像平滑... 5

2 實現代碼... 5

2.1 添加高斯噪聲... 5

2.2 去除高斯噪聲... 6

2.3 轉換為灰度圖... 6

2.4 計算灰度直方圖... 7

2.5 指紋斷點連接處理... 7

2.6 圖片進行形態學開操作... 8

3 實驗結果及分析... 8

4 附錄... 13

4.1 代碼目錄... 13

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

1需求分析

根據題目要求,使得圖像中的指紋更加清晰。給圖像指紋加噪聲點,盡可能去除其中的噪點。

1.1給指紋圖像加噪聲點

使用高斯噪聲給圖片添加噪聲點,高斯噪聲是指它的概率密度函數服從高斯分布(即正態分布)的一類噪聲。如果一個噪聲,它的幅度分布服從高斯分布,而它的功率譜密度又是均勻分布的,則稱它為高斯白噪聲。高斯白噪聲的二階矩不相關,一階矩為常數,是指先后信號在時間上的相關性。高斯白噪聲包括熱噪聲和散粒噪聲。在通信信道測試和建模中,高斯噪聲被用作加性白噪聲以產生加性白高斯噪聲。

高斯分布,也稱正態分布,又稱常態分布,記為N(μ,σ^2),其中μ,σ^2為分布的參數,分別為高斯分布的期望和方差。當有確定值時,p(x)也就確定了,特別當μ=0,σ^2=1時,X的分布為標準正態分布。

高斯分布函數公式如下:

1.2 指紋圖像去除噪點

?????? 使用高斯濾波器去除噪點。

是根據高斯函數來選擇權值的線性平滑濾波器,對隨機分布和服從正態分布的噪聲有很好地濾除效果。它可以輔助大部分的邊緣檢測算法,

對圖像的邊緣進行擴展(邊緣厚度變大),使噪聲點的灰度降低,從而減少邊緣檢測中噪聲的數量。

二維的高斯函數公式如下:

其中σ為正態分布的標準偏差,其值決定了高斯函數的變化幅度,對應就是濾波器的權值。高斯函數分布與二維濾波器常見模板如下:

?

1.3 圖片轉為灰度圖

灰度圖,Gray Scale Image 或是Grey Scale Image,又稱灰階圖。把白色與黑色之間按對數關系分為若干等級,稱為灰度。灰度分為256階。

?

1.4 灰度直方圖

灰度直方圖是關于灰度級分布的函數,是對圖像中灰度級分布的統計。灰度直方圖是將數字圖像中的所有像素,按照灰度值的大小,統計其出現的頻率。灰度直方圖是灰度級的函數,它表示圖像中具有某種灰度級的像素的個數,反映了圖像中某種灰度出現的頻率。

??????

1.5 圖像分割

使用最大類間方差法最大類間方差法獲得圖像的閾值。它是按圖像的灰度特性,將圖像分成背景和目標2部分。背景和目標之間的類間方差越大,說明構成圖像的2部分的差別越大,當部分目標錯分為背景或部分背景錯分為目標都會導致2部分差別變小。因此,使類間方差最大的分割意味著錯分概率最小。

最大方差閾值是由日本學者大津(Nobuyuki Otsu)于1979年提出,是一種自適應的閾值確定方法。算法假設圖像像素能夠根據閾值,被分成背景[background]和目標[objects]兩部分。然后,計算該最佳閾值來區分這兩類像素,使得兩類像素區分度最大。

公式:? 記?M = 256 單通道灰度分級 Sum = 像素總數

最大方差閾值不管圖像的直方圖有無明顯的雙峰,都能得到較為滿意的結果,這種方法是與閾值自動選取的最優方法

?

?

1.6斷點連接

統計當前像素點的八鄰域,如果只存在一個像素值=255,說明只有這個個像素于當前像素連接,當前像素值為端點,接下來考慮16鄰域,如果有像素值=255,則將這兩個像素之間的像素值置為255

?

1.7 使得指紋圖像平滑

開操作可以平滑物體輪廓,斷開狹窄的間斷和消除細小的突出物。它具有消除細小物體,在纖細處分離物體和平滑較大物體邊界的作用。

  • 開運算(Open Operation):先腐蝕后膨脹的過程;
  • 功能:
  • 消除小物體;
  • 在纖細處分離物體;
  • 平滑較大的邊界并不明顯改變其面積;

?

?

?

?

2 實現代碼

2.1 添加高斯噪聲

#添加高斯噪聲(拍照的時候常見的噪聲) import numpy as np import cv2def gasuss_noise(image, mean=0, var=0.001):'''添加高斯噪聲mean : 均值var : 方差'''#歸一化操作#數據減去對應維度的最小值除以維度最大值減去維度最小值,這樣做可以將數值壓縮到[0,1]的區間。image = np.array(image/255, dtype=float)#生成隨機噪聲(正態分布的噪聲)# mean=0說明這一個以Y軸為對稱軸的正態分布,# var ** 0.5 正態分布的標準差,對應分布的寬度,scale越大,正態分布的曲線越矮胖,scale越小,曲線越高瘦。# image.shape 輸出的值賦在shape里noise = np.random.normal(mean, var ** 0.5, image.shape)#將噪聲添加到圖片中out = image + noiseif out.min() < 0:low_clip = -1.else:low_clip = 0.#將圖片的像素值范圍控制在(low_clip,1)out = np.clip(out, low_clip, 1.0)#圖片還原out = np.uint8(out*255)return out

?

2.2 去除高斯噪聲

#利用高斯濾波器處理高斯噪聲image = cv2.GaussianBlur(out,(3,3),1)cv2.imshow("gasuss", image)cv2.waitKey(0)

2.3 轉換為灰度圖

#對比度增強#將圖片轉換成灰度圖gray = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)cv2.imshow("gray", gray)cv2.waitKey(0)

2.4 計算灰度直方圖

#計算灰度直方圖def calcGrayHist(image):h,w = image.shape #獲取圖片的寬高grayHist = np.zeros([256],np.int8) #返回來一個用0填充的數組for r in range(h):for c in range(w):#0-255 => 1-256 統計所有的灰度值grayHist[image[r,c]] += 1return grayHistdef plot_hist(image):grayHist = calcGrayHist(image)x_range = range(256)#對 x,y繪制為線條plt.plot(x_range, grayHist, 'r', linewidth=2, c='black')y_maxValue = np.max(grayHist)#設置xy軸的范圍plt.axis([0, 255, 0, y_maxValue])# 設置坐標軸標簽plt.xlabel('gray Level')plt.ylabel('number of pixels')# 顯示直方圖plt.show()

2.5 指紋斷點連接處理

#邊緣斷裂連接def connect(image):h,w = image.shapefor i in range(2,h-2):for j in range(2,w-2):#如果中心點位置為255 考慮八鄰域if image[i,j] == 255:num = 0for k in range(-1,2):for l in range(-1,2):if k != 0 or l != 0 and image[i+k,i+l] == 255:num += 1#如果八鄰域中只有一個點是255,說明該中心點為端點,則考慮其他領域if num == 1:for k in range(-2,3):for l in range(-2,3):#非八鄰域if not(k<2 and k>-2 and l<2 and l>-2) and image[i+k,i+l] == 255:image[i+k,i+l] = 255return image

?

?

2.6 圖片進行形態學開操作

#利用形態學操作去除,將指紋邊緣毛刺地方消除#先腐蝕(毛刺)后膨脹opening = cv2.morphologyEx(connect_image, cv2.MORPH_OPEN, (10,200))cv2.imshow('opening', opening)cv2.waitKey(0)

?

3 實驗結果及分析

?

【原圖】

?

【加入高斯噪聲的圖片】

?

??????????????????????????? 原圖 ?????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 加上高斯噪聲的圖

?

兩圖對比仔細看的話,會看得出加上高斯噪聲的圖會有許多彩色的小點。這些小點就是通過高斯噪聲加上的噪點。如果看不清楚可以運行源程序進行查看。

?

?

?

?

?

?

?

?

【處理高斯噪聲后得圖片】

?

去除噪點后,指紋圖像會顯得有點模糊,這是因為處理噪點時候使用了高斯模糊(英語:Gaussian Blur),也叫高斯平滑。用它來減少圖像噪聲以及降低細節層次。

?

【將圖片轉換成灰度圖】

?

?

【查看灰度直方圖】

?

?

圖像的對比度是通過灰度級范圍來度量的,而灰度級范圍可通過觀察灰度直方圖得到,灰度級范圍越大代表對比度越高;反之對比度越低,低對比度的圖像在視覺上給人的感覺是看起來不夠清晰,所以通過算法調整圖像的灰度值,從而調整圖像的對比度是有必要的。最簡單的一種對比度增強的方法是通過灰度值的線性變換實現的。可以看出改灰度圖出現了雙峰。

?

【通過最大類間方差法(OTSU)進行圖片像素分割】

?

?????????????????????????????????????????????????????????????? 【增強后的圖片

這個算法是通過背景和前景圖的像素概率值,來進行自動閾值估計,原圖被我轉換成了灰度圖,只存在0,1像素值,這就意味著圖像形成的直方圖將是雙峰值圖像,根據前面的oTsu評估出來的閾值,直接將雙峰分割開形成指紋(前景)以及白紙(背景)。可以看出該圖片的指紋變得更清晰了,條理變粗。

?

【查看灰度直方圖】

?

按照雙峰值,將小于閾值的設為0,其他的按照公式(最大類間方差)進行設置灰度值

?

?

?

?

?

【斷點處重連】

?

使用斷點連接技術。統計當前像素點的八鄰域,如果只存在一個像素值=255,說明只有這個個像素于當前像素連接,當前像素值為端點,接下來考慮16鄰域,如果有像素值=255,則將這兩個像素之間的像素值置為255。

由于斷點距離太大,使用這個技術沒辦法實現斷點連接,理論上是可以的。只有那種像素點之間有1個像素點的位置會有像素點填充。

?

【形態學開操作】

?

先腐蝕毛刺得邊緣,再膨脹

?

開操作可以平滑物體輪廓,斷開狹窄的間斷和消除細小的突出物。它具有消除細小物體,在纖細處分離物體和平滑較大物體邊界的作用。

如果放大圖片就可以看得到紅框標記的地方指紋出現了膨脹。

?

?

4 附錄

4.1 代碼目錄

exp1.py是主文件

noise.py 是添加噪聲的方法

utils.py是工具,里面有畫出灰度直方圖工具以及斷點重連方法

1.jpg 是需要處理的圖片

?

完整源碼下載地址 https://download.csdn.net/download/qq_41398448/12495945

總結

以上是生活随笔為你收集整理的数字图像处理与分析---指纹图像增强(Python)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。