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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图像分割I

發(fā)布時間:2024/7/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像分割I 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為什么要圖像分割?

目標

  • 掌握圖像分割的基本概念
  • 了解圖像分割方法分類
    目標:將圖像劃分為不同區(qū)域
  • 定義:令集合R代表整個圖像區(qū)域,對R的圖像分割可以看作是將R分成N個滿足以下條件的非空子集R1,R2,...,RNR_1,R_2,...,R_NR1?,R2?,...,RN?:
    ?i=1NRi=R,Ri∩Rj=?\bigcup_{i=1}^NR_i = R,R_i\cap R_j = \varnothing i=1?N?Ri?=RRi?Rj?=?
    應(yīng)用:醫(yī)學(xué)圖像分割、工件表面缺陷檢測、實例分割、字符識別
  • 圖像分割方法:

  • 基于圖像灰度閾值
  • 基于邊界的方法
  • 基于區(qū)域的方法
  • 基于聚類的方法
  • 基于圖論及概率模型的方法
  • 深度學(xué)習(xí)方法
  • 圖像標記:為像素f(x,y)f(x,y)f(x,y)打上準確的離散化標簽g(x,y)g(x,y)g(x,y)。4-連通域和8-連通域?qū)Υ驑撕灥呐袛鄻藴什灰粯印?/p>

    總結(jié):

  • 圖像分割是中層視覺的重要內(nèi)容,具有廣泛應(yīng)用
  • 圖像分割的主要方法包括閾值法、區(qū)域法等
  • 圖像標記為分割后的結(jié)果打上不同標簽,便于后續(xù)處理
  • 基于灰度直方圖的閾值分割

    目標:

  • 掌握灰度閾值分割的基本概念
  • 掌握大津算法的基本思想及實現(xiàn)
  • 灰度閾值分割

    • 假設(shè):圖像中的目標區(qū)和背景區(qū)之間或不同目標區(qū)之間,灰度存在明顯差異
    • 凡是灰度值包含于z的像素都變成某一灰度值,其他變成另一個灰度值,則該圖像就以z為界被分成兩個區(qū)域
    • 如果=1和=0,分割后的圖像為二值圖像

    自動閾值分割

    • 自動確定最佳閾值,使背景和目標之間的差異最大

    大津(Otsu)算法原理I:

    • 根據(jù)統(tǒng)計分析理論,最佳閾值確定的最佳二分類應(yīng)使類內(nèi)方差最小,等同于類間方差最大
    • 大津算法基本思想:確定使灰度直方圖類間方差最大的最佳閾值
    • 假設(shè)灰度直方圖已經(jīng)歸一化,即
      pi=niN,∑pi=1p_i = \frac{n_i}{N}, \sum p_i = 1 pi?=Nni??,pi?=1

    大津(Otsu)算法原理II:

    • 假設(shè)閾值T將像素灰度劃分為兩類:C0C_0C0?C1C_1C1?,則每一類出現(xiàn)的概率:
      ω0=∑i=1Tpi,ω1=∑i=T+1Npi=1?ω0\omega_0 = \sum_{i=1}^{T}p_i,\omega_1 = \sum_{i = T+1}^Np_i = 1-\omega_0 ω0?=i=1T?pi?,ω1?=i=T+1N?pi?=1?ω0?
    • 每類的平均灰度級:
      μ0=∑i=1Tipi/ω0=μ0ˊω0,μ1=∑i=T+1Nipi/ω1=μ1ˊω1=μ?μ0ˊ1?ω0\mu_0 = \sum_{i=1}^Tip_i/\omega_0= \frac{\acute{\mu_0}}{\omega_0},\mu_1 = \sum_{i=T+1}^Nip_i/\omega_1= \frac{\acute{\mu_1}}{\omega_1} = \frac{\mu-\acute{\mu_0}}{1-\omega_0} μ0?=i=1T?ipi?/ω0?=ω0?μ0?ˊ??,μ1?=i=T+1N?ipi?/ω1?=ω1?μ1?ˊ??=1?ω0?μ?μ0?ˊ??
      其中μ=∑i=1Nipi\mu = \sum_{i=1}^Nip_iμ=i=1N?ipi?。顯然有ω0μ0+ω1μ1=μ\omega_0\mu_0+\omega_1\mu_1=\muω0?μ0?+ω1?μ1?=μ

    大津算法原理III:

    • 兩類類內(nèi)方差:
      σ02=∑i=1T(i?μ0)2pi/ω0,σ12=∑i=T+1N(i?μ1)2pi/ω1\sigma_0^2 = \sum_{i=1}^T(i-\mu_0)^2p_i/\omega_0,\sigma_1^2 = \sum_{i=T+1}^N(i-\mu_1)^2p_i/\omega_1 σ02?=i=1T?(i?μ0?)2pi?/ω0?σ12?=i=T+1N?(i?μ1?)2pi?/ω1?
    • 對應(yīng)的類間方差:
      σB2=ω0(μ0?μ)2+ω1(μ1?μ)2=ω0ω1(μ1?μ0)2\sigma_B^2 = \omega_0(\mu_0-\mu)^2 + \omega_1(\mu_1-\mu)^2=\omega_0\omega_1(\mu_1-\mu_0)^2 σB2?=ω0?(μ0??μ)2+ω1?(μ1??μ)2=ω0?ω1?(μ1??μ0?)2

    大津算法原理IV:

    • 顯然,ωB\omega_BωB?是關(guān)于最佳閾值T的隱函數(shù),應(yīng)選取T:
      T=argmaxσB2,1<=T<LT = ar gmax\sigma_B^2,1<=T<L T=argmaxσB2?,1<=T<L
    • 算法實現(xiàn):遍歷灰度取值,使σB2\sigma_B^2σB2?最大

    總結(jié)

  • 大津算法是常用的一類灰度閾值自動選取方式,目標是令類間方差最大
  • 大津算法求解采用遍歷方式,思想直接,實現(xiàn)速度快。
  • 灰度閾值分割實戰(zhàn)演練

    目標:

  • 掌握如何使用OpenCV實現(xiàn)基于邊緣的分割
  • 掌握大津算法的OpenCV實現(xiàn)
  • 基于邊緣輪廓的分割

    • 可以在邊緣檢測的基礎(chǔ)上,基于閉合邊緣構(gòu)建分割后的結(jié)果
    • 該算法基于Suzuki,S.“Topological structural analysis of digitized binary images by border following.”

    相關(guān)函數(shù)

    • 找到目標輪廓
    image, contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) #image:單通道圖像矩陣,可以是灰度圖,但更常用的是經(jīng)過邊緣檢測算子處理后的二值圖像; #contours:定義為"vector<vector<Point>>contours",是一個輪廓列表; #hierachy:存在嵌套輪廓時,分別為第i個輪廓的后一個輪廓、前一個輪廓、父輪廓、內(nèi)嵌輪廓的索引編號; #mode:包括CV_CHAIN_APPROX_SIMPLE僅保存輪廓的拐點信息,把所有輪廓拐點處的點保存入contours等; #offset:所有的輪廓信息相對于原始圖像對應(yīng)的偏移量,缺省不設(shè)置。

    實例:

    要求:檢測圖中的米粒
    算法步驟:

  • 圖像采集(取得圖像)
  • 圖像預(yù)處理或后處理
  • 基于灰度的閾值分割
  • 得到最終結(jié)果
  • import cv2 import matplotlib.pyplot as plt import copy #打開圖像 filename = r'C:/python/img/rice.png' image = cv2.imread(filename) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) #大津算法灰度閾值化 thr, bw = cv2.threshold(gray, 0, 0xff, cv2.THRESH_OTSU) print('Threshold is:', thr)#畫出灰度直方圖 plt.hist(gray.ravel(), 256, [0, 256]) plt.show()element = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3)) bw = cv2.morphologyEx(bw, cv2.MORPH_OPEN, element)seg = copy.deepcopy(bw) #計算輪廓 cnts, hier = cv2.findContours(seg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) #cnts:分割后的所有輪廓 #hier:分割后的結(jié)果count = 0 #遍歷所有區(qū)域,并去除面積過小的 for i in range(len(cnts), 0, -1):c = cnts[i-1]area = cv2.contourArea(c)if area < 10:continuecount = count + 1print("blob", i, " : ", area)#區(qū)域畫框并標記x, y, w, h = cv2.boundingRect(c)cv2.rectangle(image, (x, y), (x+w, y+h), (0, 0, 0xff), 1)cv2.putText(image, str(count), (x,y), cv2.FONT_HERSHEY_PLAIN, 0.5, (0, 0xff, 0))print("米粒數(shù)量:", count) cv2.imshow("源圖", image) cv2.imshow("閾值化圖", bw)cv2.waitKey() cv2.destroyAllWindows()

    由于沒有進行前處理,右下角出現(xiàn)漏點。

    局部閾值分割實戰(zhàn)演練

    目標:

  • 了解局部閾值法分割基本原理
  • 了解多閾值分割的基本原理
  • 全局閾值法的問題:背景存在光照不均時,分割效果變差

    局部閾值法


    將原圖片劃分區(qū)域,分別看但各區(qū)域內(nèi)灰度值極值的差值,對大于一定值的區(qū)域單獨進行大津算法分割。

    多閾值分割原理

    對比:類間方差(二類):
    σB2=ω0(μ0?μ)2+ω1(μ1?μ)2=ω0ω1(μ1?μ0)2\sigma_B^2 = \omega_0(\mu_0 - \mu)^2 + \omega_1(\mu_1 - \mu)^2 = \omega_0\omega_1(\mu_1 - \mu_0)^2 σB2?=ω0?(μ0??μ)2+ω1?(μ1??μ)2=ω0?ω1?(μ1??μ0?)2
    類間方差(多類):
    σB2=∑k=1Kωk(μk?μ)2\sigma_B^2 = \sum_{k=1}^K\omega_k(\mu_k-\mu)^2 σB2?=k=1K?ωk?(μk??μ)2
    其中∑k=1Kωk=1\sum_{k=1}^K\omega_k = 1k=1K?ωk?=1
    選擇最優(yōu)閾值T1,......,TkT_1,......,T_kT1?,......,Tk?:
    (T1,......,Tk)=argmaxσB2(T1,......,Tk),1<=T1<...<Tk<L(T_1,......,T_k) = argmax \sigma_B^2(T_1,......,T_k),1<=T_1<...<T_k<L (T1?,......,Tk?)=argmaxσB2?(T1?,......,Tk?),1<=T1?<...<Tk?<L
    圖像差別可通過峰值信噪比(PSNR)評價:
    定義均方誤差:
    MSE=1mn∑x=0m?1∑y=0n?1∥f(x,y)?g(x,y)∥2MSE = \frac{1}{mn}\sum_{x=0}^{m-1}\sum_{y=0}^{n-1}\|f(x,y)-g(x,y)\|^2 MSE=mn1?x=0m?1?y=0n?1?f(x,y)?g(x,y)2
    原圖像和處理后圖像逐像素作差的平方和除以圖像像素數(shù)
    定義PSNR:
    PSNR=10?log10(fMAX2MSE)=20?log10(fMAX2MSE),fMAX對應(yīng)最大灰度值PSNR = 10\cdot log_{10}(\frac{f_{MAX}^2}{MSE}) = 20\cdot log_{10}(\frac{f_{MAX}^2}{\sqrt{MSE}}),f_{MAX}對應(yīng)最大灰度值 PSNR=10?log10?(MSEfMAX2??)=20?log10?(MSE?fMAX2??)fMAX?應(yīng)

    總結(jié):

  • 局部閾值法可有效解決照明不均的問題
  • 多閾值法是二值化分割方法的擴展,可解決多指目標的分割問題
  • 總結(jié)

    以上是生活随笔為你收集整理的图像分割I的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。