Python圖像形態學處理:腐蝕、膨脹、禮帽、黑帽……

文章目錄

    • 二值形態學
    • 灰度形態學

python圖像處理教程:初步📷插值變換

最基礎的形態學操作有四個,分別是腐蝕、膨脹、開計算和閉計算,【scipy.ndimage】分別實現了二值數組和灰度數組的這四種運算。而針對灰度圖像,【scipy.ndimage】還提供了禮帽、黑帽、形態學梯度和拉普拉斯梯度等操作。

二值形態學

二值圖像中只有0和1兩種元素,故而可將其表示為元素值為 1 1 1的元素位置集合 A = { ( i , j ) ∣ A i j = 1 } A=\{(i,j)\vert A_{ij}=1\} A={(i,j)Aij?=1},則腐蝕和膨脹可表示為

A ? B = { ( i , j ) ∣ B i j ? A } A ⊕ B = { ( i , j ) ∣ B i j ∪ A =? ? } \begin{aligned} A\ominus B&=\{(i,j)|B_{ij}\subseteq A\}\\ A\oplus B&=\{(i,j)|B_{ij}\cup A\not=\varnothing\} \end{aligned} A?BAB?={(i,j)Bij??A}={(i,j)Bij?A=?}?

其中 B i j B_{ij} Bij?表示當 B B B的原點在 ( i , j ) (i,j) (i,j)處時,B中所有為1的值的集合。

用結構B腐蝕A,當B的原點平移到圖像A的像元 ( i , j ) (i,j) (i,j)時,若B完全被二者的重疊區域所包圍,則賦值為1,否則賦值為0。更直觀的例子是,如果B中為1的元素位置上,對應的A的像素值也都為1,則 ( i , j ) (i,j) (i,j)處為1。膨脹則與之相反。

開運算和閉運算則是腐蝕、膨脹的疊加,開運算是先腐蝕后膨脹;閉運算是先膨脹后腐蝕。這四種運算的差別如下

在這里插入圖片描述

二值圖像的腐蝕、膨脹、開、閉運算分別由函數binary_erosion, binary_dilation, binary_opening, binary_closing來是實現,上述繪圖代碼如下。

import numpy as np
import matplotlib.pyplot as plt
import scipy.ndimage as snx = np.zeros([20,20])
x[5:15, 5:15] = 1
x[10:12,10:12] = 0
x[2:4, 2:4] = 1func = {"origin": lambda x : x,"erosion": sn.binary_erosion,"dilation": sn.binary_dilation,"opening": sn.binary_opening,"closing": sn.binary_closing
}fig = plt.figure()
for i,key in enumerate(func):ax = fig.add_subplot(2,3,i+1)ax.imshow(func[key](x))plt.title(key)plt.show()

灰度形態學

【ndimage】中為灰度圖像也提供了腐蝕、膨脹、開、閉運算,只需將二值函數中的binary替換為grey即可。此外,針對灰度圖像,【ndimage】還額外提供了四種運算,如下表所示

函數名稱備注
morphological_gradient形態學梯度膨脹圖減去腐蝕圖
white_tophat禮帽(頂帽)運算原圖減去開運算
black_tophat黑帽(底帽)運算原圖減去閉運算
morphological_laplace拉普拉斯變換

這些方法的差異如下

在這里插入圖片描述
繪圖代碼如下。

from scipy.misc import ascent
img = ascent()funcs = {"original": lambda x, tmp:x,"erosion" : sn.grey_erosion,"dilation" : sn.grey_dilation,"opening" : sn.grey_opening,"closing" : sn.grey_closing
}fig = plt.figure()
for i, key in enumerate(funcs):ax = fig.add_subplot(2,5,i+1)plt.imshow(funcs[key](img, (10,10)), cmap=plt.cm.gray)plt.axis('off')plt.title(key)ori = img[350:500, 400:500]
funcs = {"ori": lambda x, tmp:x,"white" : sn.white_tophat,"black" : sn.black_tophat,"gradient" : sn.morphological_gradient,"laplace" : sn.morphological_laplace,
}for i, key in enumerate(funcs):ax = fig.add_subplot(2,5,i+6)plt.imshow(funcs[key](ori, (5,5)), cmap=plt.cm.gray)plt.title(key)plt.axis('off')plt.show()

參數列表

二值函數和灰度函數的參數并不相同,下面以closing運算為例,二值和灰度函數的所有參數,除了輸入input之外,二者共有的參數有

  • structure 為數組類型,表示構造元素,可以理解為是卷積模板
  • output 與輸入相同維度的數組,可以存下結果
  • orgin 過濾器設置,默認為0

二值形態學濾波的其他參數如下

binary_closing(input, iterations=1, mask=None, border_value=0, brute_force=False)

其中

  • iterations 執行次數
  • mask 掩模數組,為bool類型的數組,對應False的位置將不會改變
  • border_value 邊緣處的值
  • brute_force 如果為False,則只有上次迭代中發生變化的值才會更新
grey_closing(input, size=None, footprint=None, mode='reflect', cval=0.0)
  • size 為濾波模板
  • mode 可選reflect,constant,nearest,mirror, wrap,邊緣填充方式
  • cval 邊緣填充值

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

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

相關文章

Office/WPS 好用的PPT插件-智能選擇布局

軟件介紹 PPT大珩助手是一款全新設計的Office PPT插件,它是一款功能強大且實用的PPT輔助工具,能夠輕松幫助您修改、優化和管理幻燈片。憑借豐富的功能和用戶友好的界面,PPT大珩助手能夠助力您打造出精美而專業的演示文稿。我們致力于為用戶提…

Flutter學習7 - Dart 泛型

1、泛型類 //泛型類 class Cache<T> {final Map<String, T> _cache {};void saveData(String key, T value) {_cache[key] value;}//泛型方法T? getData(String key) {return _cache[key];} }void main() {Cache<int> cache1 Cache();const String name…

NGINX的重寫與反向代理機制解析

目錄 引言 一、重寫功能 &#xff08;一&#xff09;if指令 1.判斷訪問使用的協議 2.判斷文件 &#xff08;二&#xff09;return指令 1.設置返回狀態碼 2.返回指定內容 3.指定URL &#xff08;三&#xff09;set指令 1.手動輸入變量值 2.調用其它變量值為自定義變…

RISC-V特權架構 - CSR寄存器

RV32/64 特權架構 - CSR寄存器 1 CSR地址空間2 CSR定義2.1 用戶級2.2 監管級2.3 超級監管級2.4 機器級 3 CSR訪問3.1 CSRRW3.2 CSRRS3.3 CSRRC3.4 CSRRWI3.5 CSRRSI3.6 CSRRCI 本文屬于《 RISC-V指令集基礎系列教程》之一&#xff0c;歡迎查看其它文章。 1 CSR地址空間 RISC&…

房貸計算器微信小程序原生語言

微信小程序: 房貸計算器 效果: 輸入 300萬 結果 還款明細 一共有3個頁面 1、輸入頁面 2、結果頁面 3、詳情頁面 1 index頁面 index.wxml文件 <view class="text-black"><!--房屋總價--><view class="cu-bar bg-white solid-bottom"&…

TCP/IP狀態遷移

TCP&#xff08;傳輸控制協議&#xff09;是一種面向連接的流式控制協議&#xff0c;它定義了不同的狀態以管理通信過程中的連接。TCP 狀態遷移描述了 TCP 連接在不同狀態之間的轉換過程&#xff0c;常見的 TCP 狀態包括 CLOSED、LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、…

免費下載《金融行業數據安全交換解決方案白皮書》

金融行業包括商業銀行業務、證券業務、保險業務、基金業務、信托業務等&#xff0c;因此數據類型多種多樣&#xff0c;并且數據涉及主體眾多&#xff0c;應用場景上較為多樣復雜&#xff0c;在數據交換上存在安全、合規、可控、可靠、高效等需求。 金融行業會面臨哪些數據安全…

IIS發布PHP網站字體404解決辦法

最近在使用 IIS 發布 PHP 網站時&#xff0c;我遇到了一個前端問題&#xff0c;即字體庫文件 404 錯誤。這個問題的根本原因是 IIS 未能正確識別字體文件類型&#xff0c;導致瀏覽器在加載頁面時無法正確獲取所需字體資源&#xff0c;進而觸發了404錯誤。這樣的問題會導致網站頁…

npm install 報錯常見的解決方法

npm install 報錯的情況有很多種&#xff0c;每種錯誤的具體解決方案也有所不同。這里我將匯總一些常見的npm install報錯及其解決辦法&#xff1a; 1. 下載速度慢/網絡問題 解決辦法&#xff1a;更換npm包的鏡像源至國內鏡像&#xff0c;如淘寶npm鏡像&#xff1a;npm confi…

Javascript:輸入輸出

目錄 一.前言 二.正文 1.輸出 2.輸入 3.字面量 概念&#xff1a; 三.結語 一.前言 Javascript作為運行瀏覽器的語言&#xff0c;對于學習前端的同學來說十分重要&#xff0c;那么從現在開始我們將開始介紹有關 Javascript。 二.正文 1.輸出 document.write() : 向body內…

第十四篇【傳奇開心果系列】Python的文本和語音相互轉換庫技術點案例示例:深度解讀Azure Cognitive Services個性化推薦系統

傳奇開心果博文系列 系列博文目錄Python的文本和語音相互轉換庫技術點案例示例系列 博文目錄前言一、個性化推薦系統介紹和關鍵功能以及優勢解說二、雛形示例代碼三、個性化推薦示例代碼四、實時推薦示例代碼五、多種推薦算法示例代碼六、易于集成示例代碼七、數據安全和隱私保…

C# DLL實現泄露實驗

先說結論&#xff1a;如果應用程序項目中使用直接引用的形式調用動態鏈接庫&#xff0c;當動態鏈接庫是在調試模式生成的情況下&#xff0c;即使應用程序以發布模式生成&#xff0c;跟隨應用程序一同生成的動態鏈接庫仍為調試模式&#xff0c;會引發DLL實現泄露問題&#xff1b…

Google Genie:創意互動環境

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

cJSON讀寫數據例子

cJSON使用案例代碼。 #include <stdio.h> #include <stdlib.h> #include "../cJson/cJSON.h" int main() { FILE* jsonFile fopen("data.json", "r"); if (jsonFile) { fseek(jsonFile, 0, SEEK_END); i…

C++的一些細節技巧

列表和數組的區別 【C】list使用 1.C中怎么把字符串放到list&#xff1a; 在C中將字符串存入列表&#xff08;List&#xff09;可以使用標準庫的std::list<std::string>。下面是示例代碼&#xff1a; #include <iostream> #include <list> #include <st…

pt模型轉換為onnx的作用,直接用pt模型去檢測可以嗎

將PyTorch模型轉換為ONNX模型的作用主要在于提高模型的可移植性和兼容性&#xff0c;同時不能直接用PyTorch模型去檢測的原因可能涉及到環境配置、性能優化等方面。 首先&#xff0c;關于將PyTorch模型轉換為ONNX模型的作用&#xff0c;ONNX&#xff08;Open Neural Network E…

day57 集合 List Set Map

List實現類 List接口特點&#xff1a;元素有序 可重復 Arraylist 可變數組 jdk 8 以前Arraylist容量初始值10 jdk8 之后初始值為0&#xff0c;添加數據時&#xff0c;容量為10&#xff1b; ArrayList與Vector的區別&#xff1f; LinkList&#xff1a;雙向鏈表 優點&#xff1…

智慧工地物聯網云平臺APP源碼:監管端、工地端、危大工程、智慧大屏

目錄 技術說明 智慧工地 服務對象&#xff1a;項目現場 企業項目管理 服務對象&#xff1a;建設領域企業 政府工地監管 服務對象&#xff1a;全國各省建設領域政府機構 勞務實名制管理解決方案 綠色施工解決方案 視頻監控解決方案 塔機安全監控解決方案 施工升降機安…

Windows安裝Docker 容器教程(轉載)

Windows安裝Docker 容器教程 Docker Desktop - WSL distro terminated abruptlyA WSL distro Docker Desktop relies on has exited une Docker Desktop - Unexpected WSL error

【tableau學習筆記】tableau無法連接數據源

【tableau學習筆記】tableau無法連接數據源 背景&#xff1a; 學校講到Tableau&#xff0c;興奮下載Kaggle Excel&#xff0c;一看后綴CSV&#xff0c;導入Tableau發現報錯“tableau無法連接數據源”&#xff0c;自作聰明改為后綴XLSX&#xff0c;bug依舊。 省流&#xff1a…