欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Python的圖像閾值化分割(迭代法)

 更新時間:2020年11月20日 10:20:09   作者:大牌Anderson  
這篇文章主要介紹了基于Python的圖像閾值化分割(迭代法),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.閾值化分割原理

通過對圖像的灰度直方圖進行數(shù)學(xué)統(tǒng)計,選擇一個或多個閾值將像素劃分為若干類。一般情況下,當圖像由灰度值相差較大的目標和背景組成時,如果目標區(qū)域內(nèi)部像素灰度分布均勻一致,背景區(qū)域像素在另一個灰度級上也分布均勻,這時圖像的灰度直方圖會呈現(xiàn)出雙峰特性。

在這種情況下,選取位于這兩個峰值中間的谷底對應(yīng)的灰度值T作為灰度閾值,將圖像中各個像素的灰度值與這個閾值進行比較,根據(jù)比較的結(jié)果將圖像中的像素劃分到兩個類中。像素灰度值大于閾值T的像素點歸為一類,其余像素點歸為另一類。經(jīng)閾值化處理后的圖像g(x,y)定義為:

在這里插入圖片描述

其中f(x,y)為原圖像,T為灰度閾值,g(x,y)為分割后產(chǎn)生的二值圖像。

2.算法流程圖

在這里插入圖片描述

3.代碼實現(xiàn)

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
#讀入圖片并轉(zhuǎn)化為矩陣
img = plt.imread('2.jpg')
im = np.array(img)

# 矩陣大小
l = len(im)
w = len(im[0])

#求初始閾值
zmin = np.min(im)
zmax = np.max(im)
t0 = int((zmin+zmax)/2)

#初始化相關(guān)變量初始化
t1=0
res1=0
res2=0
s1=0
s2=0

#迭代法計算最佳閾值
while abs(t0-t1)>0:
 for i in range(0,l-1):
  for j in range(0,w-1):
   if im[i,j]<t0:
    res1=res1+im[i,j]
    s1=s1+1
   elif im[i,j]>t0:
    res2=res2+im[i,j]
    s2=s2+1
 avg1=res1/s1
 avg2=res2/s2
 res1 = 0
 res2 = 0
 s1 = 0
 s2 = 0
 t1 = t0   #舊閾值儲存在t1中
 t0=int((avg1+avg2)/2)  #計算新閾值

#閾值化分割
#像素點灰度值小于最佳閾值t0用0填充,其余用255填充
im = np.where(im[...,:] < t0, 0, 255)

#繪制原圖窗口
plt.figure()
plt.imshow(img , cmap='gray')
plt.title('original')

#繪制原圖直方圖并顯示最佳閾值
plt.figure()
plt.hist(img.ravel(),256)
plt.title('hist')
plt.axvline(t0)  #繪制最佳閾值分割線
plt.text(25, 6100, "Best Threshold:{}".format(t0), size = 15, alpha = 0.8)

#繪制閾值化分割后圖像
plt.figure()
plt.imshow(Image.fromarray(im) , cmap='gray')
plt.title('new')

#繪制閾值化分割后圖像的直方圖
plt.figure()
plt.hist(im.ravel(),256)
plt.title('hist')

plt.show()

4.閾值化分割結(jié)果

原始圖像

在這里插入圖片描述

原始圖像直方圖

在這里插入圖片描述

閾值化分割后圖像

在這里插入圖片描述

閾值化分割后圖像直方圖

在這里插入圖片描述

到此這篇關(guān)于基于Python的圖像閾值化分割(迭代法)的文章就介紹到這了,更多相關(guān)Python 圖像閾值化分割內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用arrow庫優(yōu)雅地處理時間數(shù)據(jù)詳解

    Python使用arrow庫優(yōu)雅地處理時間數(shù)據(jù)詳解

    雖然Python提供了多個內(nèi)置模塊用于操作日期時間,但有的時候并不能滿足我們的需求,所以下面這篇文章主要給大家介紹了關(guān)于Python使用arrow庫如何優(yōu)雅地處理時間數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • python模塊restful使用方法實例

    python模塊restful使用方法實例

    這篇文章主要介紹了python模塊restful使用方法,大家參考使用吧
    2013-12-12
  • python+JS?實現(xiàn)逆向?SMZDM?的登錄加密

    python+JS?實現(xiàn)逆向?SMZDM?的登錄加密

    這篇文章主要介紹了python+JS?實現(xiàn)逆向?SMZDM?的登錄加密,文章通過利用SMZDM平臺展開詳細的內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Python 圖片文字識別的實現(xiàn)之PaddleOCR

    Python 圖片文字識別的實現(xiàn)之PaddleOCR

    OCR方向的工程師,之前一定聽說過PaddleOCR這個項目,其主要推薦的PP-OCR算法更是被國內(nèi)外企業(yè)開發(fā)者廣泛應(yīng)用,短短半年時間,累計Star數(shù)量已超過15k,頻頻登上Github Trending和Paperswithcode 日榜月榜第一
    2021-11-11
  • 對pandas處理json數(shù)據(jù)的方法詳解

    對pandas處理json數(shù)據(jù)的方法詳解

    今天小編就為大家分享一篇對pandas處理json數(shù)據(jù)的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • 總結(jié)python實現(xiàn)父類調(diào)用兩種方法的不同

    總結(jié)python實現(xiàn)父類調(diào)用兩種方法的不同

    最近在工作中實現(xiàn)父類調(diào)用的時候發(fā)現(xiàn)了一個錯誤,然后通過分析實踐總結(jié)出來了,下面這篇文章主要給大家總結(jié)了python中實現(xiàn)父類調(diào)用兩種方法的不同之處,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • python正則表達式函數(shù)match()和search()的區(qū)別

    python正則表達式函數(shù)match()和search()的區(qū)別

    match()和search()都是python中的正則匹配函數(shù),那這兩個函數(shù)有何區(qū)別呢?本文詳細介紹了這2個函數(shù)的區(qū)別
    2021-10-10
  • python中合并兩個文本文件并按照姓名首字母排序的例子

    python中合并兩個文本文件并按照姓名首字母排序的例子

    這篇文章主要介紹了python中合并兩個文本文件并按照姓名首字母排序的例子,需要的朋友可以參考下
    2014-04-04
  • 詳談python http長連接客戶端

    詳談python http長連接客戶端

    下面小編就為大家?guī)硪黄斦刾ython http長連接客戶端。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Python3處理文件中每個詞的方法

    Python3處理文件中每個詞的方法

    這篇文章主要介紹了Python3處理文件中每個詞的方法,可實現(xiàn)逐個處理文件中每個詞的功能,需要的朋友可以參考下
    2015-05-05

最新評論