高斯滤波
二维情况下的高斯滤波分布
不过一般情况下都是让方向和方向的方差相等
先看原图
plt.imshow(img_d1)
这个颜色是因为opencv的默认格式为BGR
在opencv里调用API如下
# 这里设置方差都为0.8,你也可以让两个方向的方差不等 plt.imshow(cv.GaussianBlur(img_d1_copy, (5,5), 0.8))
原理代码
# Gaussian filter def gaussian_filter_zp(img, K_size=5, sigma=0.8): if len(img.shape) == 3: H, W, C = img.shape else: img = np.expand_dims(img, axis=-1) H, W, C = img.shape ## Zero padding pad = K_size // 2 print(pad) out = np.zeros((H + pad * 2, W + pad * 2, C), dtype=np.float) out[pad: pad + H, pad: pad + W] = img.copy().astype(np.float) ## prepare Kernel K = np.zeros((K_size, K_size), dtype=np.float) for x in range(-pad, -pad + K_size): for y in range(-pad, -pad + K_size): K[x + pad, y + pad] = np.exp( -(x ** 2 + y ** 2) / (2 * (sigma ** 2))) K /= (sigma * 2 * np.pi) K /= K.sum() print(K) tmp = out.copy() # filtering for y in range(H): for x in range(W): for c in range(C): out[pad + y, pad + x, c] = np.sum(K * tmp[y: y + K_size, x: x + K_size, c]) out = out[pad: pad + H, pad: pad + W].astype(np.uint8) return out
上诉代码分两部分,第一部分是根据给定的K_size和方差计算内核
K_size=5, sigma=0.8情况下的内核为
[[0.00048091 0.00501119 0.01094545 0.00501119 0.00048091] [0.00501119 0.0522178 0.11405416 0.0522178 0.00501119] [0.01094545 0.11405416 0.2491172 0.11405416 0.01094545] [0.00501119 0.0522178 0.11405416 0.0522178 0.00501119] [0.00048091 0.00501119 0.01094545 0.00501119 0.00048091]]
第二部分是一个卷积的操作,应该叫相关,相关操作之前先把图像翻转就是卷积了
如果你嫌麻烦,opencv有卷积的API
# 这个K就是上面计算出来的高斯核 Gaussian_k = K.copy() plt.imshow(cv.filter2D(img_d1_copy, -1, Gaussian_k))
执行代码
plt.subplot(131),plt.imshow(img_d1_copy),plt.title('Original') plt.xticks([]), plt.yticks([]) plt.subplot(132),plt.imshow(cv.GaussianBlur(img_d1_copy, (3,3), 1, 1)),plt.title('Gaussian_opencv') plt.xticks([]), plt.yticks([]) plt.subplot(133), plt.imshow(gaussian_filter_zp(img_d1_copy)),plt.title('gaussian_filter_zp') plt.xticks([]), plt.yticks([])
中值滤波
中值滤波和均值滤波都很简单
原理
在图像上给出一个核的大小,计算一个核内的全部像素值,然后把核中心的像素替换为整个核内像素的中值
Opencv_API
plt.imshow(cv.medianBlur(img_d1_copy, 5))
欢迎一起来参与leetcode刷题项目
刷题的GitHub: github链接.
来源:51CTO
作者:漂流瓶zps
链接:https://blog.csdn.net/qq_33154865/article/details/100766024