自写函数–高斯滤波算法
高斯噪声
高斯噪声是指它的概率密度函数服从高斯(即正态分布)分布
-
一维高斯函数
-
二维高斯函数
-
高斯滤波作用
高斯滤波器对于抑制服从正态分布的噪声非常有效 -
什么是高斯滤波器
高斯滤波器是一种线性滤波器,能够有效抑制噪声
算法步骤
第一步:根据高斯函数计算模板每个点的权重设定σ的值,假定σ=1.5,模版大小为3*3
- 计算最终的权重矩阵(归一化)
第二步:每个点乘以模版的权重值
第三步:求和
import cv2 as cv
import math
import numpy as np
img_g = np.array([[ 14,15,16],
[24,25,26],
[34,35,36]])
img_g
# 计算高斯卷积核
def gausskernel(size):
sigma=1.5
gausskernel=np.zeros((size,size),np.float32)
for i in range (size):
for j in range (size):
norm = math.pow(i-1,2)+pow(j-1,2)
coe = 1/(2*math.pi*math.pow(sigma,2))
gausskernel[i,j]=coe*math.exp(-norm/(2*math.pow(sigma,2))) #
print(gausskernel)
sum_= np.sum(gausskernel)
print(sum_)
kernel=gausskernel/sum_
return kernel
# 高斯滤波
def gauss(img):
h=img.shape[0]
w=img.shape[1]
img1=np.zeros((h,w),np.float16)
kernel=gausskernel(3) # 计算高斯卷积核
for i in range (1,h-1):
for j in range (1,w-1):
sum_=0
for k in range(-1,2):
for l in range(-1,2):
ret = img[i+k,j+l]*kernel[k+1,l+1]
sum_+=img[i+k,j+l]*kernel[k+1,l+1] # 高斯滤波
print(ret)
img1[i,j]=sum_
return img1
#
gau = gauss(img_g)
gau
结果