做資源下載網(wǎng)站用什么工具山東建站管理系統(tǒng)
提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
文章目錄
- 一、梯度的概念
- 二、梯度的應(yīng)用
- 三、梯度如何實(shí)現(xiàn)
一、梯度的概念
形態(tài)學(xué)梯度(Morphological Gradient)是數(shù)字圖像處理中的一種基本操作,用于檢測(cè)圖像中的邊緣和輪廓。它結(jié)合了形態(tài)學(xué)膨脹(Dilation)和形態(tài)學(xué)腐蝕(Erosion)兩種基本操作的結(jié)果,從而得到一個(gè)圖像的邊緣信息。
二、梯度的應(yīng)用
現(xiàn)在有個(gè)問題請(qǐng)大家想一下,上面我們提到了梯度可以得到圖像的邊緣信息,那我們通過前幾節(jié)的課程想一下 梯度是如何實(shí)現(xiàn)的?
例如我現(xiàn)在有個(gè)圓,我如何得到圓的邊緣?
我如果把這個(gè)圓給膨脹一下,這個(gè)圓就變大了一圈,我再給腐蝕一下,圓又變小了,如果拿膨脹減去腐蝕的 不就是邊緣了嗎。
那有人可能又問了:膨脹過后減去原圖不也能得到邊緣嗎,為什么還要在腐蝕一下在減呢?
其實(shí)膨脹減去原圖也能得到邊緣,但是這和膨脹減去腐蝕是有差距的:
當(dāng)我們將膨脹操作的結(jié)果減去原始圖像時(shí),實(shí)際上得到的是原始圖像中比周圍更亮的區(qū)域。這是因?yàn)榕蛎洸僮鲿?huì)擴(kuò)大圖像中較亮的區(qū)域,而減去原始圖像后,差異部分就是原始圖像中相對(duì)較亮的區(qū)域。因此,這樣的操作會(huì)突出原始圖像中的亮部分,而不是物體的邊緣。
對(duì)于檢測(cè)邊緣,我們需要考慮的是圖像中亮暗交界處的變化,而不僅僅是圖像中較亮的區(qū)域。形態(tài)學(xué)梯度通過膨脹和腐蝕操作的差異來捕獲這種變化,因?yàn)樗紤]了物體與背景之間的差異,即使在較暗的物體周圍也能有效地檢測(cè)到邊緣。
因此,直接將膨脹操作的結(jié)果減去原始圖像并不適合用于突出圖像的邊緣信息,而形態(tài)學(xué)梯度通過膨脹減去腐蝕來更準(zhǔn)確地實(shí)現(xiàn)這一目的。
三、梯度如何實(shí)現(xiàn)
import cv2
import numpy as np# 讀取圖像
image = cv2.imread('yunfeng.jpg', cv2.IMREAD_GRAYSCALE)# 定義結(jié)構(gòu)元素
kernel = np.ones((5,5), np.uint8)# 膨脹操作
dilated = cv2.dilate(image, kernel, iterations=1)# 腐蝕操作
eroded = cv2.erode(image, kernel, iterations=1)# 形態(tài)學(xué)梯度
gradient = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel)# 顯示原始圖像、膨脹結(jié)果、腐蝕結(jié)果和形態(tài)學(xué)梯度結(jié)果
cv2.imshow('Original 、', image)
cv2.imshow('Dilated ', dilated)
cv2.imshow('Eroded ', eroded)
cv2.imshow('Morphological', gradient)cv2.waitKey(0)
cv2.destroyAllWindows()
上面代碼對(duì)圖像腐蝕和膨脹是為了看對(duì)比效果,實(shí)際上梯度是通過morphologyEx MORPH_GRADIENT這個(gè)參數(shù)實(shí)現(xiàn)的。
我們看下最終效果: