基于FPGA图像处理的高斯模糊实现

高斯模糊(gaussian blur)是一种高斯低通滤波,可以过滤掉图像的高频部分,保留低频部分,对于去除高斯噪声非常有效果,常常被用于图像去噪中。
在做图像模糊的时候最直接的想法就是在当前像素上取一个3*3或者5*5的窗口,把窗口里面的数字相加再求一个平均,得到的均值作为新的当前像素的值,这也就是均值滤波。
高斯滤波认为窗口中的每个像素对当前像素的影响是不一样的,和当前像素越接近影响就越大。因此加权平均更加合理,相近的像素值权重就比较大,相远的权重就小。
在利用高斯滤波的时候首先需要去生成一个高斯核,二维高斯函数如下:
在计算每个像素值时,可以将其视为坐标的原点,这样可以将视为0,就可以简化二维高斯函数如下:
可以使用如下python代码来生成一个高斯核:
import cv2 as cvimport numpy as npsigma = 0.8kernel = np.zeros((3, 3))for i in range(-1, 2): for j in range(-1, 2): kernel[i + 1][j + 1] = 1.0 / (2 * np.pi * sigma * sigma) * np.exp(-((i * i + j * j) / (2.0 * sigma * sigma)))print(kernel)
在opencv中也提供了getgaussiankernel这个函数来获取一个高斯核,他的函数定义如下:
def getgaussiankernel(ksize, sigma, ktype=none)
第一个参数ksize代表高斯核的尺寸,这里会生成一个ksize*1的高斯核。
对于二维的高斯核生成方式如下:
import cv2 as cvimport numpy as npsigma = 0.8opencv_gaussian_kernel_x = cv.getgaussiankernel(3, 0.8)opencv_gaussian_kernel_y = cv.getgaussiankernel(3, 0.8)opencv_gaussian_kernel = opencv_gaussian_kernel_x * opencv_gaussian_kernel_y.tprint(opencv_gaussian_kernel)
可以看到两者是不一样的,那是因为我们没有对我们自己写的求出来的高斯模板进行归一化。
然后对其进行归一化,使其权重相加的和为1
kernel = kernel / kernel.sum()print(kernel)
可见归一化后的结果就和opencv提供的函数计算出来的结果就一样了。
最后对齐转换为整数,左上角的数据变为1
kernel = np.int32(kernel / kernel[0][0])print(kernel)print(1/ + str(kernel.sum()))
这样就可以得到完整的高斯模板了。
完整的python代码如下:

三星GalaxyTabActivePro即将推出 采用10英寸屏幕及三防设计
业内专家云集对话高端研讨,打破半导体测试技术壁垒
由活体组织和细胞构成的生物机器人
OPPOR11什么时候上市最新消息:骁龙660+6G+前置双摄,OPPOR11打头阵OPPOR11Plus后发!售价有惊喜?
工件电镀前需要清洗,哪种方法清洗效率最高?
基于FPGA图像处理的高斯模糊实现
降本空间何寻?瑞能串联化成分容系统可实现年降本400万
智能时代企业中台落地“四步走”
华为防火墙的安全策略配置实例
大基金再次出手投资瑞芯微电子 认缴金额达2592万元将持股7%
同样是高通骁龙835,一加5售价却低三星s8 2k以上,差别在哪里?
值得一试?iPhone升级iOS10系统,3个最走心的功能,越用越顺溜
PLC远程下载程序模块_巨控GRM532模块
宁夏财政厅打造科技金融生态圈
什么是分布式网络效应
DASP 2022B版本发布 四大模块功能上新
反无人机雷达探测技术主要技术挑战与对策
触摸屏无线视频传输技术简介
4·29首都网络安全日 长亭科技创新升级“安全兵法”
基于CAN总线信号的波形解码和报文解码不一致的情况分析