自适应高斯滤波函数python代码
时间: 2023-08-24 11:10:04 浏览: 165
以下是一个自适应高斯滤波函数的Python代码示例:
```python
import cv2
import numpy as np
def adaptive_gaussian_filter(img, ksize, sigma):
# 计算高斯核的尺寸和中心
ksize = int(ksize)
if ksize % 2 == 0:
ksize += 1
center = ksize // 2
# 初始化输出图像
out = np.zeros_like(img)
# 遍历每个像素
for i in range(img.shape[0]):
for j in range(img.shape[1]):
# 计算当前像素的局部窗口
xstart = max(i - center, 0)
xend = min(i + center + 1, img.shape[0])
ystart = max(j - center, 0)
yend = min(j + center + 1, img.shape[1])
window = img[xstart:xend, ystart:yend]
# 计算窗口内像素的均值和方差
mean = np.mean(window)
variance = np.mean((window - mean) ** 2)
# 计算当前像素的自适应高斯核
if variance == 0:
kernel = np.ones((ksize, ksize)) / ksize ** 2
else:
kernel = np.zeros((ksize, ksize))
for x in range(ksize):
for y in range(ksize):
dx = x - center
dy = y - center
kernel[x, y] = np.exp(-(dx ** 2 + dy ** 2) / (2 * variance * sigma ** 2))
kernel /= np.sum(kernel)
# 对窗口内的像素进行滤波
out[i, j] = np.sum(kernel * window)
return out
```
该函数接受三个参数:输入图像、高斯核的大小和sigma值。它首先计算每个像素的局部窗口,然后计算窗口内像素的均值和方差。接下来,它计算当前像素的自适应高斯核,并使用该核对窗口内的像素进行滤波。最后,它返回输出图像。
阅读全文