时间:2024-07-28 来源:网络搜集 关于我们 0
高斯滤波(Gaussian Filtering)是一种在数字图像处理中广泛应用的滤波方法,主要用于平滑处理图像,减少图像中的噪声。这种滤波方法得名于其使用的核函数——高斯函数,该函数形状类似于正态分布曲线,故也称为高斯平滑滤波器。
本文详细介绍高斯滤波算法,包括算法的基本原理、Python实现以及FPGA实现。
一、高斯滤波的相关知识
1、高斯滤波的基本原理
高斯滤波(Gaussian Filtering)是数字图像处理中一种常用的线性滤波技术,主要用于平滑图像以减少噪声和细节,同时保留图像的整体结构。
高斯滤波器是一种低通滤波器,它通过加权平均周围像素的值来平滑图像中的每个像素。
高斯滤波的基本思想是,对于图像中的每个像素,计算其周围邻域内像素值的加权平均,权重由高斯函数决定。
高斯函数是一个钟形曲线,它在中心点附近具有较高的值,随着距离中心点的增加,值迅速减小。这意味着邻域中心的像素对当前像素的影响最大,而远离中心的像素影响较小。
高斯滤波器的数学表达式可以表示为:
其中f(x,y) 表示像素的坐标,σ是高斯函数的标准差,控制着高斯函数的宽度,即影响滤波的平滑程度。
高斯滤波的具体操作过程如下:
用一个固定大小的高斯模板遍历图像的每一个像素点,例如3x3、4x4。
对模板覆盖区域内的每个像素,根据高斯函数计算其权重。
将模板中心像素值与其周围像素值的加权平均值作为新的像素值。
常用的σ=0.8的高斯函数生成的3*3模板为
2、高斯噪声与高斯滤波
高斯噪声是指那些其幅度分布遵循高斯分布(正态分布)的噪声。如果一个噪声的幅度分布满足高斯分布,并且它的功率谱密度是均匀分布的,则该噪声被称为高斯白噪声。
高斯白噪声的二阶矩不相关,一阶矩为常数,意味着信号在时间上的相关性较小。高斯白噪声包括热噪声和散粒噪声。
3、高斯滤波的应用
高斯滤波在图像处理中常用于:
噪声抑制:通过平滑图像,减少图像中的随机噪声。
图像预处理:在进行边缘检测等图像分析之前,先进行高斯滤波,以减少噪声的干扰。
图像融合:在多图像融合技术中,高斯滤波可用于平滑图像,减少融合过程中的不连续性
二、Python实现
1、计算高斯核函数代码
import cv2import numpy as np# 定义高斯核函数def gaussian_kernel(size, sigma): kernel = np.zeros((size, size)) for i in range(-int(size/2), int(size/2)+1): for j in range(-int(size/2), int(size/2)+1): kernel[i+int(size/2)][j+int(size/2)] = (np.exp(-0.5 *((i**2 + j**2)/sigma**2))) / (2*np.pi*sigma**2) kernel /= kernel.sum() # print(kernel.sum()) kernel *= 16 kernel = np.round(kernel) return kernel# 设置参数size = 3 # 高斯核大小(奇数)sigma = 0.8 # 标准差# 生成高斯滤波器模板template = gaussian_kernel(size, sigma)print("高斯滤波器模板:\n", template)计算出的3x3窗口,sigma = 0.8的高斯滤波器模板:
高斯滤波器模板: [[1. 2. 1.] [2. 4. 2.] [1. 2. 1.]]2、高斯滤波代码
import cv2import numpy as npdef add_gaussian_noise(img, mean=0, std=0.003): # 创建均值为mean方差为std呈高斯分布的图像矩阵 noise = np.random.normal(mean, std ** 0.5, img.shape) # 将原始图像的像素值进行归一化,除以255使像素值在0-1之间 img = np.array(img/255, dtype=float) # 噪声和图片合并即加噪后的图像 noisy_img = img + noise # 解除归一化,乘以255将加噪后的图像的像素值恢复 noisy_img = np.array(noisy_img*255, dtype=np.uint8) return noisy_imgimage = cv2.imread(1280_720.bmp)# 定义高斯核大小和标准差kernel_size = 3sigma = 0.8# 添加噪声img_noise = add_gaussian_noise(image, 0, 0.000002)# 对图像进行高斯滤波out_image = cv2.GaussianBlur(img_noise, (size, size), sigma)# 显示原始图像和处理后的图像cv2.imshow("Original Image", image)cv2.imshow("Filtered Image", output_image)cv2.waitKey(0)cv2.destroyAllWindows()3、实现效果
三、FPGA实现
整个系统包括“3行缓存模块”、“高斯滤波”三个模块。
整个系数的框架流程可根据自己的实际需求来调整,主要是调整各模块的位置顺序。
高斯滤波模块:
(1)只需将3行缓存,分别缓存3个周期,即可实现3*3窗口数据。
(2)将整个窗口9个点的像素值按照高斯模版进行加权平均计算。
如果需要工程源码,想要掌握更多的FPGA图像处理算法,学习FPGA图像算法的实现。请阅读下面这篇文章: