当前位置: 首页 > article >正文

机器视觉基础—高斯滤波

机器视觉基础—图像滤波

目录

  • 机器视觉基础—图像滤波
    • 高斯滤波
      • 自定义的形式
        • 通过掩码的方式在指定的区域上进行高斯滤波
      • 对于离散的点进行高斯滤波的处理

实际做论文实验的时候在最后的关键一步要使用到高斯卷积核核高斯滤波相关的知识,对于这个部分之前的接触还是比较少,因此在写模块之前自己打算画一些时间去补充一下这一方面的知识。

主要是体验一下这里面的代码过程,给自己编写模块打一些基础,用到什么在学习什么。

高斯滤波

高斯核的权重值从中心向边缘按高斯函数衰减:中心像素权重最大,周围像素权重随距离增加而减小。

在这里插入图片描述

3x3大小的卷积核的过程:如上所示最后执行一次归一化的操作即可。这里归一化之后得到的权重值,3x3区域大小的部分就是我们的高斯核(3x3大小的高斯核)将其用作卷积核即可。

在这里插入图片描述

之后的过程就是使用这个卷积核来进行卷积的处理和深度学习中的卷积的运算是保持一致的情况。

这种特性使得高斯滤波能保留更多低频信息(平滑区域),同时减少高频噪声。

cv2.GaussianBlur(src,ksize,sigmaX,sigmay,borderType)

  • src:输入图像
  • ksize:高斯卷积核大小高度和宽度都要是奇数
  • sigmaX:水平方向的标准差
  • sigmay:垂直方向的标准差
  • borderType:填充边界类型

在这里插入图片描述

import cv2
import matplotlib.pyplot as plt

def show_reslt(img):
    plt.imshow(img)
    plt.show()

img = cv2.imread('../exp/occ_result/trackerobj/2/15.png')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
show_reslt(img)

img = cv2.GaussianBlur(img, (5, 5), 5000)
show_reslt(img)

自定义的形式

下面使用自定义滤波的形式生成同样的结果,代码如下所示。

dst = cv2.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])

输入参数:

  • src:输入图像(灰度图或彩色图,支持 uint8、float32 等格式)。

  • ddepth:输出图像的深度(如 -1 表示与输入相同,cv2.CV_64F 允许负值输出)。

  • kernel:卷积核(单通道浮点型矩阵,如 np.float32)。

可选参数:

  • anchor:核的锚点位置(默认 (-1, -1) 表示核中心)。

  • delta:卷积后添加到每个像素的偏移值(默认为 0)。

  • borderType:边界填充方式(如 cv2.BORDER_REFLECT、cv2.BORDER_CONSTANT 等)。

import cv2
import matplotlib.pyplot as plt

def show_reslt(img):
    plt.imshow(img)
    plt.show()

img = cv2.imread('../exp/occ_result/trackerobj/2/15.png')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
show_reslt(img)
# 定义高斯核
# 定义参数
ksize = 5  # 整数,非元组
sigma = 500

# 生成一维高斯核
gaussian_1D = cv2.getGaussianKernel(ksize, sigma, cv2.CV_32F)

# 生成二维高斯核
gaussian_2D = gaussian_1D @ gaussian_1D.T  # 外积

# 应用滤波
blurred = cv2.filter2D(img, -1, gaussian_2D)

show_reslt(blurred)
通过掩码的方式在指定的区域上进行高斯滤波

np.where(mask, blurred, img) 会根据掩模 mask 的值选择对应的像素:

  • 如果 mask 中的值为 1,则选择 blurred 中的像素。
  • 如果 mask 中的值为 0,则选择 img 中的像素。

这样可以将目标区域替换为高斯滤波后的结果,而其他区域保持不变。

import numpy as np
import cv2
import matplotlib.pyplot as plt

def show_reslt(img):
    plt.imshow(img)
    plt.show()

img = cv2.imread('../exp/occ_result/trackerobj/2/15.png')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
show_reslt(img)


mask = np.zeros_like(img)
mask[50:150, 0:100] = 1  # 定义目标区域

blurred = cv2.GaussianBlur(img, (5,5), 500,None,10000)
result = np.where(mask, blurred, img)  # 合并结果

show_reslt(result)

这里自己突然想到了一个实验的想法和思路也就是,上面刚刚对某一个区域进行了高斯滤波的模糊处理,然后如果将处理之后的图像和原来没有处理之前的图像做差,在可视化一下效果。

在这里插入图片描述

这里经过高斯滤波的处理之后,黑色以外的一些点即为模块处理的部分。

对于离散的点进行高斯滤波的处理

如果把遮挡区域的散点使用高斯滤波进行一下区域的扩散,然后在和之前的做差背景中的一写点应该可以看作是遮挡区域。


http://www.kler.cn/a/614862.html

相关文章:

  • Pod 网络与 CNI 的作用
  • 【Go】数组
  • 如何低成本选择讯投QMT 的服务器/电脑,低成本运行?
  • Zynq + FreeRTOS 笔试题1
  • YOLOv8环境配置及依赖安装过程记录
  • Github 2025-03-28 Java开源项目日报Top10
  • ‌GraphRAG 知识图谱,设置适配阿里云百炼平台实战教程【上】
  • 第三卷:覆舟山决战(73-108回)正反人物群像
  • 前端常问的宏观“大”问题详解(二)
  • Unity编辑器功能及拓展(3) —[Attribute]特性
  • Scala 数组
  • IDEA如何设置以新窗口打开新项目
  • 直流电机类型及其控制技术
  • 【Qt】Qt 类的继承与内存管理详解:QObject、信号槽与隐式共享
  • 【学习】前端工程化(webpack5)
  • 实战经验深度解析 | 博睿数据制造行业精选案例集发布!
  • DFS飞机降落
  • Mysql-经典实战案例(11):深度解析Sysbench压测(从入门到MySQL服务器性能验证)
  • 东芝Toshiba DP-4528A 打印机信息
  • nacos 外置mysql数据库操作(docker 环境)