卷積核----圖片邊緣濾波器

 

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

def main():
    im = Image.open("D:\\temp\\img\\bw.jpg")

    res=conv2(im,kv).astype(dtype="uint8")
    print(res)
    img2=Image.fromarray(res)
    img2.show()
#計算結果可能不在[0,255]之間
def Relu2(a):
    if a<0:
        return 0
    if a>255:
        return 255
#被卷積的圖片,卷積核
def conv2(im,kk):
    matrix = np.asarray(im)
    m1 = matrix[:, :, 0]
    m2 = matrix[:, :, 1]
    m3 = matrix[:, :, 2]
    matrix1=conv(m1,kk)
    matrix2=conv(m2,kk)
    matrix3=conv(m3,kk)
    return np.dstack((matrix1,matrix2,matrix3))
#總體邊緣濾波器
ke=np.array([
    [0,-4,0],[-4,16,-4],[0,-4,0]
])
#水平邊緣濾波器
kh=np.array([
    [1,2,1],[0,0,0],[-1,-2,-1]
])
#垂直邊緣濾波器
kv=np.array([
    [1,0,-1],[2,0,-2],[1,0,-1]
])

#被卷積一維矩陣,卷積核
def conv(mx,kmx):
    v1=mx.shape[0]
    v2=mx.shape[1]
    kv1=kmx.shape[0]
    kv2=kmx.shape[1]
    l1=v1-kv1
    l2=v2-kv2
    res=np.zeros((l1,l2))
    for i in range(l1):
        for j in range(l2):
            res[i][j]=Relu2((mx[i:i+kv1,j:j+kv2]*kmx).sum())
    return res
main()

圖像讀出來是個三維矩陣,對每一個通道使用不一樣卷積核卷積,觀察效果ui

 

效果:spa

總體邊緣濾波器:code

水平邊緣濾波器:blog

垂直邊緣濾波器:圖片

相關文章
相關標籤/搜索