首页 > 其他分享 >SurfaceBlur与双边滤波

SurfaceBlur与双边滤波

时间:2024-04-13 11:33:24浏览次数:29  
标签:scale sigmaColor sigmaSpace image 滤波 window SurfaceBlur 双边

Surface Blur 效果

PhotoShop 中有一种叫做 Surface Blur 的效果。

与其他模糊效果不同, Surface Blur 可以在模糊的同时保留图像的边缘特征。使用 Surface Blur 得到的图片,像是油画一般被划分为多个色块。

左图为 Surface Blur效果,右图为原图

双边滤波 Bilateral filter

双边滤波,是结合图像的空间邻近度和像素值相似度的一种折衷处理。双边滤波器能够做边缘保存(edge preserving),不能干净地滤掉彩色图像里的高频噪声,只对低频信息滤波。

本质上,双边滤波就是考虑到灰度差距的高斯滤波。高斯核会根据像素间的灰度差调整权值,达成保留边缘的目的。

代码示例

使用 Python 下的 OpenCV 库,利用双边滤波实现 Surface Blur 效果。

import cv2 as cv
im = cv.imread('input.png')
blur = cv.bilateralFilter(im,9,75,75)

cv.bilateralFilter(src, d, sigmaColor, sigmaSpace) 的输入参数解释如下:

  • src 就是输入图像
  • d,处理半径。该值过大会造成严重的性能问题
  • sigmaColor,滤波处理时选取的颜色差值范围。值越大,图片越模糊
  • sigmaSpace,坐标空间的标注方差。数值越大,越远的像素会相互影响,图片的 “色块感” 会越强烈

借助 GPT4 写了个实时预览三个参数效果的 UI 界面,把输入图像 input.png 放在同目录下即可。可以用来玩玩:

import cv2
import tkinter as tk
from PIL import Image, ImageTk

im = cv2.imread('input.png')
window = tk.Tk()
label = tk.Label(window)
label.pack()

def update_image(d, sigmaColor, sigmaSpace):
    blur = cv2.bilateralFilter(im, d, sigmaColor, sigmaSpace)
    image = Image.fromarray(cv2.cvtColor(blur, cv2.COLOR_BGR2RGB))
    size = image.size
    # image = image.resize((int(size[0] * 0.75), int(size[1] * 0.75)))
    photo = ImageTk.PhotoImage(image)
    label.config(image=photo)
    label.image = photo

d_scale = tk.Scale(
    window,
    from_=1,
    to=40,
    orient='horizontal',
    length=400,
    command=lambda d: update_image(int(d), sigmaColor_scale.get(), sigmaSpace_scale.get()),
)
d_scale.pack()
sigmaColor_scale = tk.Scale(
    window,
    from_=1,
    to=255,
    orient='horizontal',
    length=400,
    command=lambda sigmaColor: update_image(d_scale.get(), int(sigmaColor), sigmaSpace_scale.get()),
)
sigmaColor_scale.pack()
sigmaSpace_scale = tk.Scale(
    window,
    from_=1,
    to=255,
    orient='horizontal',
    length=400,
    command=lambda sigmaSpace: update_image(d_scale.get(), sigmaColor_scale.get(), int(sigmaSpace)),
)
sigmaSpace_scale.pack()

window.mainloop()

参考来源

标签:scale,sigmaColor,sigmaSpace,image,滤波,window,SurfaceBlur,双边
From: https://www.cnblogs.com/chirp/p/18132630

相关文章

  • Kalman滤波器的原理与实现
    Kalman滤波器的原理与实现卡尔曼滤波器(KalmanFilter)是一个十分强大滤波器,虽然叫做滤波器,卡尔曼滤波器其实可以起到到两个作用,即预测与更新,这与我们在其运行时所关注的环节有关。当我们关注预测状态量这一步时,我们可以通过卡尔曼滤波器获取状态量的超前预测值,预测的值取决于......
  • 基于PI+重复控制的有源滤波器谐波抑制策略模型(Simulink仿真实现)
     ......
  • 汇川AM400PLC一阶滞后滤波器使用介绍(FirstOrderLagFilter)
    1、一阶低通滤波器算法详细介绍PLC信号处理系列之一阶低通(RC)滤波器算法_数字rc滤波-CSDN博客文章浏览阅读4.1k次。1、先看看RC滤波的优缺点优点:采用数字滤波算法来实现动态的RC滤波,则能很好的克服模拟滤波器的缺点;1、在模拟常数要求较大的场合这种算法显得更为实用;2、对......
  • 【故障诊断】用于轴承故障诊断的性能增强时变形态滤波方法及用于轴承断层特征提取的增
    ......
  • 图像的线性滤波/卷积
    效果左上为y方向滤波,右上为x方向滤波,下图为两种滤波的叠加原理部分线性滤波可以说是图像处理最基本的方法,它允许我们对图像进行处理,产生很多不同的效果。卷积卷积的数学定义:一般称g为作用在f上的filter或kernel对于滤波器,也有一定的规则要求:滤波器的大小应该是奇......
  • 嵌入式算法开发系列之卡尔曼滤波算法
    卡尔曼滤波算法文章目录卡尔曼滤波算法前言一、卡尔曼滤波算法原理二、算法应用三、C语言实现总结前言在嵌入式系统中,传感器数据通常受到噪声、误差和不确定性的影响,因此需要一种有效的方法来估计系统的状态。卡尔曼滤波算法是一种基于概率理论的优雅而高效的状态......
  • B82793S0513N201 共模扼流圈滤波器电感 51uH 800mA
    B82793S0513N201是一款由TDK(东电化)公司生产的数据线扼流圈,用于电信领域的xDSL变压器。制造商:TDK产品品种:共模扼流圈/滤波器RoHS:详细信息系列:B82793S安装风格:PCBMount端接类型:SMD/SMT通道数量:1Channel电感:51uH容差:30%最大直流电流:800mA最......
  • 几种嵌入式中常见的滤波算法
    在嵌入式系统开发中,滤波算法是不可或缺的一部分,用于从带有噪声的数据中提取有用信息,提高数据质量,并减少错误决策的可能性。下面将介绍几种在嵌入式系统中常见的滤波算法。1.移动平均滤波(MovingAverageFilter)移动平均滤波是一种简单的滤波算法,通过计算一定窗口内数据点的平......
  • 频率域滤波基本操作
    1.基础知识 在频率域中,图像的低频分量对应着图像中较为缓慢变化的部分,而高频分量则对应着图像中较为快速变化的部分。举例来说,对于一幅房间图像,墙壁和地板通常具有较为平滑的灰度变化,这些平滑的变化可以被认为是低频分量。而在图像中的物体边缘、纹理或其他细节部分,则表现出较......
  • 机器人姿态估计-IMU、互补滤波算法应用+C代码实现
    机器人姿态估计-IMU、互补滤波算法应用附赠自动驾驶学习资料和量产经验:链接机器人的姿态测量对于许多应用至关重要,如导航、运动控制等。在这篇文章中,我们将介绍如何利用MPU6050传感器以及互补滤波和卡尔曼滤波算法来实现自平衡车的姿态测量。我们将从原理出发,逐步介绍互补滤波......