計算機視覺(八):開運算和閉運算

計算機視覺中的開運算(Opening)和閉運算(Closing)是兩種非常重要的形態學(Morphological)圖像處理操作。它們主要用于圖像的去噪、分割、特征提取等任務。這兩種運算都基于兩種更基礎的操作:腐蝕(Erosion)和膨脹(Dilation)。

腐蝕(Erosion)與膨脹(Dilation)

要理解開運算和閉運算,首先需要了解腐蝕和膨脹。在這些操作中,我們使用一個被稱為結構元素(Structuring Element)的核(kernel)來掃描圖像。結構元素是一個小型的、通常是二值的矩陣,它可以有不同的形狀,如正方形、圓形、菱形等。

腐蝕(Erosion)

腐蝕就像它的名字一樣,會“侵蝕”圖像中的前景物體(白色像素)。它的原理是:將結構元素在圖像上滑動,如果結構元素能完全包含在前景像素區域內,那么結構元素中心位置的像素值保持不變(仍為白色);否則,該像素值變為背景(黑色)。

核心作用:

  • 收縮前景物體,使細小的物體消失。
  • 斷開前景物體之間的細小連接。
  • 去除圖像中的小噪點。

可參考:https://blog.csdn.net/www_dong/article/details/151157623

膨脹(Dilation)

膨脹與腐蝕相反,它會“擴張”前景物體。它的原理是:將結構元素在圖像上滑動,如果結構元素與前景像素有任何重疊,那么結構元素中心位置的像素值就變為前景(白色)。

核心作用:

  • 擴張前景物體,使物體的輪廓變粗。
  • 連接前景物體之間斷開的區域。
  • 填充物體內部的小孔洞。

可參考:https://blog.csdn.net/www_dong/article/details/151157814

開運算(Opening)與閉運算(Closing)

開運算和閉運算是腐蝕和膨脹的組合應用,它們通過特定的順序來達到更復雜、更精細的圖像處理效果。

開運算(Opening)

定義: 先進行腐蝕,再進行膨脹

開運算(A,B)=(腐蝕(A,B)) 膨脹(B)

其中 A 是原始圖像,B 是結構元素。

作用與原理:

  1. 第一步(腐蝕): 腐蝕操作會移除圖像中所有小于結構元素的孤立噪點和細小連接,同時也會使前景物體收縮。
  2. 第二步(膨脹): 膨脹操作會恢復腐蝕后前景物體的大小。由于腐蝕已經去除了小噪點,膨脹無法將它們恢復,但會恢復那些較大的、有意義的前景物體。

效果: 開運算的主要作用是去除小的、孤立的噪點,同時平滑物體輪廓。它能有效地將物體從背景中分離出來,特別是當物體被細小的噪點或毛刺污染時。可以形象地理解為,開運算就像一個篩子,把小于“篩孔”(結構元素)的碎屑(噪點)篩掉,而保留了大的顆粒(物體)。

閉運算(Closing)

定義: 先進行膨脹,再進行腐蝕

閉運算(A,B)=(膨脹(A,B)) 腐蝕(B)

其中 A 是原始圖像,B 是結構元素。

作用與原理:

  1. 第一步(膨脹): 膨脹操作會填充前景物體內部的小孔洞或裂縫,并連接斷開的物體。
  2. 第二步(腐蝕): 腐蝕操作會恢復膨脹后物體的大小和輪廓,但由于膨脹已經填充了孔洞,腐蝕無法將它們重新打開,只會使物體輪廓恢復到接近原始狀態。

效果: 閉運算的主要作用是填充物體內部的小孔洞或裂縫,同時連接斷開的物體。它能夠彌合前景物體中的不連續性,使物體輪廓變得平滑。可以形象地理解為,閉運算就像是給物體“打補丁”,把小的破洞和裂縫都修補起來。

opencv實現開運算與閉運算

核心函數

cv2.morphologyEx()

用于執行高級形態學轉換。

cv2.morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=1, borderType=None, borderValue=None)

參數解釋:

  • src: 原始輸入圖像(通常是二值圖像)。
  • op: 要執行的形態學操作類型。對于開運算和閉運算,我們使用:
    • cv2.MORPH_OPEN:執行開運算。
    • cv2.MORPH_CLOSE:執行閉運算。
  • kernel: 用于操作的結構元素(Structuring Element)。你可以使用 cv2.getStructuringElement() 函數來創建它。
  • iterations: 操作重復的次數,默認為1。增加這個值可以增強效果。

cv2.getStructuringElement()

在執行形態學操作之前,需要定義一個結構元素。cv2.getStructuringElement() 函數可以創建不同形狀和大小的結構元素。

cv2.getStructuringElement(shape, ksize, anchor=None)

參數解釋:

  • shape: 結構元素的形狀。常用的形狀有:
    • cv2.MORPH_RECT: 矩形
    • cv2.MORPH_ELLIPSE: 橢圓形
    • cv2.MORPH_CROSS: 十字形
  • ksize: 結構元素的大小,以元組 (width, height) 的形式指定。

示例

# -*- coding: utf-8 -*-
import cv2
import numpy as np# 創建黑色背景
img = np.zeros((300, 400), np.uint8)# 畫一個大的白色矩形 (主體)
cv2.rectangle(img, (50, 50), (200, 200), 255, -1)# 在矩形中挖黑洞
cv2.circle(img, (100, 120), 15, 0, -1)
cv2.circle(img, (150, 80), 20, 0, -1)# 在矩形下方畫兩個相鄰但斷開的矩形
cv2.rectangle(img, (230, 100), (280, 150), 255, -1)
cv2.rectangle(img, (290, 100), (340, 150), 255, -1)# 在背景添加許多小白點噪聲
for _ in range(150):x, y = np.random.randint(0, 400), np.random.randint(0, 300)img[y, x] = 255# --- 開運算(去噪點) ---
kernel_open = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel_open)# --- 閉運算(填黑洞 + 連接區域) ---
kernel_close = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 15))
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel_close)# --- 先開運算再閉運算(組合效果) ---
open_then_close = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel_close)# 顯示對比
cv2.imshow("Original", img)
cv2.imshow("Opening (Noise Removed)", opening)
cv2.imshow("Closing (Fill holes + Connect)", closing)
cv2.imshow("Open->Close (Clean + Fill)", open_then_close)cv2.waitKey(0)
cv2.destroyAllWindows()

執行效果:
在這里插入圖片描述

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

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

相關文章

nginx常用命令(備忘)

一、引言:Nginx 為何成為前端開發必備工具 ** 在前端開發的廣闊領域中,Nginx 已然成為了一個不可或缺的強大工具。它是一款輕量級的 HTTP 服務器和反向代理服務器,采用事件驅動的異步非阻塞處理方式框架,這賦予了它卓越的 I/O 性…

告別Qt Slider!用純C++打造更輕量的TpSlider組件

組件運行效果展示 組件概述 TpSlider組件簡介 TpSlider是PiXSingleGUI庫中的可拖動滑塊組件,支持水平和垂直兩種方向的滑動操作。TpSlider.h:13-17該組件提供了完整的用戶交互功能,包括鼠標拖拽、數值范圍設置和實時反饋機制。 核心特性 雙向支持&am…

sensitive-word 敏感詞性能提升14倍優化全過程 v0.28.0

背景 有一天,群里收到小伙伴提的一個問題,為什么程序 sensitive-word 第一次執行這么慢? sensitive-word-131 初步驗證 自己本地用 v0.27.1 驗證了一下,確實很奇怪,第一次明顯很慢。 為了排除一些干擾項,我們把一些…

4.6 多個光源

1.Include Files 2.The Second Light 3.Point Light1.Include Files 為了在著色器中實現多光源支持, 我們需要添加更多通道; 這些通道會包含幾乎相同的代碼, 為了避免代碼重復, 我們將著色器代碼移到一個包含文件中; 與光照著色器相同的文件夾中創建一個后綴為.cginc的文件, 將…

ANSYS HFSS的簡單認識

HFSS(High Frequency Structure Simulator)是ANSYS公司開發的一款用于高頻電磁場仿真的行業標準軟件。它通過“計算”電磁波在各種結構中的行為,來幫助工程師設計天線、濾波器、微波電路、高速電子封裝等。我用一個簡單易懂的比喻來幫你理解整…

Codeforces Round 1046 (Div. 2) vp補題

只是簽了三道題就燃盡了… 原題連接 A //不可能連續進三球 得分值差最多的只有00X00X00X00 bool jud(int a,int b){if(a!0&&b!0&&max(a,b)-2*(min(a,b)1)>1)return 0;if(a0||b0){if(abs(a-b)>3)return 0;}return 1; } void solve() {int a,b,c,d;cin…

水泵運行組態監控系統御控物聯網解決方案

一、方案背景與需求分析隨著工業4.0和智慧城市建設的推進,傳統水泵監控方式存在數據孤島、響應滯后、運維成本高等問題。本方案通過物聯網(IoT)技術構建水泵運行組態監控系統,實現設備狀態實時感知、故障預警、遠程調控及能效優化…

海爾電視刷機

硬盤格式化只有ntfs和exfat怎么辦,沒有fat32 這臺型號le32c31 連有線幾天后突然卡系統啟動中 電視系統崩潰了怎么辦?一直顯示啟動中!三分鐘解決問題,只要五元搞定!_嗶哩嗶哩_bilibili format H: /fs:FAT32 慢 disk…

Science Advances副主編:如何提高論文投稿接收率?

國際著名綜合性學術期刊《Science Advances》每年可接到約20000份投稿,有高達90%的拒稿率,大部分稿件甚至沒有進入評審階段,作為該期刊的副主編之一,杜克大學的Warren Warren教授撰寫了文章,給投稿人提出幾點建議以提高…

少兒配音教育:廣州聲與色在線科技有限公司打造趣味課程,助力青少年語言能力提升

針對青少年語言表達能力培養需求,廣州聲與色在線科技有限公司推出 “少兒配音趣味課程”,通過動畫、童話等青少年喜愛的形式,融合發聲訓練與興趣培養,成為少兒素質教育的新選擇。課程設計貼合 8-15 歲青少年認知特點:分…

【架構藝術】變更風險防控架構嵌入決策降噪模塊的方法

在先前的文章中,我們聊到了一個變更觀測任務可以通過什么樣的方式對不同的變更防控能力做統一調度,達到優越的變更風險攔截效果。但是在實戰當中,變更觀測任務集成了很多能力,即便風險攔截率很高,但不同能力效果也有差…

LeetCode算法日記 - Day 33: 最長公共前綴、最長回文子串

目錄 1. 最長公共前綴 1.1 題目解析 1.2 解法 1.3 代碼實現 2. 最長回文子串 2.1 題目解析 2.2 解法 2.3 代碼實現 1. 最長公共前綴 14. 最長公共前綴 - 力扣(LeetCode) 編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴&…

Python畢業設計推薦:基于Django的飲食計劃推薦與交流分享平臺 飲食健康系統 健康食譜計劃系統

精彩專欄推薦訂閱:在 下方專欄👇🏻👇🏻👇🏻👇🏻 💖🔥作者主頁:計算機畢設木哥🔥 💖 文章目錄 一、項目介紹二…

物聯網雙軸傾角傳感器廠家全面解析

內容概要本文旨在全面解析物聯網雙軸傾角傳感器廠家的核心競爭力,為進口設備代理商及工業物聯網項目提供實用選型指南。我們將深入探討行業領先制造商的研發實力和生產標準,重點分析產品特性如低功耗設計優勢、0.2高精度測量特性,以及CAN/電流…

Docker學習筆記-網絡類型

Docker 網絡類型1、Docker四種網絡模式 (1)docker四種網絡模式如下: Bridge contauner 橋接式網絡模式Host(open) container 開放式網絡模式Container(join) container 聯合掛載式網絡模式,是host網絡模式的延伸None(Close)…

SDRAM詳細分析-08 數據手冊解讀

大家好,這里是大話硬件。 前面我們梳理了很多關于內存的內容,不知道有沒有人好奇,為什么要花這么大的精力做這些內容? 在4月份的時候,三星宣布將在2025年逐步停產DDR4內存顆粒,隨后海力士和鎂光也跟著一起,都宣布逐步停產DDR4顆粒。這三家半導體廠商在內存方面頂了半邊…

Windows 環境下部署 MinIO 集群

文章目錄介紹軟件特點下載多機分布式集群部署1.前提準備2. 新建minio工作目錄3. 編寫運行命令4. 啟動、測試5. nginx配置介紹 MinIO 是一款高性能、開源、云原生的分布式對象存儲系統,專為私有云、公有云和邊緣計算場景設計,完全兼容 Amazon S3 API&…

鴻蒙libxm2交叉編譯

一開始先使用了lycium,但是沒有編譯通過 改為使用源碼自帶的配置文件編譯 我使用的源碼是libxml2-2.9.10.tar.gz 解壓后進行下面的配置: root@ubuntu:/home/lw/libxml2-2.9.10# export OHOS_SDK=/home/lw/ohos-sdk/linuxroot@ubuntu:/home/lw/libxml2-2.9.10# export AS=…

MCAP :機器人數據容器的全面實踐指南

Outline: MCAP 已形成完整工具鏈生態: Foxglove Studio:可視化分析工具mcap-cli:跨平臺命令行工具AWS RoboMaker:原生云存儲支持 隨著 IEEE 正在制定的 P3196 機器人數據標準,MCAP 正在演進為行業基礎架構的重要組成…

【Bluedroid】A2dp Source播放流程源碼分析(7):藍牙音頻流啟動流程深度解析(btif_av_stream_start)

本文深入分析Android Bluetooth協議棧中A2DP音頻流啟動的完整流程,從應用層調用btif_av_stream_start()開始,穿越BTIF、BTA、AVDTP多層架構,最終通過L2CAP發送AVDTP啟動命令。揭示狀態機驅動、異步消息傳遞、流控制等核心機制。并通過代碼與日志結合的方式,揭示藍牙音頻流從…