計算機視覺(六):腐蝕操作

腐蝕(Erosion)是計算機視覺和圖像處理中一種基礎且至關重要的形態學操作。它與膨脹(Dilation)互為對偶,共同構成了形態學處理的基石。腐蝕操作主要用于縮小前景物體的面積,去除圖像中的噪聲,以及分離相互連接的物體。

基本原理

腐蝕操作的核心思想是收縮或瘦身。它通過一個被稱為結構元素(Structuring Element)核(Kernel)的小型模板,在圖像上進行“卷積”或“滑動”操作。結構元素通常是一個預定義的小矩陣,比如3x3或5x5的正方形,也可以是圓形、十字形等其他形狀,其中心點被稱為錨點(Anchor Point)

腐蝕操作的計算過程可以概括為以下步驟:

  1. 定義結構元素: 選擇一個合適的結構元素,例如一個3x3的全1矩陣。
  2. 滑動遍歷圖像: 將結構元素的錨點依次移動到圖像的每一個像素點上。
  3. 計算腐蝕結果: 對于結構元素覆蓋的區域,檢查所有像素值。
    • 如果結構元素覆蓋的所有像素值都為1(在二值圖像中,1通常代表前景),那么錨點對應的輸出像素值也為1。
    • 如果結構元素覆蓋的區域內,至少有一個像素值不為1(即為0),那么錨點對應的輸出像素值就為0。

換句話說,只有當結構元素完全“嵌入”在前景區域時,輸出圖像的對應像素才保持前景色。否則,即使只有一個像素是背景,該位置也會被“腐蝕”成背景色。

這個過程的結果是,所有與背景相鄰的前景像素都會被“吃掉”或“侵蝕”,從而導致前景物體的邊界向內收縮,整體面積減小。這種效果對于移除圖像中的細小噪聲點(如“椒鹽噪聲”)或斷開微弱連接非常有效。

腐蝕操作在不同類型圖像上的效果

二值圖像(Binary Images)

在二值圖像(只有黑白兩種顏色,通常用0和1表示)中,腐蝕操作的效果最為直觀。前景物體(通常為白色,像素值為1)的邊緣會向內收縮。

  • 消除噪聲: 如果圖像中有一些孤立的小白點(噪聲),并且這些點的面積小于結構元素,那么腐蝕操作會直接將它們移除。
  • 斷開連接: 如果兩個前景物體通過一個非常細小的橋梁連接在一起,腐蝕操作可以“切斷”這個連接,將它們分離成兩個獨立的物體。
  • 瘦化骨架: 通過反復進行腐蝕操作,直到物體無法再縮小,可以提取出物體的“骨架”或中心線。

灰度圖像(Grayscale Images)

在灰度圖像中,腐蝕操作的原理略有不同。結構元素仍然在圖像上滑動,但計算規則變為:

  • 輸出圖像中對應錨點位置的像素值,等于結構元素覆蓋區域內所有像素的最小值

這個過程的結果是,圖像中亮度高的區域會收縮,而亮度低的區域會膨脹。這在某些情況下可以用來去除圖像中的高亮度噪聲,或者平滑圖像的高光區域。

實際應用

圖像預處理與去噪

腐蝕是去除圖像中**“椒鹽噪聲”**(Salt-and-pepper noise)的有效方法之一。小的白色噪聲點在腐蝕后會直接消失,而小的黑色噪聲點則需要膨脹操作來處理。

分離相互連接的物體

在物體識別或計數任務中,如果一些物體因接觸或遮擋而粘連在一起,腐蝕操作可以有效地將它們分離。例如,在分析細胞圖像時,如果一些細胞團聚在一起,腐蝕操作可以用來將它們分離開,以便進行獨立的計數和分析。

細化與骨架提取

在模式識別和生物特征識別(如指紋識別)中,常常需要提取物體的骨架。腐蝕操作可以逐步“侵蝕”物體,直到其寬度變為一個像素,從而得到物體的中心骨架。這個骨架包含了物體的拓撲信息,對于后續的分析和匹配非常有用。

邊緣檢測

腐蝕和膨脹的結合可以用來進行邊緣檢測。**膨脹圖像與腐蝕圖像的差值(膨脹-腐蝕)可以得到一個物體內部的輪廓,而原始圖像與腐蝕圖像的差值(原圖-腐蝕)**可以得到一個物體外部的輪廓。

opencv實現腐蝕操作示例

import cv2
import numpy as np# 1. 加載圖像并轉換為二值圖像
image = cv2.imread('test.jpg')
# 轉換為灰度圖
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化處理
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)# 2. 定義結構元素
# 這是一個 5x5 的矩形核
kernel = np.ones((5, 5), np.uint8)# 3. 執行腐蝕操作
eroded_binary = cv2.erode(binary, kernel, iterations=1)# 4. 顯示結果
cv2.imshow('Original Image', image)
cv2.imshow('Original Binary Image', binary)
cv2.imshow('Eroded Image', eroded_binary)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

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

相關文章

AI隨筆番外 · 貓貓狐狐的尾巴式技術分享

🎀【開場 咱才不是偷懶寫博客】🐾貓貓趴在鍵盤邊,耳朵一抖一抖:“嗚嗚嗚……明明說好要寫技術總結,結果咱腦袋里全是尾巴……要不今天就水一篇隨意的 AI 技術分享算啦?”🦊狐狐把書卷輕輕放在桌…

數據分析與挖掘工程師學習規劃

一、數學與統計學基礎概率論與數理統計隨機變量、概率分布(正態分布、泊松分布等)、大數定律、中心極限定理假設檢驗、置信區間、方差分析(ANOVA)、回歸分析貝葉斯定理及其在分類問題中的應用(如樸素貝葉斯算法&#x…

(線上問題排查)4.CPU使用率飆升:從應急滅火到根因治理

目錄 從宏觀到微觀:CPU排查的“破案”流程 第一階段:應急響應——找到“誰”在搗亂 1. 全局視角:top命令的初窺 2. 進程內窺視:揪出問題線程 第二階段:深入分析——理解“為什么” 3. 線程堆棧分析:查…

如何快速實現實時云渲染云推流平臺的網絡環境配置與端口映射

LarkXR是由Paraverse平行云自主研發的實時云渲染推流平臺,以其卓越的性能和豐富完備的功能插件,引領3D/XR云化行業風向標。LarkXR適用于3D/XR開發者、設計師、終端用戶等創新用戶,可以在零硬件負擔下,輕松實現超高清低時延的3D交互…

13、Docker構建鏡像之Dockerfile

13、Docker構建鏡像之Dockerfile 1、Dockerfile是什么 Dockerfile是Docker鏡像的構建文件,它包含了一系列指令和參數,用于定義如何構建一個Docker鏡像。通過Dockerfile,我們可以將應用程序和其依賴的組件打包到一個獨立的鏡像中,方…

TensorFlow 深度學習 | 三種創建模型的 API

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 TensorFlow 深度學習 | 三種創建模型的 API 在 TensorFlow 中,模型的構建方式非常靈…

LeetCode82刪除排序鏈表中的重復元素 II

文章目錄刪除排序鏈表中的重復元素 II題目描述示例核心思想最優雅解法算法步驟詳解示例1演示:[1,2,3,3,4,4,5]關鍵理解點1. 虛擬頭節點的作用2. 重復檢測邏輯3. 完全刪除重復節點邊界情況處理情況1:空鏈表情況2:單節點情況3:全部重…

藍橋杯算法之基礎知識(6)

目錄 Ⅰ.os操作 Ⅱ.時間庫(很重要) Ⅲ.基本單位換算(ms,min,h的單位換算) Ⅳ.時間戳 Ⅴ.文件讀取 Ⅵ.堆 Ⅶ.math操作 Ⅷ.range()方法單獨使用 Ⅸ.python 的異常輸出 Ⅹ.for…

多架構/系統圖,搞懂:期貨賬戶體系,太通透了!

Hi,圍爐喝茶聊產品的新老朋友好!上周和大家聊了國內6大期貨交易所清算交收,感興趣的話煩請戳藍色鏈接去學習,就當為下面學習作知識鋪墊,更重要是溫故知新,并保持知識連貫性。另外圍爐特意整理了與賬戶相關的文章,如下所示: “保證金被扣”拆解期貨交易所:清算交收體系…

python-對圖片中的頭像進行摳圖

要實現對圖片中人臉或頭像進行摳圖,可以使用 Python 的 人臉檢測 和 掩碼生成裁剪工具。這里提供幾種實現方法,用于檢測圖片中的人臉區域并實現裁剪效果: 方案 1: 使用 OpenCV 和 Haar級聯檢測人臉并裁剪 步驟 1: 安裝依賴 安裝 OpenCV 和其他…

OpenLayers常用控件 -- 章節一:地圖縮放控件詳解教程

前言在Web地圖開發中,縮放控件是用戶與地圖交互最基本也是最重要的功能之一。OpenLayers作為功能強大的開源地圖庫,提供了多種縮放控件來滿足不同的交互需求。本文將結合一個完整的Vue.js示例,詳細介紹OpenLayers中三種主要的縮放控件&#x…

拓撲學:數學領域的魅力之鑰

拓撲學:數學領域的魅力之鑰 關鍵詞:拓撲學、連續變形、同胚、流形、代數拓撲、點集拓撲、應用數學 摘要:本文深入探討拓撲學這一現代數學的重要分支,從其基本概念到高級理論,從純數學研究到實際應用。我們將從點集拓撲的基礎開始,逐步深入到代數拓撲和微分拓撲的復雜世界…

iOS 上架 uni-app 流程全解析,從打包到發布的完整實踐

uni-app 作為跨平臺開發框架,憑借“一套代碼,多端運行”的特性,已經成為不少團隊和個人開發者的首選。 然而,很多開發者在 iOS 應用上架環節,常常遇到流程復雜、工具分散、審核繁瑣等問題。 本文將以 iOS 上架 uni-app…

go 語言map是線程不安全的如何處理

在 Go 語言中,map確實是線程不安全的。當多個 goroutine 并發讀寫同一個 map 時,會導致 ?race condition?(競態條件),可能引發程序崩潰或數據不一致。以下是解決方案:一、基本方案:使用互斥鎖…

落地頁測試case(Android視角)

落地頁按鈕或者adjust的鏈接的跳轉功能和測試case(Android視角) 如果沒有安裝應用,跳轉到應用商店的應用下載界面如果已經安裝應用,跳轉到應用內,再從應用內跳轉到相應的頁面如果落地頁是在window打開,點擊…

前端自動化打包服務器無法安裝高版本 Node.js v22 問題解決

問題:安裝高版本 node,報錯。具體表現 當執行 node -v 命令時,系統提示多個 GLIBC_xxx 版本未找到,比如 GLIBCXX_3.4.21、GLIBC_2.27 等,這些是 node 程序運行所依賴的 Glibc 庫的特定版本符號,當前系統安裝…

shell腳本第七階段--三劍客之awk

學習目標熟悉awk的命令行模式基本語法結構熟悉awk的相關內部變量熟悉awk常用的打印函數print能夠在awk中匹配正則表達式打印相關的行一、awk介紹awk是一種編程語言,主要用于在linux/unix下對文本和數據進行處理,是linux/unix下的一個工具。數據可以來自標…

Unity 的游戲循環機制

Unity 的游戲循環機制在 Unity 中,游戲的運行是基于幀的。每一幀都遵循固定的執行順序:處理輸入執行游戲邏輯 (包括 Update、FixedUpdate 和協程)渲染場景顯示幀為什么 GameTime.time 在同一幀內不變GameTime.time 是只讀屬性:它返回的是當前…

算法題(198):數字三角形

審題: 本題需要我們找到數字三角形中的最大路徑總值,并輸出 思路: 方法一:動態規劃 由于本題的路徑權值是路徑上每一個值累加起來,問題具有階段重復性,所以我們嘗試使用動態規劃解決此問題 (1&a…

變頻器實習DAY42 VF與IF電機啟動方式

目錄變頻器實習DAY42一、工作內容1.1 OF229程序重新燒錄和測試二、學習內容2.1 VF與IF電機啟動方式1. VF(Voltage Frequency)啟動電機2. IF(Current Frequency)啟動電機總結附學習參考網址歡迎大家有問題評論交流 (* ^ ω ^)變頻器…