分水嶺算法:圖像分割的浸水原理

分水嶺算法:基于拓撲地貌的邊界提取

核心原理
分水嶺算法將圖像視為拓撲地貌,灰度值代表海拔高度。通過模擬浸水過程:

  1. 局部極小值:對應集水盆(區域內部)。
  2. 分水嶺線:集水盆之間的山脊(區域邊界)。
  3. 淹沒過程:從最低點開始注水,水位上升時在不同集水盆匯合處構建堤壩(分水嶺)。

關鍵步驟

  1. 預處理
    • 梯度計算:使用Sobel、Canny等算子提取邊緣(如?gradient = cv2.Laplacian(image, cv2.CV_64F))。
    • 降噪:高斯模糊或形態學開運算去除微小噪聲。
  2. 標記控制
    • 前景標記:通過閾值分割或距離變換提取確定區域(如?cv2.distanceTransform)。
    • 背景標記:膨脹操作擴展背景區域。
  3. 分水嶺變換:使用?cv2.watershed?函數,標記區域邊界為?-1
import cv2  # OpenCV庫,用于圖像處理
import numpy as np  # NumPy庫,用于數值計算def watershed_segmentation(image):"""使用分水嶺算法對輸入圖像進行分割,并標記邊界:param image: 輸入的BGR彩色圖像:return: 標記了分水嶺邊界的圖像(邊界顯示為紅色)"""# 1. 轉換為灰度圖像# 分水嶺通常基于灰度圖像的梯度計算,因此先將彩色圖像轉為灰度圖gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 2. 閾值分割(二值化)# 使用Otsu算法自動確定閾值,并反轉二值圖像(背景為白色,前景為黑色)# cv2.THRESH_BINARY_INV:反轉二值化,使前景為白色(255),背景為黑色(0)ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)# 3. 形態學開運算(去噪)# 定義3x3的全1結構元素(核)kernel = np.ones((3, 3), np.uint8)# 開運算 = 先腐蝕后膨脹,用于去除小的噪聲點(如孤立白點)opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)# 4. 確定背景區域# 對開運算結果進行膨脹操作,擴展背景區域,確保背景完全覆蓋噪聲sure_bg = cv2.dilate(opening, kernel, iterations=3)# 5. 距離變換(提取確定的前景)# 計算每個前景像素到最近背景像素的距離(歐式距離,L2范數)dist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)# 對距離變換結果進行閾值化,提取確定的前景區域(距離較大的像素)ret, sure_fg = cv2.threshold(dist_transform, 0.5 * dist_transform.max(), 255, 0)# 將結果轉換為8位無符號整數(0-255)sure_fg = np.uint8(sure_fg)# 6. 確定未知區域(邊界區域)# 未知區域 = 背景區域 - 確定的前景區域unknown = cv2.subtract(sure_bg, sure_fg)# 7. 標記連通區域# 對確定的前景區域進行連通組件標記(每個連通區域分配一個唯一標簽)ret, markers = cv2.connectedComponents(sure_fg)# 分水嶺算法要求標記從1開始(0表示未知區域),因此對所有標記+1markers = markers + 1# 將未知區域(unknown)的標記設為0markers[unknown == 255] = 0# 8. 應用分水嶺算法# 輸入原始圖像和標記矩陣,分水嶺算法會修改標記矩陣# 邊界區域的標記會被設為-1markers = cv2.watershed(image, markers)# 9. 標記邊界(可視化)# 將分水嶺邊界(markers == -1)在原圖上標記為藍色image[markers == -1] = [255, 0, 0]  # BGR格式的藍色return image# 主程序
if __name__ == "__main__":# 讀取輸入圖像(確保路徑正確)image = cv2.imread('input.jpg')# 調用分水嶺分割函數result = watershed_segmentation(image)# 保存結果圖像cv2.imwrite('output.jpg', result)

?分水嶺算法主要是用于標記前景和背景的分界線,最終的處理結果如下:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913683.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913683.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913683.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

汽車功能安全系統階段開發【技術安全方案TSC以及安全分析】5

文章目錄1 技術安全方案 (Technical Safety Concept - TSC)2 系統安全架構設計 (System Safety Architecture Design)3 如何進行安全分析 (Safety Analysis)4 技術安全需求 (TSR) 如何分配到系統架構1 技術安全方案 (Technical Safety Concept - TSC) 技術安全方案 (Technical…

學習軟件測試的第十二天(接口測試)

一.如果一個接口請求不通,那么你會考慮那些方面的問題?如果一個接口請求不通,我會像“排查水管漏水”一樣一步步定位問題發生在哪一段,主要從這幾個方向去思考:當一個接口請求不通時,我會從以下幾個方面進行…

Linux下的C/C++開發之操作Zookeeper

ZooKeeper C 客戶端簡介與安裝ZooKeeper C API 簡介ZooKeeper 官方提供了多語言客戶端,C 語言客戶端是最底層的實現之一,功能全面且穩定,適合嵌入式開發、系統級組件、C 項目集成等場景。zookeeper.h 是 ZooKeeper 提供的 C 語言客戶端頭文件…

【openp2p】學習3:【專利分析】一種基于混合網絡的自適應切換方法、裝 置、設備及介質

本專利與開源項目無關,但可能是實際商用的一種專利。專利地址從此專利,可見p2p的重要性。透傳服務可能是實時轉發服務,提供中繼能力 透傳服務可以是指一種通過公網服務器將數據從第一客戶端傳遞到另一個設備 或客戶端的服務。這種服務通常用于克服網絡中的障礙,如防火墻、…

OpenCV中DPM(Deformable Part Model)目標檢測類cv::dpm::DPMDetector

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 OpenCV 中用于基于可變形部件模型(DPM) 的目標檢測器,主要用于行人、人臉等目標的檢測。它是一種傳統的基于特…

macOS 26快捷指令更新,融入AI打造智能操作體驗

快捷指令作為Mac系統中提升用戶操作效率的得力助手,在macOS 26中迎來了一次具有突破性的重大更新。此次更新融入了先進的AI技術,推出“智能操作”(Intelligent Actions)功能,讓快捷指令從簡單的自動化工具升級為真正的…

InstructBLIP:邁向具備指令微調能力的通用視覺語言模型

溫馨提示: 本篇文章已同步至"AI專題精講" InstructBLIP:邁向具備指令微調能力的通用視覺語言模型 摘要 大規模的預訓練與instruction tuning在構建通用語言模型方面已取得顯著成效。然而,構建通用的視覺-語言模型仍然具有挑戰性&…

基于dropbear實現嵌入式系統ssh服務端與客戶端完整交互

以下基于 Dropbear 實現 SSH 服務端與客戶端交互的完整步驟,涵蓋服務端部署、客戶端連接、認證配置及消息傳輸,結合了多篇權威資料的核心實踐:環境準備與安裝 服務端安裝 ? Linux 系統(以 Ubuntu/CentOS 為例) Ubuntu…

深圳安銳科技發布國內首款4G 索力儀!讓斜拉橋索力自動化監測更精準高效

近日,深圳安銳科技正式發布國內首款無線自供電、一體化的斜拉索實時監測設備 “4G索力監測儀”,成功攻克了傳統橋梁索體監測領域長期存在的實時性差、布設困難和成本高昂的行業難題,為斜拉橋、系桿拱橋提供全無線、自動化、云端實時同步的索力…

Pipeline 引用外部數據源最佳實踐

場景解析在企業網絡安全日志處理場景中,防火墻、入侵檢測系統(IDS)等設備會持續產生大量日志,記錄網絡流量、訪問請求、異常事件等基礎信息,但這些原始日志僅能呈現表面現象,難以全面剖析安全威脅&#xff…

UI + MCP Client + MCP Server(并且鏈接多個Server)

項目結構前端項目--------->MCP Client----------->MCP Serverserver就不過多贅述了,他只是相當于添加了多個的tools 鏈接前后端 http.createServer創建一個服務器// ---------------------------------------------------------------- // server.js import …

香港站群服務器與普通香港服務器對比

在選擇香港服務器時,用戶常常會遇到"站群服務器"和"普通服務器"兩種選項,雖然它們都基于香港數據中心的基礎設施,但在 IP 地址配置、功能定位和管理復雜度、成本上存在顯著差異,理解這些差異有助于用戶根據實…

4.B樹和B+樹的區別?為什么MySQL選擇B+樹作為索引?

區別:1.數據存儲位置B樹每個節點都存儲了索引和數據B樹只有葉子節點存儲數據,非葉子節點僅存儲索引2.葉子節點的鏈接B樹的所有葉子節點通過指針連接成一個雙向鏈表,可以高效地進行范圍查詢或者順序遍歷B樹則沒有這樣的連接關系,查…

轉換狂魔,Modbus TCP轉Profinet網關打通視覺傳感線連接之路

在汽車零部件沖壓生產線的世界中,液壓機的壓力穩定性是確保產品質量的秘密武器。然而,舊時代的人工巡檢和傳統監測方式卻好似拖累現代化進程的沉重枷鎖:效率低、成本高,還總是趕不上實時反饋的快車。這時,工廠決心大刀…

C++進階—二叉樹進階

第一章:內容安排說明 map和set特性需要先鋪墊二叉搜索樹,而二叉搜索樹也是一種樹形結構二叉搜索樹的特性了解,有助于更好的理解map和set的特性二叉樹中部分面試題稍微有點難度,在前面講解大家不容易接受,且時間長容易…

驅動下一代E/E架構的神經脈絡進化—10BASE-T1S

汽車電子電氣架構的演進正經歷一場深刻的變革,“中央計算單元區域控制器”的架構模式已成為當前主流車型平臺發展的明確方向。這種從傳統的“功能域”(Domain)架構向“區域”(Zonal)架構的轉型升級,旨在實現…

某學校系統中挖礦病毒應急排查

本篇文章主要記錄某學校長期未運營維護的程序,被黑客發現了漏洞,但好在學校有全流量設備,抓取到了過程中的流量包 需要你進行上機以及結合流量分析,排查攻擊者利用的漏洞以及上傳利用成功的木馬 文章目錄靶機介紹1.使用工具分析共…

vue 、react前端頁面支持縮放,echarts、地圖點擊左邊不準的原因和解決辦法

原因 由于以上都是通過canvas畫布生成的,一旦初始化,就會按照比例進行縮放,但與此同時,比例尺并沒有變化,導致坐標偏移 解決辦法 設置一個zoomVal產量,在頁面加載時計算縮放比例,然后在canvas容…

(LeetCode 每日一題) 1353. 最多可以參加的會議數目 (優先隊列、小頂堆)

題目:1353. 最多可以參加的會議數目 思路:優先隊列實現小頂堆,0(mx*logn) 在第i天,優先選endDay最小的那一個活動進行。那么遍歷每一天,用小頂堆來維護每個活動的最后一天即可,細節看注釋。 C版本&#xf…

Java結構型模式---代理模式

代理模式基礎概念代理模式是一種結構型設計模式,其核心思想是通過創建一個代理對象來控制對另一個真實對象的訪問。代理對象在客戶端和真實對象之間起到中介作用,允許在不改變真實對象的前提下,對其進行增強或控制。代理模式的核心組件主題接…