程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python數字圖像處理之圖像自動阈值分割示例

編輯:Python

目錄

引言

1、threshold_otsu

2、threshold_yen

3、threshold_li

4、threshold_isodata

5、threshold_adaptive

引言

圖像阈值分割是一種廣泛應用的分割技術,利用圖像中要提取的目標區域與其背景在灰度特性上的差異,把圖像看作具有不同灰度級的兩類區域(目標區域和背景區域)的組合,選取一個比較合理的阈值,以確定圖像中每個像素點應該屬於目標區域還是背景區域,從而產生相應的二值圖像。

在skimage庫中,阈值分割的功能是放在filters模塊中。

我們可以手動指定一個阈值,從而來實現分割。也可以讓系統自動生成一個阈值,下面幾種方法就是用來自動生成阈值。

1、threshold_otsu

基於Otsu的阈值分割方法,函數調用格式:

skimage.filters.threshold_otsu(image, nbins=256)

參數image是指灰度圖像,返回一個阈值。

from skimage import data,filtersimport matplotlib.pyplot as pltimage = data.camera()thresh = filters.threshold_otsu(image) #返回一個阈值dst =(image <= thresh)*1.0 #根據阈值進行分割plt.figure('thresh',figsize=(8,8))plt.subplot(121)plt.title('original image')plt.imshow(image,plt.cm.gray)plt.subplot(122)plt.title('binary image')plt.imshow(dst,plt.cm.gray)plt.show()

返回阈值為87,根據87進行分割得下圖:

2、threshold_yen

使用方法同上:

thresh = filters.threshold_yen(image)

返回阈值為198,分割如下圖:

3、threshold_li

使用方法同上:

thresh = filters.threshold_li(image)

返回阈值64.5,分割如下圖:

4、threshold_isodata

阈值計算方法:

threshold = (image[image <= threshold].mean() +image[image > threshold].mean()) / 2.0

使用方法同上:

thresh = filters.threshold_isodata(image)

返回阈值為87,因此分割效果和threshold_otsu一樣。

5、threshold_adaptive

調用函數為:

skimage.filters.threshold_adaptive(image, block_size, method='gaussian')

block_size: 塊大小,指當前像素的相鄰區域大小,一般是奇數(如3,5,7。。。)

method: 用來確定自適應阈值的方法,有'mean', 'generic', 'gaussian' 和 'median'。

省略時默認為gaussian

該函數直接訪問一個阈值後的圖像,而不是阈值。

from skimage import data,filtersimport matplotlib.pyplot as pltimage = data.camera()dst =filters.threshold_adaptive(image, 15) #返回一個阈值圖像plt.figure('thresh',figsize=(8,8))plt.subplot(121)plt.title('original image')plt.imshow(image,plt.cm.gray)plt.subplot(122)plt.title('binary image')plt.imshow(dst,plt.cm.gray)plt.show()

大家可以修改block_size的大小和method值來查看更多的效果。如:

dst1 =filters.threshold_adaptive(image,31,'mean') dst2 =filters.threshold_adaptive(image,5,'median')

兩種效果如下:

以上就是python數字圖像處理之圖像自動阈值分割示例的詳細內容,更多關於python數字圖像自動阈值分割的資料請關注軟件開發網其它相關文章!



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved