7.l滤波

学习视频可参见python+opencv3.3视频教学 基础入门

今天写的是滤波

outline

  • 均值滤波
  • 中值滤波
  • 自定义滤波
  • 高斯滤波(模糊)

图像基础常识:

噪声

  • 椒盐噪声(Salt & Pepper):含有随机出现的黑白亮度值。(加了胡椒粉,很形象了)
    • 盐=白色,椒=黑色
    • image-20201006164722769
  • 高斯噪声:含有亮度服从高斯或正态分布的噪声。高斯噪声是很多传感器噪声的模型,如摄像机的电子干扰噪声。
    • 原图与加了高斯噪声后的图片

滤波器

  • 线性滤波器
    • 线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,
    • 均值滤波器(模板内像素灰度值的平均值)、高斯滤波器(高斯加权平均值)等。
    • 由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是可以确定并且是唯一的(转移函数即模板的傅里叶变换)。
  • 非线性滤波
    • 非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现。
    • 如最大值滤波器、最小值滤波器、中值滤波器等。
    • 通过比较一定邻域内的灰度值大小来实现的,没有固定的模板,因而也就没有特定的转移函数(因为没有模板作傅里叶变换),另外,膨胀和腐蚀也是通过最大值、最小值滤波器实现的。

滤波、模糊等之间的关系

  • 一张图明白易懂
    • image-20201007120318552
  • 滤波
    • 对输入信号进行卷积处理的一个过程,其实滤波 = 卷积
    • 卷积模板/掩膜 的不同决定了不同的滤波方式,也因此产生了高通、低通、带通、带阻等基本的滤波方式。(高斯掩模最后要进行归一化处理,即映射到0-1的范围)
    • 低通滤波:就是保留将信号中的低频部分,抑制高频部分。可用均值滤波,高斯滤波处理。
    • 均值滤波:采用均值掩膜对输入信号进行卷积的滤波方式叫均值滤波。
    • 高斯滤波:采用高斯掩膜对输入信号进行卷积的滤波方式叫高斯滤波;

1.均值滤波

  • 均值滤波是低通滤波,线性滤波器,其输出为邻域模板内像素的平均值,用于图像的模糊和降噪。

  • def blur_demo(image):
        dst = cv.blur(image, (5,5))  # 卷积核为5x5,均值
        cv.imshow("blur",image)
    
  • image-20201007120959801

  • 均值滤波器使用滤波器窗口内的像素的平均灰度值代替图像中的像素值,这样的结果就是降低图像中的“尖锐”变化。这就造成,均值滤波器可以降低噪声的同时,也会模糊图像的边缘。

2.中值滤波

  • 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。

  • 中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。

  • def memedianBlur(image):
        dst = cv.medianBlur(image, 5)  # 中值模糊,对椒盐噪声去噪较好
        cv.imshow("medianBlur",dst)
    
  • image-20201006170623888

  • 去除椒盐噪声较好。

  • 中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的

3.自定义滤波

  • def custom_blur_demo(image):
        #自定义滤波器
        kernel = np.ones([5, 5], np.float32) / 25  # 卷积核核大小
        # filter2D(src, ddepth(图像深度,-1表示默认和src一样深度), kernel, dst=None, anchor=None(锚点,卷积核中心), delta=None, borderType=None)
        dst=cv.filter2D(image, -1, kernel=kernel)  # 二维滤波器
        cv.imshow("blur_demo", dst)
    
  • image-20201006171619674

  • kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)  # 锐化算子
    
  • image-20201006171809217

    • 可以观察到比原来更加立体

    • 算子为奇数,总和为0,做边缘梯度,即边缘检测,总和为1,做增强

    • 总和为0的算子:

    • image-20201007162342891

    • image-20201007162701745

    • 测试用例:

    • kernel = np.array([[0,1,2], [-1, 0,1], [-2, -1,0]], np.float32)  # 锐化算子
      
    • 结果:

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XLROQlgM-1604485791381)(https://gitee.com/guohui7/weixinpicture/raw/master/img/image-20201104180922566.png)]

4.高斯滤波(模糊)

  • 高斯分布(正态分布)

  • image-20201006173137036

  • 高斯滤波是最常用的图像去噪方法之一,它能很好地滤除掉图像中随机出现的高斯噪声

  • 对原图加高斯噪声

    • #0-255范围
      def clamp(pv):
          if pv > 255:
              return 255
          elif pv < 0:
              return 0
          else:
              return pv
      
      
      def gaussian_noise(image):  # 加高斯噪声
          h, w, c = image.shape
          for row in range(h):
              for col in range(w):
                  s = np.random.normal(0, 20, 3)  # normal(loc=0.0, scale=1.0, size=None),均值,标准差,大小
      
                  b = image[row, col, 0]
                  g = image[row, col, 1]
                  r = image[row, col, 2]
      
                  image[row, col, 0] = clamp(b + s[0])
                  image[row, col, 1] = clamp(g + s[1])
                  image[row, col, 2] = clamp(r + s[2])
      
          cv.imshow("gaussian_noise", image)
      
    • 得到结果如下:

    • image-20201006180035023

  • 运用高斯滤波处理图像:

    • # GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
          # ksize表示卷积核大小,sigmaX,Y表示x,y方向上的标准差,这两者只需一个即可,并且ksize为大于0的奇数
          dst = cv.GaussianBlur(src, (5, 5), 0)  # 高斯模糊,sigmaX与ksize一个为0
          cv.imshow("Gaussian blur", dst)
      
    • 得到处理前后的图像为

      • image-20201006180405192
    • 关于高斯滤波的详细内容可参见【图像处理】数字图像傅里叶变换的物理意义及简单应用

    • 高斯模糊就是高斯滤波,因为这个高斯滤波的效果看起来像是把图像给弄模糊了,所以又有了“高斯模糊”的叫法。

关于高斯滤波的详细内容可参见【图像处理】数字图像傅里叶变换的物理意义及简单应用

  • 高斯模糊就是高斯滤波,因为这个高斯滤波的效果看起来像是把图像给弄模糊了,所以又有了“高斯模糊”的叫法。

结语

以上内容仅是自我学习时记录的笔记,欢迎大家批评指正,一起学习进步。欢迎大家关注我的公众号小郭学数据。
在这里插入图片描述

### 毫米波雷达滤波算法实现与应用 #### 卡尔曼滤波在毫米波雷达中的作用 毫米波雷达因其高精度、强抗干扰能力和对环境光照不敏感的优势,在多个领域如自动驾驶、机器人导航和智能交通中广泛应用。然而,由于测量数据通常含有噪声,直接使用这些原始数据可能导致目标跟踪的精度下降甚至失败。为此,采用有效的滤波算法来处理和优化数据变得至关重要。 卡尔曼滤波作为经典线性最优估计方法之一,因具备良好性能及低计算复杂度而被选作毫米波雷达目标跟踪的理想方案[^1]。该算法能够有效减少由传感器引起的随机误差和其他不确定因素带来的影响,从而提高系统的稳定性和可靠性。 #### 多目标跟踪中的卡尔曼滤波与最近邻数据关联 对于多目标情况下的毫米波雷达系统来说,除了单个物体的位置预测外还需要解决不同对象之间的区分问题。此时不仅要用到卡尔曼滤波来进行状态更新,还需引入其他机制比如最近邻(Nearest Neighbor, NN) 数据关联算法以确保每个观测值都能正确分配给相应的实体。这种方法已经在实际项目中有过成功案例,并且展示了较好的适应性和准确性[^2]。 ```matlab % 初始化参数 R = eye(2); % 测量噪声协方差矩阵 Q = diag([0.1, 0.1]); % 过程噪声协方差矩阵 H = [1 0]; % 测量函数雅克比矩阵 F = [1 dt; 0 1]; % 状态转移模型 P = eye(2)*1000; % 初始估计误差协方差 x_hat = zeros(2,1); % 初始状态向量 (位置速度) for k=1:length(z) % 预测阶段 x_pred = F*x_hat; P_pred = F*P*transpose(F)+Q; % 更新阶段 K = P_pred*transpose(H)/(H*P_pred*transpose(H)+R); x_hat = x_pred + K*(z(k)-K*H)*P_pred; end ``` 这段MATLAB代码实现了简单的卡尔曼滤波过程用于处理来自毫米波雷达的距离测量值`z`,其中包含了预测和更新两个主要部分。通过不断迭代调整状态变量及其不确定性描述(`P`),最终获得较为精确的目标位置估计。 #### 数字滤波器的设计实践 当涉及到具体工程实践中时,设计合适的数字滤波器也是不可或缺的一环。MathWorks提供了丰富的工具箱支持用户快速构建并测试各种类型的离散时间滤波器,包括但不限于有限脉冲响应(FIR) 和无限脉冲响应(IIR)[^3]。这类资源可以帮助开发者更好地理解理论概念的同时加速原型开发周期。 #### 扩展卡尔曼滤波的应用实例 考虑到某些应用场景下可能存在非线性的动态特性或复杂的运动模式,则可能需要考虑更高级别的变体——扩展卡尔曼滤波(EKF) 来应对挑战。EKF通过对非线性系统做局部线性化近似进而使得标准形式得以适用;文献表明经过适当配置后的EKF确实可以在一定程度上改善毫米波雷达距离测量的效果[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值