圖像預(yù)處理
膨脹腐蝕概述
兩個基本的形態(tài)學(xué)操作是腐 和膨脹。他們 的變體構(gòu)成了開運算 ,閉運算, 梯度等。
根據(jù)卷積核的大小前景的所有像素會腐 掉 變?yōu)?0 ,所以前景物體會變小整幅圖像的白色區(qū)域會減少。
對于去除白噪聲很有用 也可以用來斷開兩個 在一塊的物體等。
函數(shù)原型:
cv2.dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)
?src: 輸入原圖像(建議為二值圖)
?dst: 輸出圖像要求和src一樣的尺寸和類型
?kernel: 膨脹操作的核, 當(dāng)為NULL時, 表示使用參考點位于中心的3x3的核
?anchor: 錨的位置, 默認(rèn)值Point(-1,-1), 表示位于中心
?interations: 膨脹的次數(shù)
?borderType: 邊界模式, 一般采用默認(rèn)值
?borderValue: 邊界值, 一般采用默認(rèn)值
代碼示例:
import cv2
import numpy as np
img = cv2.imread(‘…/datas/snowqueen.png’, 0)
cv2.imshow(‘j.png’, img)
print(img.shape)
kernel = np.ones((7, 7), np.uint8)
kernel17 = np.ones((1, 7), np.uint8)
kernel71 = np.ones((7, 1), np.uint8)
dilation = cv2.dilate(img, kernel, iterations=1)
dilation17 = cv2.dilate(img, kernel17, iterations=1)
dilation71 = cv2.dilate(img, kernel71, iterations=1)
cv2.imshow(‘dilation’, np.hstack([img, dilation, dilation17, dilation71]))
cv2.moveWindow(‘dilation’, x=img.shape[1], y=0)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import numpy as np
img = cv2.imread('../datas/snowqueen.png', 0)
cv2.imshow('j.png', img)
print(img.shape)
kernel = np.ones((7, 7), np.uint8)
kernel17 = np.ones((1, 7), np.uint8)
kernel71 = np.ones((7, 1), np.uint8)
dilation = cv2.dilate(img, kernel, iterations=1)
dilation17 = cv2.dilate(img, kernel17, iterations=1)
dilation71 = cv2.dilate(img, kernel71, iterations=1)
cv2.imshow('dilation', np.hstack([img, dilation, dilation17, dilation71]))
cv2.moveWindow('dilation', x=img.shape[1], y=0)
cv2.waitKey(0)
cv2.destroyAllWindows()
原圖:
效果圖:
2)腐蝕—cv2.erode()
與腐蝕相反 與卷積核對應(yīng)的原圖像的像素值中只有一個是 1 中心元 素的像素值就是 1。所以 該操作會增加圖像中的白色區(qū)域 前景 。一般在去噪聲時先用腐再用膨脹。因為腐在去掉白噪聲的同時 也會使前景對變小。所以我們再對他 膨脹。 時噪聲已經(jīng) 去 了 不會再回來了 但是 前景 在并會增加。膨脹也可以用來 接兩個分開的物體。
函數(shù)原型:
cv2.erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)
代碼示例:
import cv2
import numpy as np
img = cv2.imread(‘…/datas/snowqueen.png’, 0)
cv2.imshow(‘j.png’, img)
print(img.shape)
#您可以將內(nèi)核看作是一個小矩陣,我們在圖像上滑動以進行(卷積)操作,例如模糊,銳化,邊緣檢測或其他圖像處理操作。
kernel = np.ones((5, 5), np.uint8)
#cv2.getStructuringElement(shape, ksize)
erosion = cv2.erode(img, kernel, iterations=1)
dilation = cv2.dilate(img, kernel, iterations=1)
print(img.shape, erosion.shape, dilation.shape)
cv2.imshow(‘erode’, np.hstack([img, erosion, dilation]))
cv2.moveWindow(‘erode’, x=img.shape[1], y=0)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import numpy as np
img = cv2.imread('../datas/snowqueen.png', 0)
cv2.imshow('j.png', img)
print(img.shape)
#您可以將內(nèi)核看作是一個小矩陣,我們在圖像上滑動以進行(卷積)操作,例如模糊,銳化,邊緣檢測或其他圖像處理操作。
kernel = np.ones((5, 5), np.uint8)
# cv2.getStructuringElement(shape, ksize)
erosion = cv2.erode(img, kernel, iterations=1)
dilation = cv2.dilate(img, kernel, iterations=1)
print(img.shape, erosion.shape, dilation.shape)
cv2.imshow('erode', np.hstack([img, erosion, dilation]))
cv2.moveWindow('erode', x=img.shape[1], y=0)
cv2.waitKey(0)
cv2.destroyAllWindows()
形態(tài)學(xué)其他操作:
開運算、閉運算、頂帽、黒帽、形態(tài)學(xué)梯度
核心函數(shù):
cv2.morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)
?src: 輸入原圖像
?dst: 輸出圖像要求和src一樣的尺寸和類型
?op: 表示形態(tài)學(xué)運算的類型, 可以取如下值:
CV2 .MORPH DILATE
CV2 .MORPH OPEN # 開運算
CV2 .MORPH_ TOPHAT #頂帽
CV2 .MORPH_ ERODE
CV2.MORPH CLOSE #閉運算
CV2 .MORPH BLACKHAT #黒帽
CV2.MORPH_ GRADIENT #形態(tài)學(xué)梯度
?kernel: 形態(tài)學(xué)運算內(nèi)核, 若為NULL, 表示使用參考點位于中心的3x3內(nèi)核, 一般使用getStruecuringElement函數(shù)獲得
?anchor: 錨的位置, 默認(rèn)值Point(-1,-1), 表示位于中心
?interations: 迭代使用函數(shù)的次數(shù), 默認(rèn)為1
?borderType: 邊界模式, 一般采用默認(rèn)值
?borderValue: 邊界值, 一般采用默認(rèn)值
1)開運算(open)
基于膨脹腐蝕基礎(chǔ), 利用cv2.morphologyEx()函數(shù)進行操作
開運算是先腐蝕后膨脹的過程, 開運算可以用來消除小物體, 在纖細點處分離物體, 并在平滑較大物體邊界的同時不明顯的改變其面積。
2)閉運算(close)
閉運算是先膨脹后腐蝕的過程, 閉運算可以用來消除小型黑洞(黑色區(qū)域)。
3)形態(tài)學(xué)梯度(Gradient)
形態(tài)學(xué)梯度是膨脹圖與腐蝕圖之差, 對二值圖可以將團塊(blob)邊緣凸顯出來, 可以用其來保留邊緣輪廓。
4)頂帽(Top Hat)
頂帽運算也被稱為”禮帽”, 是開運算結(jié)果和原圖像做差的結(jié)果, 可以用來分離比鄰近點亮一些的斑塊。文章來源:http://www.zghlxwxcb.cn/news/detail-410420.html
5)黒帽(Black Hat)
黑帽運算是原圖像和開運算做差的結(jié)果, 可以用來分離比鄰近點暗一些的斑塊。文章來源地址http://www.zghlxwxcb.cn/news/detail-410420.html
到了這里,關(guān)于圖像預(yù)處理方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!