灰度图引导滤波(guided_filter)

引导滤波(Guided Filter)是一种图像处理方法,它可以在保持图像细节的同时,去除图像中的噪声和平滑图像。该方法通常用于图像降噪、图像增强、图像去模糊等领域,具有较好的效果和广泛的应用。

import cv2
import numpy as np

def guided_filter(input_image, guide_image, radius, eps):
    # 转换图像类型为浮点数(0-1范围)
    input_image = input_image.astype(np.float32) / 255.0
    guide_image = guide_image.astype(np.float32) / 255.0

    # 应用引导滤波
    filtered_image = cv2.ximgproc.guidedFilter(guide_image, input_image, radius, eps)

    # 将滤波结果转换回8位无符号整数类型(0-255范围)
    filtered_image = (filtered_image * 255).astype(np.uint8)

    return filtered_image

if __name__ == "__main__":
    # 读取输入图像和引导图像
    input_image = cv2.imread('/media/cs/28EAFD24EAFCEEC6/工具箱csdn/引导滤波/Entropy.png')
    guide_image = cv2.imread('/media/cs/28EAFD24EAFCEEC6/工具箱csdn/引导滤波/Entropy.png', cv2.IMREAD_GRAYSCALE)
    
    # 定义滤波器半径和eps值
    radius = 5
    eps = 0.01
    
    # 应用引导滤波
    filtered_image = guided_filter(input_image, guide_image, radius, eps)
    
    # 显示滤波结果
    cv2.imshow('Filtered Image', filtered_image)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    # 保存滤波结果
    cv2.imwrite('output_image.jpg', filtered_image)

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
引导滤波Guided Filter)是一种非常有效的图像增强方法,它可以保留图像的细节和边缘信息,并能够消除图像中的噪声。下面是使用Python实现引导滤波图像增强的步骤: 1. 导入必要的库: ```python import cv2 import numpy as np ``` 2. 定义引导滤波函数: ```python def guided_filter(I, p, r, eps): """ :param I: guidance image :param p: filtering input image :param r: window radius :param eps: regularization parameter :return: filtered image q """ height, width = I.shape[:2] N = cv2.boxFilter(np.ones((height, width)), -1, (r, r)) mean_I = cv2.boxFilter(I, cv2.CV_64F, (r, r)) / N mean_p = cv2.boxFilter(p, cv2.CV_64F, (r, r)) / N mean_Ip = cv2.boxFilter(I * p, cv2.CV_64F, (r, r)) / N cov_Ip = mean_Ip - mean_I * mean_p mean_II = cv2.boxFilter(I * I, cv2.CV_64F, (r, r)) / N 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, cv2.CV_64F, (r, r)) / N mean_b = cv2.boxFilter(b, cv2.CV_64F, (r, r)) / N q = mean_a * I + mean_b return q ``` 3. 读取图像并进行增强: ```python img = cv2.imread("image.jpg") img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转为灰度图像 # 高斯平滑,消除噪声 img_smoothed = cv2.GaussianBlur(img, (7, 7), 0) # 计算梯度图像 I_x = cv2.Sobel(img_smoothed, cv2.CV_64F, 1, 0, ksize=3) I_y = cv2.Sobel(img_smoothed, cv2.CV_64F, 0, 1, ksize=3) I_gradient = np.sqrt(I_x**2 + I_y**2) # 进行引导滤波,保留细节和边缘信息 r = 5 # 窗口大小 eps = 0.1 # 正则化参数 q = guided_filter(I_gradient, img, r, eps) # 归一化 q = cv2.normalize(q, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U) ``` 4. 显示增强后的图像: ```python cv2.imshow("Enhanced Image", q) cv2.waitKey(0) cv2.destroyAllWindows() ``` 上述代码中,通过引导滤波的方式,对灰度图像进行了增强,保留了图像的细节和边缘信息。可以根据需要调整窗口大小和正则化参数来达到更好的增强效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天您也辛苦了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值