双边滤波平滑锯齿

双边滤波(Bilateral Filtering)是一种图像处理技术,主要用于图像的平滑或去噪,同时保留边缘细节。它结合了空间邻近度(space proximity)和像素值相似度(pixel value similarity)两个因素来对图像中的每个像素进行加权平均。

主要特点

保留边缘:与传统的高斯模糊不同,双边滤波能够在去除噪声的同时较好地保留图像中的边缘。

平滑处理:适用于需要保留细节但减少噪声的应用场景,如图像美化、纹理分析等。

工作原理

空间高斯权重:考虑像素之间的空间距离,距离越近权重越高。

值域高斯权重:考虑像素值的差异,值越接近权重越高。

应用场景

图像去噪:在不破坏边缘的情况下减少图像噪声。

图像美化:用于创建"油画"效果或其他艺术风格的效果。

预处理步骤:作为后续图像处理任务(如分割、特征提取等)前的预处理步骤。

参数说明

d: 直径范围内的像素,通常为正奇数。

sigmaColor: 颜色空间中的标准差,控制颜色相似度的影响。

sigmaSpace: 坐标空间中的标准差,控制空间邻近度的影响

  1. 动态计算参数:dynamic_sigma 函数计算掩膜图像的标准差,并基于此动态设置 sigmaColor 和 sigmaSpace 参数。

  2. 读取与检查图像:从文件读取灰度掩膜图像,并确保图像已成功加载。

  3. 初始化计数器:初始化 FPS 计数器以测量处理速度。

  4. 应用双边滤波:使用动态计算的参数对掩膜进行双边滤波。

  5. 显示图像:分别显示原始掩膜和处理后的掩膜。

  6. 计算 FPS:计算处理图像所用的时间并显示 FPS。

  7. 添加 FPS 文本:在处理后的图像上添加 FPS 值。

  8. 保存结果:将平滑后的掩膜图像保存到文件。

    import cv2
    import numpy as np

    def dynamic_sigma(mask):
    # 计算掩膜的标准差
    std_dev = np.std(mask)

    复制代码
     # 设置 sigmaColor,基于标准差的动态调整
     sigmaColor = std_dev * 20  # 可根据需要调整乘数
    
     # 设置 sigmaSpace,基于图像尺寸的动态调整
     height, width = mask.shape
     sigmaSpace = min(height, width) / 20  # 可根据需要调整分母
    
     return int(sigmaColor), int(sigmaSpace)

    读取掩膜图像

    mask = cv2.imread('smoothed_image.png', cv2.IMREAD_GRAYSCALE)

    检查图像是否成功加载

    if mask is None:
    raise ValueError("Image not found or unable to load.")

    初始化 FPS 计数器

    fps = 0
    frame_count = 0
    start_time = cv2.getTickCount()

    动态计算 sigmaColor 和 sigmaSpace

    sigmaColor, sigmaSpace = dynamic_sigma(mask)

    应用双边滤波

    smoothed_mask = cv2.bilateralFilter(mask, d=7, sigmaColor=sigmaColor, sigmaSpace=sigmaSpace)

    显示原始掩膜和处理后的掩膜

    cv2.imshow('Original Mask', mask)
    cv2.imshow('Smoothed Mask', smoothed_mask)

    计算 FPS

    end_time = cv2.getTickCount()
    time_elapsed = (end_time - start_time) / cv2.getTickFrequency()
    fps = 1.0 / time_elapsed

    在图像上显示 FPS

    font = cv2.FONT_HERSHEY_SIMPLEX
    cv2.putText(smoothed_mask, f'FPS: {fps:.2f}', (10, 30), font, 1, (255, 255, 255), 2, cv2.LINE_AA)

    显示带有 FPS 的平滑掩膜

    cv2.imshow('Smoothed Mask with FPS', smoothed_mask)

    保存平滑后的掩膜

    cv2.imwrite('smoothed_mask.png', smoothed_mask)

    等待键盘事件并关闭窗口

    cv2.waitKey(0)
    cv2.destroyAllWindows()

相关推荐
必须得开心呀几秒前
python编写带界面的软件,需要安装哪些插件
开发语言·python
Wx-bishekaifayuan8 分钟前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
青少儿编程课堂37 分钟前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
计算机编程指导师1 小时前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
Wx-bishekaifayuan1 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
WeiXin_DZbishe1 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码1 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
WeiXin_DZbishe1 小时前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
imgsq3 小时前
电子学会考级 vs CCF-GESP:两套少儿编程考级怎么选
python·青少年编程