亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python opencv之分水嶺算法示例

 更新時間:2018年02月24日 09:27:57   作者:@fei  
這篇文章主要介紹了python opencv之分水嶺算法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文介紹了python opencv之分水嶺算法示例,分享給大家,具體如下:

目標(biāo)

  1. 使用分水嶺算法對基于標(biāo)記的圖像進(jìn)行分割
  2. 使用函數(shù)cv2.watershed()

原理:

灰度圖像可以被看成拓?fù)淦矫?灰度值高的區(qū)域可以看出山峰,灰度值低的區(qū)域可以看成是山谷。向每一個山谷當(dāng)中灌不同顏色的水。水位升高,不同山谷的水會匯合,為防止不同山谷的水匯合,小在匯合處建立起堤壩。然后繼續(xù)灌水,然后再建立堤壩,直到山峰都掩模。構(gòu)建好的堤壩就是圖像的分割。

此方法通常會得到過渡分割的結(jié)果,因為圖像中的噪聲以及其他因素。為了減少此影響,opencv使用基于標(biāo)記的分水嶺算法,此算法要設(shè)置哪些山谷中的匯合點,哪些不是。這是一種交互式的圖像分割算法那。我們要給已知對象打上不同表情。如果某個區(qū)域肯定是前景或?qū)ο?,就使用某個顏色或灰度值標(biāo)簽標(biāo)記它。如果是背景那么使用其他顏色進(jìn)行標(biāo)記,其余不能確定的部分用0標(biāo)記。然后使用分水嶺算法,每次灌水,標(biāo)簽會被更新,當(dāng)兩個不同顏色的標(biāo)簽相遇就會構(gòu)建堤壩,知道所有山峰掩模,最后得到的邊界對象值是-1。

代碼:

對挨在一起的對象進(jìn)行分割。

這里寫圖片描述

使用Otsu's 二值化后的結(jié)果為

這里寫圖片描述

要出去圖像中的白噪聲。可以使用形態(tài)學(xué)運算,使用閉運算去除對象中的空洞。

靠近對象中心的區(qū)域是前景,離對象遠(yuǎn)的區(qū)域是背景,不確定的區(qū)域是邊界。

首先提取硬幣區(qū)域,使用腐蝕操作去掉邊緣,剩下的就是硬幣。但硬幣沒有接觸時,此方法有效,但是由于硬幣相互接觸,就要使用另外一種有效的方法:距離變換加上合適的閾值。

之后,要尋找不確定是否是硬幣的區(qū)域。這里需要膨脹操作。膨脹操作會將對象邊界延伸到背景當(dāng)中。由于邊界區(qū)域被去除,現(xiàn)在就能知道哪些區(qū)域是前景,哪些是背景。

余下的區(qū)域不知道如何區(qū)分,那么使用分水嶺算法。這些區(qū)域通常是前景與背景的交界處。從能否確認(rèn)是否是背景的區(qū)域中減去確定是前景的區(qū)域就得到了邊界。

(前景和背景)

這里寫圖片描述

(上面的圖是直接使用作者的代碼后生產(chǎn)的結(jié)果,提取到了前景,為了演示一下不確定的區(qū)域,調(diào)了一下計算前景的距離變換的參數(shù),使得中間出現(xiàn)不確定的區(qū)域)

這里寫圖片描述

這里面使用個cv2.distanceTransform函數(shù)

該函數(shù)用于計算2值圖象中所有像素離其最近的值為0像素的近似距離。

參數(shù)為

cv2.distanceTransform(src, distanceType, maskSize[, dst]) → dst

#src為輸入的二值圖像。distanceType為計算距離的方式,可以是如下值
DIST_USER = ⑴, //!< User defined distance
DIST_L1  = 1, //!< distance = |x1-x2| + |y1-y2|
DIST_L2  = 2, //!< the simple euclidean distance
DIST_C  = 3, //!< distance = max(|x1-x2|,|y1-y2|)
DIST_L12  = 4, //!< L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1))
DIST_FAIR = 5, //!< distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998
DIST_WELSCH = 6, //!< distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846
DIST_HUBER = 7 //!< distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345


#maskSize是蒙板尺寸,只有0,3,5
DIST_MASK_3  = 3, //!< mask=3
DIST_MASK_5  = 5, //!< mask=5
DIST_MASK_PRECISE = 0 //!< mask=0
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('21.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)

kernel = np.ones((3,3),np.uint8)
opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 2)
# sure background area
sure_bg = cv2.dilate(opening,kernel,iterations=3)#膨脹
# Finding sure foreground area

dist_transform = cv2.distanceTransform(opening,1,5)
ret, sure_fg = cv2.threshold(dist_transform,0.2*dist_transform.max(),255,0)#參數(shù)改小了,出現(xiàn)不確定區(qū)域
# Finding unknown region
sure_fg = np.uint8(sure_fg)
unknown = cv2.subtract(sure_bg,sure_fg)#減去前景

cv2.imshow('p',sure_fg)
cv2.waitKey(0)

現(xiàn)在知道了那些背景是硬幣,可以創(chuàng)建標(biāo)簽。(與原圖像大小相同,數(shù)據(jù)類型為int32的數(shù)組)。

對于已經(jīng)確定分類的區(qū)域,也就是背景和前景,使用整數(shù)標(biāo)記,不確定的區(qū)域是用0標(biāo)記??梢允褂胏v2.connectedComponents()函數(shù)來實現(xiàn)此功能。它會將背景標(biāo)記為0,其他標(biāo)記為位從1開始的正整數(shù)。

但是,如果背景標(biāo)記為0,那么分水嶺算法會將其當(dāng)成位置區(qū)域,所以使用不同的整數(shù)進(jìn)行標(biāo)記,對于不確定的區(qū)域,函數(shù)標(biāo)記為0.

結(jié)果使用JET顏色地圖表示。深藍(lán)色未知區(qū)域,硬幣區(qū)域使用不同顏色。其余部分用淺藍(lán)色。

使用分水嶺算法

效果不錯

這里寫圖片描述

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python+Pillow進(jìn)行圖形處理的示例詳解

    Python+Pillow進(jìn)行圖形處理的示例詳解

    PIL:Python Imaging Library,已經(jīng)是Python平臺事實上的圖像處理標(biāo)準(zhǔn)庫了。PIL功能非常強(qiáng)大,但API卻非常簡單易用。本文就將利用Pillow進(jìn)行簡單的圖形處理,需要的可以參考一下
    2022-10-10
  • Jacobi迭代算法的Python實現(xiàn)詳解

    Jacobi迭代算法的Python實現(xiàn)詳解

    這篇文章主要介紹了Jacobi迭代算法的Python實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-06-06
  • python Django批量導(dǎo)入不重復(fù)數(shù)據(jù)

    python Django批量導(dǎo)入不重復(fù)數(shù)據(jù)

    這篇文章主要介紹了python Django批量導(dǎo)入不重復(fù)數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • 復(fù)習(xí)Python中的字符串知識點

    復(fù)習(xí)Python中的字符串知識點

    這篇文章主要介紹了Python中字符串的一些知識點,來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • tensorflow mnist 數(shù)據(jù)加載實現(xiàn)并畫圖效果

    tensorflow mnist 數(shù)據(jù)加載實現(xiàn)并畫圖效果

    TensorFlow&#8482; 是一個采用數(shù)據(jù)流圖(data flow graphs),用于數(shù)值計算的開源軟件庫。這篇文章給大家介紹tensorflow mnist 數(shù)據(jù)加載實現(xiàn)并畫圖效果,感興趣的朋友一起看看吧
    2020-02-02
  • 循環(huán)神經(jīng)網(wǎng)絡(luò)TextRNN實現(xiàn)情感短文本分類任務(wù)

    循環(huán)神經(jīng)網(wǎng)絡(luò)TextRNN實現(xiàn)情感短文本分類任務(wù)

    這篇文章主要為大家介紹了循環(huán)神經(jīng)網(wǎng)絡(luò)TextRNN實現(xiàn)情感短文本分類任務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 利用Python學(xué)習(xí)RabbitMQ消息隊列

    利用Python學(xué)習(xí)RabbitMQ消息隊列

    RabbitMQ和郵局的主要區(qū)別就是RabbitMQ接收、存儲和發(fā)送的是二進(jìn)制數(shù)據(jù)----消息,本篇文章給大家介紹利用Python學(xué)習(xí)RabbitMQ消息隊列,對python消息隊列相關(guān)知識感興趣的朋友參考下
    2015-11-11
  • 用 Django 開發(fā)一個 Python Web API的方法步驟

    用 Django 開發(fā)一個 Python Web API的方法步驟

    這篇文章主要介紹了用 Django 開發(fā)一個 Python Web API的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python中封包建立過程實例

    python中封包建立過程實例

    在本篇文章里小編給大家分享的是一篇關(guān)于python中封包建立過程實例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-02-02
  • PyCharm在win10的64位系統(tǒng)安裝實例

    PyCharm在win10的64位系統(tǒng)安裝實例

    給大家介紹一下在win10的64位系統(tǒng)中安裝PyCharm的操作過程以及需要注意的地方。
    2017-11-11

最新評論