以下是一个简单的自适应加权引导滤波分层的 Python 程序:

import cv2
import numpy as np

def adaptiveWeightedGuidedFilter(src, guide, radius, eps):
    h, w = guide.shape[:2]
    padded_guide = cv2.copyMakeBorder(guide, radius, radius, radius, radius, cv2.BORDER_REFLECT)
    padded_src = cv2.copyMakeBorder(src, radius, radius, radius, radius, cv2.BORDER_REFLECT)
    mean_I = cv2.boxFilter(padded_guide, -1, (2*radius+1, 2*radius+1), borderType=cv2.BORDER_REFLECT)
    mean_p = cv2.boxFilter(padded_src, -1, (2*radius+1, 2*radius+1), borderType=cv2.BORDER_REFLECT)
    mean_Ip = cv2.boxFilter(padded_guide * padded_src, -1, (2*radius+1, 2*radius+1), borderType=cv2.BORDER_REFLECT)
    cov_Ip = mean_Ip - mean_I * mean_p
    mean_II = cv2.boxFilter(padded_guide * padded_guide, -1, (2*radius+1, 2*radius+1), borderType=cv2.BORDER_REFLECT)
    var_I = mean_II - mean_I * mean_I
    a = cov_Ip / (var_I + eps)
    b = mean_p - a * mean_I
    mean_a = cv2.boxFilter(a, -1, (2*radius+1, 2*radius+1), borderType=cv2.BORDER_REFLECT)
    mean_b = cv2.boxFilter(b, -1, (2*radius+1, 2*radius+1), borderType=cv2.BORDER_REFLECT)
    mean_a = mean_a[radius:h+radius, radius:w+radius]
    mean_b = mean_b[radius:h+radius, radius:w+radius]
    q = mean_a * guide + mean_b
    return q

def layeredAdaptiveWeightedGuidedFilter(src, guide, radius, eps, levels):
    pyramid_src = [src]
    pyramid_guide = [guide]
    for i in range(levels):
        pyramid_src.append(cv2.pyrDown(pyramid_src[-1]))
        pyramid_guide.append(cv2.pyrDown(pyramid_guide[-1]))
    q = pyramid_src[-1]
    for i in range(levels-1, -1, -1):
        q = adaptiveWeightedGuidedFilter(pyramid_src[i], pyramid_guide[i], radius, eps) + cv2.resize(q, pyramid_src[i].shape[::-1], interpolation=cv2.INTER_LINEAR)
    return q

# 读取原始图像
img = cv2.imread('lena.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 添加高斯噪声
noise = np.random.normal(0, 50, gray.shape)
noisy_gray = gray + noise.astype(np.uint8)

# 自适应加权引导滤波分层
filtered = layeredAdaptiveWeightedGuidedFilter(noisy_gray, noisy_gray, 5, 0.01, 3)

# 显示结果图像
cv2.imshow('Original Image', gray)
cv2.imshow('Noisy Image', noisy_gray)
cv2.imshow('Filtered Image', filtered)
cv2.waitKey(0)
cv2.destroyAllWindows()

这个程序首先定义了一个adaptiveWeightedGuidedFilter()函数,它实现了自适应加权引导滤波器。然后,它定义了一个layeredAdaptiveWeightedGuidedFilter()函数,它实现了自适应加权引导滤波分层。最后,它读取了一张原始图像,为它添加了高斯噪声,并对它进行自适应加权引导滤波分层,最终显示了原始图像、带噪图像和滤波后的图像。

Python 自适应加权引导滤波分层代码实现

原文地址: https://www.cveoy.top/t/topic/mMe0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录