Python OpenCV example: Schmid filter

#coding:utf-8
'''
Schmid滤波
参考:https://blog.csdn.net/xiaowei_cqu/article/details/25131473
'''
import cv2
import numpy as np
import math

def schmid_kernel(tao,sigma):
    r = float(sigma / (4.0 * tao))
    sigma2 = float(sigma * sigma)

    half_filter_size = 10
    filter_size = half_filter_size * 2 + 1

    schmid = np.zeros((filter_size,filter_size),np.float32)
    filter_sum = 0.0
    for i in range(filter_size):
        #s = schmid[i,:]
        for j in range(filter_size):
            x = i - half_filter_size
            y = j - half_filter_size

            r = math.sqrt(x * x + y * y)

            tmp = 2.0 * math.pi * tao * r / sigma
            tmp2 = float(r * r / (2.0 * sigma2))

            schmid[i,j] = math.cos(tmp) * math.exp(-tmp2)
            filter_sum += schmid[i,j]
    
    if np.abs(filter_sum - 0.0) < 1e-6:
        return schmid
    
    for i in range(filter_size):
        #s = schmid[i,:]
        for j in range(filter_size):
            schmid[i,j] /= filter_sum
    
    return schmid

src = cv2.imread('datas/face.jpg')
kernel = schmid_kernel(4,2)
# print('kernel = \n',kernel)
dist = np.zeros_like(src)
cv2.filter2D(src, -1, kernel, dist)

cv2.imshow('src',src)
cv2.imshow('dst',dist)

cv2.waitKey()
cv2.destroyAllWindows()

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325048804&siteId=291194637