計算兩個二值圖像的交集計算交點數量的基礎上,進一步使用 DBSCAN 算法對交點進行聚

好的,如果你需要在計算交點數量的基礎上,進一步使用 DBSCAN 算法對交點進行聚類,以合并距離較近的點,可以按照以下步驟實現:

  1. 計算交點:使用 cv2.bitwise_and 計算兩個二值圖像的交集,并提取交點的坐標。
  2. 使用 DBSCAN 聚類:對提取的交點坐標進行 DBSCAN 聚類,根據 dbscan_epsdbscan_min_samples 參數合并距離較近的點。
  3. 統計聚類后的點數量:計算最終的聚類中心數量,即合并后的交點數量。

下面是完整的代碼實現:

函數定義

import cv2
import numpy as np
from sklearn.cluster import DBSCANdef count_merged_intersection_points(mask1, mask2, dbscan_eps=11.0, dbscan_min_samples=1):"""計算兩個二值圖像的交點數量,并使用 DBSCAN 算法合并距離較近的點。參數:mask1 (numpy.ndarray): 第一個二值圖像。mask2 (numpy.ndarray): 第二個二值圖像。dbscan_eps (float): DBSCAN 的鄰域半徑(像素)。dbscan_min_samples (int): DBSCAN 的最小樣本數。返回:int: 合并后的交點數量。"""# 計算交集intersection = cv2.bitwise_and(mask1, mask2)# 提取交點的坐標points = np.column_stack(np.where(intersection > 0))# 如果沒有交點,直接返回 0if points.shape[0] == 0:return 0# 使用 DBSCAN 聚類dbscan = DBSCAN(eps=dbscan_eps, min_samples=dbscan_min_samples)labels = dbscan.fit_predict(points)# 統計聚類后的點數量(即聚類中心的數量)unique_labels = np.unique(labels)num_clusters = len(unique_labels)return num_clusters# 示例用法
if __name__ == "__main__":# 創建兩個示例二值圖像mask1 = np.zeros((100, 100), dtype=np.uint8)mask2 = np.zeros((100, 100), dtype=np.uint8)# 在 mask1 中繪制一個矩形cv2.rectangle(mask1, (20, 20), (60, 60), 255, -1)# 在 mask2 中繪制一個矩形cv2.rectangle(mask2, (40, 40), (80, 80), 255, -1)# 計算合并后的交點數量dbscan_eps = 11.0dbscan_min_samples = 1merged_intersection_points = count_merged_intersection_points(mask1, mask2, dbscan_eps, dbscan_min_samples)print(f"合并后的交點數量: {merged_intersection_points}")# 顯示結果cv2.imshow('Mask 1', mask1)cv2.imshow('Mask 2', mask2)cv2.imshow('Intersection', cv2.bitwise_and(mask1, mask2))cv2.waitKey(0)cv2.destroyAllWindows()

函數解釋

  1. 計算交集

    • 使用 cv2.bitwise_and(mask1, mask2) 計算兩個二值圖像的交集。
  2. 提取交點坐標

    • 使用 np.column_stack(np.where(intersection > 0)) 提取交集圖像中非零像素點的坐標。
  3. 使用 DBSCAN 聚類

    • 使用 DBSCAN 類進行聚類,參數 epsmin_samples 分別表示鄰域半徑和最小樣本數。
    • 調用 dbscan.fit_predict(points) 對交點坐標進行聚類,并獲取每個點的聚類標簽。
  4. 統計聚類后的點數量

    • 使用 np.unique(labels) 獲取所有唯一的聚類標簽。
    • 聚類中心的數量即為合并后的交點數量。

示例用法

在示例代碼中,我們創建了兩個二值圖像 mask1mask2,并在它們中分別繪制了兩個矩形。然后調用 count_merged_intersection_points 函數計算合并后的交點數量,并顯示結果。

注意事項

  • 確保輸入的 mask1mask2 是二值圖像(像素值只有 0 和 255)。
  • 如果輸入圖像不是二值圖像,可以使用 cv2.thresholdcv2.adaptiveThreshold 將其轉換為二值圖像。
  • dbscan_epsdbscan_min_samples 參數可以根據實際需求進行調整。

希望這個函數能滿足你的需求!

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

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

相關文章

Linux中的IP命令詳解

華子目錄 1.ip命令是什么1.1ip命令的由來1.2ip命令的安裝包1.2ip選項(基本不用) 2.查看網絡信息2.1顯示全部網絡接口信息2.2顯示單個網絡接口信息2.3顯示單個接口狀態2.4查看路由表2.5查看arp緩存 3.設置網卡ip地址3.1啟用或停用網卡3.2設置默認網關3.3新…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘tox’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘tox’問題 摘要 在使用 PyCharm 2025 控制臺執行 pip install 命令時,開發者經常會遇到如下錯誤: ModuleNotFoundError: No module nam…

拆分TypeScript項目的學習收獲:處理編譯緩存和包緩存,引用本地項目,使用相對路徑

最近需要將工作中的一個TS包拆出一部分代碼,以便在多個團隊和項目中共享。原以為這會是一項特別簡單的工作,但是也花了兩天才大致拆成功。因此記錄一下,也給有類似需求的同學一點經驗。 所拆項目的大致功能:整個項目的結構大致分為…

瑞芯微RK3576平臺FFmpeg硬件編解碼移植及性能測試實戰攻略

本文介紹瑞芯微RK3576平臺,FFmpeg硬件編解碼移植及性能測試方法。 FFmpeg簡介與實測數據 FFmpeg簡介 FFmpeg是一套多媒體框架,能夠解碼、編碼、轉碼、復用、解復用、流、過濾和播放數字音頻、視頻,提供了錄制、轉換以及流化音視頻的完整解…

【網絡安全入門基礎教程】網絡安全零基礎學習方向及需要掌握的技能

最近總有同學問我,0基礎怎么學網絡安全?0基礎可以轉行做網絡安全嗎?網絡安全有哪些學習方向?每個方向需要掌握哪些技能?今天給大家簡單寫一下。 我的回答是先了解,再入行。 具體怎么做呢? 首…

Altium Designer中的Net-Tie:解決多網絡合并與電氣隔離的利器

Altium Designer中的Net-Tie:解決多網絡合并與電氣隔離的利器 在復雜的PCB設計中,我們常常會遇到一些特殊的電氣連接需求。例如,需要將兩個或多個邏輯上獨立但物理上需要連接的網絡(如不同電源域的GND)在特定點進行連接(單點連接),同時又要保持其網絡標識的獨立性。 …

計算機畢設項目 基于Python與機器學習的B站視頻熱度分析與預測系統 基于隨機森林算法的B站視頻內容熱度預測系統

💕💕作者:計算機源碼社 💕💕個人簡介:本人八年開發經驗,擅長Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬蟲、大數據、機器學習等,大家有這一塊的問題…

百勝軟件×OceanBase深度合作,賦能品牌零售數字化實踐降本增效

8月28日,由OceanBase主辦的“2025零售數據底座創新大會”在上海舉行。大會重磅發布了由愛分析、OceanBase攜手王歆、沈剛兩位行業專家聯合編制的《零售一體化云數據庫白皮書》。白皮書系統梳理了從“大促流量應對”到“AI應用落地”的全流程方法論,并為不…

2025年Java在中國開發語言排名分析報告

引言 在軟件定義世界的2025年,編程語言的戰略價值已超越工具屬性,成為產業數字化轉型的核心支撐與開發者思維模式的延伸載體。TIOBE指數作為全球技術市場變化的重要晴雨表,通過追蹤工程師分布、課程設置、供應商動態及搜索引擎數據&#xff0…

TDengine 日期時間函數 DAYOFWEEK 使用手冊

DAYOFWEEK 函數使用手冊 函數描述 DAYOFWEEK 函數用于返回指定日期是一周中的第幾天。該函數遵循標準的星期編號約定,返回值范圍為 1-7,其中: 1 星期日 (Sunday)2 星期一 (Monday)3 星期二 (Tuesday)4 星期三 (Wednesday)5 星期四 (T…

從RNN到BERT

目錄 序列模型簡介RNN循環神經網絡LSTM長短期記憶網絡Transformer架構BERT模型詳解實踐項目 序列模型簡介 什么是序列數據? 序列數據是按照特定順序排列的數據,其中元素的順序包含重要信息。常見的序列數據包括: 文本:單詞或字…

橢圓曲線的數學基礎

一、引言 橢圓曲線密碼學(Elliptic Curve Cryptography, ECC)是現代公鑰密碼學的核心工具之一。 相比傳統的 RSA,ECC 可以用 更短的密鑰長度 提供 同等甚至更高的安全性,因此被廣泛應用于區塊鏈、TLS、移動設備加密等場景。 要理解…

從能耗黑洞到精準智控:ASCB2智慧空開重構高校宿舍用電能效模型

隨著智慧校園建設不斷推進,校園宿舍的用電管理面臨著安全性、智能化與可視化的多重挑戰。傳統用電監控手段在數據采集、實時控制和故障響應方面存在明顯不足。安科瑞ASCB2系列物聯網斷路器通過集成多種智能感知、保護控制與通信手段,為高校宿舍提供了一種…

前端學習——JavaScript基礎

前面我們已經學習了前端代碼的骨架——HTML和前端美化工具——CSS。但是作為界面與客戶進行交互我們還需要一個語言工具——JavaScript。 因此實際上HTML、CSS、JavaScript三者是這樣的關系: HTML: 網頁的結構(骨) CSS: 網頁的表現(皮) JavaScript: 網頁的行為(魂) …

Ubuntu下的壓縮及解壓縮

一、Linxu 下常用的壓縮格式 Linux 下常用的壓縮擴展名有:.tar 、.tar.bz2、 .tar.gz 。 二、Windows 下 7ZIP 軟件的安裝 因為 Linux 下很多文件是 .bz2 , .gz 結尾的壓縮文件,因此需要在 windows 下安裝 7ZIP 軟件。 7-Zip 三、Ubuntu…

金融數據安全

安全框架金融數據生命周期是指金融業機構在開展業務和進行經營管理的過程中,對金融數據進行采集、 傳輸、存儲、使用、刪除、銷毀的整個過程。數據生命周期安全框架,遵循數據安全原則,以 數據安全分級為基礎,建立覆蓋數據生命周期全過程的安全…

Unity抖音小游戲快捷立項準備/改動

本文由 NRatel 歷史筆記整理而來,如有錯誤歡迎指正。 1、熟讀抖音接入文檔,記錄要點 Unity 小游戲接入指南_抖音開放平臺 2、創建Git倉庫,開通成員權限 美術目錄,對程序、美術、策劃全開 程序目錄,對程序全開、對部…

Labview使用modbus或S7與PLC通信

一、modbus 1.使用VI Package Manager (VIPM)安裝modbus庫 2.安裝好后如下顯示會有Modbus Library 3.Master API作為客戶端,如下有一個例程 4.Slave API作為服務端,如下有一個例程 上述兩個例程是通過IP 127.0.0.1可以互相通信的。數據是一直存在服務端…

Docker Swarm 與 Kubernetes (K8s) 全面對比教程

一、引言:為什么需要了解這兩種編排工具?在容器化應用部署中,Docker Swarm 和 Kubernetes (K8s) 是兩個最主流的容器編排工具。作為一名開發者或運維工程師,理解它們的區別和適用場景至關重要。本教程將通過對比分析,幫…

開源協作白板 – 輕量級多用戶實時協作白板系統 – 支持多用戶繪圖、文字編輯、圖片處理

項目概述 Whiteboard 是一個基于 Node.js 的輕量級協作白板/畫板系統,支持多用戶實時協作繪圖、文字編輯、圖片處理等功能。該項目采用現代化的 Web 技術棧,提供直觀的用戶界面和豐富的交互功能。 核心特性 🎨 繪圖功能 多種繪圖工具&…