圖像處理技巧形態學濾波之膨脹操作

1. 引言

歡迎回來,我的圖像處理愛好者們!今天,讓我們繼續研究圖像處理領域中的形態學計算。在本篇中,我們將重點介紹腐蝕操作的反向效果膨脹操作。

閑話少說,我們直接開始吧!

2. 膨脹操作原理

膨脹操作為腐蝕操作的作用相反,這是圖像處理中最常使用的另一種形態學操作,它主要通過在圖像邊界上擴展像素來實現擴寬圖像中對象的作用。膨脹操作通過考慮每個像素的鄰域并將其值設置為該鄰域中所有像素中的最大值來實現的。對于二值圖像,如果任何相鄰像素的值為1,則輸出像素也被設置為1。

接著,讓我們通過具體示例來進行講解,首先導入我們今天的圖像,代碼如下:

# Define the image
original_image = np.array([[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 1, 1, 1, 0, 0],[0, 0, 1, 1, 1, 1, 0, 0],[0, 1, 1, 1, 1, 0, 0, 0],[0, 1, 1, 1, 0, 0, 0, 0],[0, 1, 1, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0]])plt.figure(figsize=(10,10))
plt.imshow(original_image, cmap='gray', extent=[0, 8, 0, 8])
plt.title('Original Image', fontsize=20);

得到結果如下:
在這里插入圖片描述

3. 定義結構化元素

和上一節腐蝕操作類似,我們選擇同樣的十字架結構化元素模板,代碼如下:

# Define the structuring element
selem_cross = np.array([[0,1,0],[1,1,1],[0,1,0]])
plt.figure(figsize=(9,9))
plt.imshow(selem_cross, cmap='gray')
plt.title('Structuring Element: Cross', fontsize=20);

得到結果如下:
在這里插入圖片描述

4. 膨脹操作效果

經過上述操作,我們定義了需要操作的原始圖像和相應的結構化模板元素,接著我們使用函數apply_erosion來將上述結構化模板元素作用于相應的圖像中,進而得到我們膨脹操作的效果,代碼如下:

def apply_erosion(image, selem):# Perform erosion on the given image using the structuring element, selemeroded_image = erosion(image, selem)# Display the original and eroded imagesfig, axes = plt.subplots(1, 3, figsize=(15, 10))ax = axes.ravel()ax[0].imshow(selem, cmap='gray', extent=[0, selem.shape[1], 0, selem.shape[0]])ax[0].set_title('Structuring Element', fontsize=20)ax[1].imshow(image, cmap='gray', extent=[0, image.shape[1], 0, image.shape[0]])ax[1].set_title('Original Image', fontsize=20)ax[2].imshow(eroded_image, cmap='gray', extent=[0, image.shape[1], 0, image.shape[0]])ax[2].set_title('Eroded Image', fontsize=20)plt.tight_layout()plt.show()apply_erosion(original_image, selem_cross)

最終膨脹操作的效果如下:
在這里插入圖片描述
觀察上述輸出,可以看到經過膨脹操作后的圖相比原始圖像的擴大版。大家可以通過下列動圖進行更加詳細的理解,樣例圖如下:
在這里插入圖片描述

5. 其他效果

需要注意的是,和腐蝕操作類似,膨脹操作中使用的鄰域大小或結構元素的選擇會對結果產生不同的影響。
這里,如果選擇使用上一篇節中得正方形作為測試結構元素,相應得效果如下:
在這里插入圖片描述

6. 總結

本文重點介紹了和腐蝕操作相反作用得膨脹操作,并通過具體例子進行了原理講解,同時給出了相應得代碼示例。

您學廢了嘛?

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

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

相關文章

macOS CLion 使用 bits/stdc++.h

macOS 下 CLion 使用 bits/stdc.h 頭文件 terminal運行 brew install gccCLion里配置 -D CMAKE_CXX_COMPILER/usr/local/bin/g-11

Visual Studio 2022 中解決使用scanf報錯的方法(一勞永逸)

目錄 【前言】 一、scanf報錯示例 二、解決使用scanf報錯的方法 解決方法1(不推薦) 解決方法2(不推薦) 解決方法3(強烈推薦) 第一步 第二步 第三步 三、效果演示(方法三) …

根據一棵樹的兩種遍歷構造二叉樹

題目 給定兩個整數數組 preorder 和 inorder ,其中 preorder 是二叉樹的先序遍歷, inorder 是同一棵樹的中序遍歷,請構造二叉樹并返回其根節點。 示例 1: 輸入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 輸出: [3,9,20,null,null,…

Unity-Linux部署WebGL項目MIME類型添加

在以往的文章中有提到過使用IIS部署WebGL添加MIME類型使WebGL項目在瀏覽器中能夠正常加載,那么如果咱們做的是商業項目,往往是需要部署在學校或者云服務器上面的,大部分情況下如果項目有接口或者后臺管理系統,后臺基本都會使用Lin…

機器學習筆記:李宏毅ChatGPT Finetune VS Prompt

1 兩種大語言模型:GPT VS BERT 2 對于大語言模型的兩種不同期待 2.1 “專才” 2.1.1 成為專才的好處 Is ChatGPT A Good Translator? A Preliminary Study 2023 Arxiv 箭頭方向指的是從哪個方向往哪個方向翻譯 表格里面的數值越大表示翻譯的越好 可以發現專門做翻…

Ceph入門到精通-Linux下Ceph源碼編譯和GDB調試

Ceph版本:14.2.22 Linux版本:ubuntu-server 18.04 第一部分 下載Ceph源碼 1.1 配置Ceph源碼鏡像源 Ceph源碼是托管在Github上,由于某些原因,國內訪問Github網站很慢,所以需要從其他途徑加速獲取源碼。Github官方給出…

【ubuntu18.04】01-network-manager-all.yaml和interfaces和resolv.conf各有什么區別和聯系

文章目錄 01-network-manager-all.yaml、interfaces 和 resolv.conf 是與網絡配置相關的文件,它們在網絡設置中有著不同的作用和使用方式。 01-network-manager-all.yaml: 這是一個配置文件,通常在 Ubuntu 系統上使用 NetworkManager 進行網絡管理時使用…

ChatGPT?保密嗎?它有哪些潛在風險?如何規避?

自2022年11月公開發布以來,ChatGPT已成為許多企業和個人的必備工具,但隨著該技術越來越多地融入我們的日常生活,人們很自然地想知道:ChatGPT是否是保密的。 問:ChatGPT保密嗎? 答:否&#xff0…

C++11并發與多線程筆記(3)線程傳參詳解,detach()大坑,成員函數做線程函數

C11并發與多線程筆記(3)線程傳參詳解,detach 大坑,成員函數做線程函數 1、傳遞臨時對象作為線程參數1.1 要避免的陷阱11.2 要避免的陷阱21.3 總結 2、臨時對象作為線程參數2.1 線程id概念2.2 臨時對象構造時機抓捕 3、傳遞類對象…

VR時代真的到來了?

業界對蘋果的期待是,打造一臺真正顛覆性的,給頭顯設備奠定發展邏輯底座的產品,而實際上,蘋果只是發布了一臺更強大的頭顯。 大眾希望蘋果回答的問題是“我為什么需要一臺AR或者VR產品?”,但蘋果回答的是“…

從零開始學習 Java:簡單易懂的入門指南之MAth、System(十二)

常見API,MAth、System 1 Math類1.1 概述1.2 常見方法1.3 算法小題(質數)1.4 算法小題(自冪數) 2 System類2.1 概述2.2 常見方法 1 Math類 1.1 概述 tips:了解內容 查看API文檔,我們可以看到API文檔中關于Math類的定義如下: Math類…

每天一道leetcode:300. 最長遞增子序列(動態規劃中等)

今日份題目: 給你一個整數數組 nums ,找到其中最長嚴格遞增子序列的長度。 子序列 是由數組派生而來的序列,刪除(或不刪除)數組中的元素而不改變其余元素的順序。例如,[3,6,2,7] 是數組 [0,3,1,6,2,2,7] …

【JavaEE進階】SpringBoot項目的創建

文章目錄 一. SpringBoot簡介1. 什么是SpringBoot?2. SpringBoot的優點 二. SpringBoot項目創建1. 使用IDEA創建2. 使用網頁創建SpringBoot項目 三. 運行SpringBoot項目 一. SpringBoot簡介 1. 什么是SpringBoot? Spring Boot 是一個用于快速構建基于 Spring 框架的應用程序…

Spring對象裝配

在spring中,Bean的執行流程為啟動spring容器,實例化bean,將bean注冊到spring容器中,將bean裝配到需要的類中。 既然我們需要將bea裝配到需要的類中,那么如何實現呢?這篇文章,將來闡述一下如何實…

SOFABoot——基本使用(筆記)

文章目錄 一、前言二、快速開始2.1 基本搭建2.2 測試是否成功2.3 其他部分日志測試異步啟動 三、SOFABoot的模塊化開發3.1 基于Spring上下文的隔離3.2 Root Application Context3.3 模塊并行化啟動3.4 JVM服務與RPC服務的發布與引用3.5 模塊配置Module-NameRequire-ModuleSprin…

wsl2安裝mysql環境

安裝完mysql后通過如下命令啟動mysql service mysql start 會顯示如下錯誤: mysql: unrecognized service 實際上上面顯示的錯誤是由于mysql沒有啟動成功造成的 我們要想辦法成功啟動mysql才可以 1.通過如下操作就可以跳過密碼直接進入mysql環境 2.如果想找到my…

微服務與Nacos概述-5

引入OpenFeign 添加依賴&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>com.alibaba.cloud</groupId>…

“記賬”很麻煩,看這場競賽中的隊伍與合合信息是如何解決問題的

在我們日常生活中或多或少都會有記賬的情況&#xff0c;以此來對自己的收支和消費習慣進行分析&#xff0c;來幫助自己減少不必要的開支&#xff0c;優化財務決策、合理分配資金&#xff0c;減少財務壓力和不必要的浪費。 但記賬這個動作本身就是一件比較麻煩的。雖然現階段有…

數據結構入門 — 時間復雜度、空間復雜度

前言 數據結構_空間復雜度_時間復雜度講解_常見復雜度對比 本文介紹數據結構中的時間復雜度和空間復雜度 ***文章末尾&#xff0c;博主進行了概要總結&#xff0c;可以直接看總結部分*** 博主博客鏈接&#xff1a;https://blog.csdn.net/m0_74014525 點點關注&#xff0c;后期…

哈夫曼樹(赫夫曼樹、最優樹)詳解

目錄 哈夫曼樹&#xff08;赫夫曼樹、最優樹&#xff09;詳解 哈夫曼樹相關的幾個名詞 什么是哈夫曼樹 構建哈夫曼樹的過程 哈弗曼樹中結點結構 構建哈弗曼樹的算法實現 哈夫曼樹&#xff08;赫夫曼樹、最優樹&#xff09;詳解 哈夫曼樹相關的幾個名詞 路徑&#xff1a;…