網站首頁 編程語言 正文
這篇文章將繼續介紹開運算、閉運算和梯度運算。數學形態學(Mathematical Morphology)是一種應用于圖像處理和模式識別領域的新方法。數學形態學(也稱圖像代數)表示以形態為基礎對圖像進行分析的數學工具,其基本思想是用具有一定形態的結構元素去量度和提取圖像中對應形狀以達到對圖像分析和識別的目的。
一.圖像開運算
開運算一般能平滑圖像的輪廓,削弱狹窄部分,去掉較細的突出。閉運算也是平滑圖像的輪廓,與開運算相反,它一般熔合窄的缺口和細長的彎口,去掉小洞,填補輪廓上的縫隙。圖像開運算是圖像依次經過腐蝕、膨脹處理的過程,圖像被腐蝕后將去除噪聲,但同時也壓縮了圖像,接著對腐蝕過的圖像進行膨脹處理,可以在保留原有圖像的基礎上去除噪聲。其原理如圖1所示。
設A是原始圖像,B是結構元素圖像,則集合A被結構元素B做開運算,記為A?B,其定義為:
換句話說,A被B開運算就是A被B腐蝕后的結果再被B膨脹。圖像開運算在OpenCV中主要使用函數morphologyEx(),它是形態學擴展的一組函數,其函數原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)
- src表示原始圖像
- cv2.MORPH_OPEN表示圖像進行開運算處理
- kernel表示卷積核,可以用numpy.ones()函數構建
圖像開運算的代碼如下所示:
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np #讀取圖片 src = cv2.imread('test01.png', cv2.IMREAD_UNCHANGED) #設置卷積核 kernel = np.ones((5,5), np.uint8) #圖像開運算 result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel) #顯示圖像 cv2.imshow("src", src) cv2.imshow("result", result) #等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()
輸出結果如圖2所示,左邊為原始圖像,右邊為處理后的圖像,可以看到原始圖形中的噪聲點被去除了部分。
但處理后的圖像中仍然有部分噪聲,如果想更徹底地去除,可以將卷積設置為10×10的模板,代碼如下所示:
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np #讀取圖片 src = cv2.imread('test01.png', cv2.IMREAD_UNCHANGED) #設置卷積核 kernel = np.ones((10,10), np.uint8) #圖像開運算 result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel) #顯示圖像 cv2.imshow("src", src) cv2.imshow("result", result) #等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()
運行結果如圖3所示:
二.圖像閉運算
圖像閉運算是圖像依次經過膨脹、腐蝕處理的過程,先膨脹后腐蝕有助于過濾前景物體內部的小孔或物體上的小黑點。其原理如圖4所示:
設A是原始圖像,B是結構元素圖像,則集合A被結構元素B做開運算,記為A·B,其定義為:
換句話說,A被B閉運算就是A被B膨脹后的結果再被B腐蝕。圖像開運算在OpenCV中主要使用函數morphologyEx(),其函數原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)
- src表示原始圖像
- cv2.MORPH_CLOSE表示圖像進行閉運算處理
- kernel表示卷積核,可以用numpy.ones()函數構建
圖像閉運算的代碼如下所示:
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np #讀取圖片 src = cv2.imread('test02.png', cv2.IMREAD_UNCHANGED) #設置卷積核 kernel = np.ones((10,10), np.uint8) #圖像閉運算 result = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel) #顯示圖像 cv2.imshow("src", src) cv2.imshow("result", result) #等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()
輸出結果如圖5所示,它有效地去除了圖像中間的小黑點(噪聲)。
三.圖像梯度運算
圖像梯度運算是圖像膨脹處理減去圖像腐蝕處理后的結果,從而得到圖像的輪廓,其原理如圖6所示,(a)表示原始圖像,(b)表示膨脹處理后的圖像,(c)表示腐蝕處理后的圖像,(d)表示圖像梯度運算的效果圖。
在Python中,圖像梯度運算主要調用morphologyEx()實現,其中參數cv2.MORPH_GRADIENT表示梯度處理,函數原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)
- src表示原始圖像
- cv2.MORPH_GRADIENT表示圖像進行梯度運算處理
- kernel表示卷積核,可以用numpy.ones()函數構建
圖像梯度運算的實現代碼如下所示。
# -*- coding: utf-8 -*- import cv2 import numpy as np #讀取圖片 src = cv2.imread('test03.png', cv2.IMREAD_UNCHANGED) #設置卷積核 kernel = np.ones((10,10), np.uint8) #圖像梯度運算 result = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel) #顯示圖像 cv2.imshow("src", src) cv2.imshow("result", result) #等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()
圖像梯度運算處理的結果如圖7所示,左邊為原始圖像,右邊為處理后的效果圖。
四.總結
本文主要介紹圖像形態學處理,詳細講解了圖像開運算、閉運算和梯度運算。數學形態學是一種應用于圖像處理和模式識別領域的新方法,其基本思想是用具有一定形態的結構元素去量度和提取圖像中對應形狀以達到對圖像分析和識別目的。
原文鏈接:https://blog.csdn.net/Eastmount/article/details/125178579
相關推薦
- 2022-02-20 Android?WebView實現全屏播放視頻_Android
- 2022-11-23 Python面向對象的內置方法梳理講解_python
- 2022-09-12 docker?清理緩存腳本解析_docker
- 2022-08-15 Python自制隨機數生成算法
- 2022-05-17 ubuntu安裝curl時,出現configure: error: select TLS backe
- 2023-01-12 利用C#實現進程管理器_C#教程
- 2022-04-14 Python實現簡單購物車小程序_python
- 2022-09-08 pytorch?tensor計算三通道均值方式_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支