一维高斯滤波java_图像快速高斯滤波实现

1、二维高斯滤波公式:(μ=0,σ)

G(x,y) = 1/2πσ2·exp(-(x2+y2)/2σ2)

G(x,y)可以分离为:G(x,y) = G(x)·G(y)= 1/2πσ2·exp(-x2/2σ2)·exp(-y2/2σ2),其中系数1/2πσ2可以不考虑,因为在归一化时又将其消掉了。

所以,二维的滤波可以分离为两个一维的滤波。

2、假设灰度图像宽高分别为W、H,二维高斯滤波模板宽高均为m_size,那么二维模板直接卷积计算复杂度为O(W*H*m_size*m_size);

同样采用两次一维(横向、纵向)卷积计算的复杂度为O(W*H*m_szie*2),显然计算复杂度降低,滤波模板阶数越高计算速度的提升越明显。

通常根据3σ原则来计算模板阶数,阶数k = 2*ceil(3σ)+1,因为高斯分布中(μ=0)±3σ几乎涵盖了所有的分布,所以可以根据此规则估算合理的模板阶数(奇数)。

3、代码实现中这里使用了自己创建的二维数组,目的是来比对两种滤波的结果,代码如下:

#include

#include

#include

using namespace std;

double** CreateGaussMap(int map_size, double sigma);

double* CreateGauss(int map_size, double sigma);

void GaussFilter2(int src[9][9], double dst[9][9], double** map);

void GaussFilter(int src[9][9], double dst[9][9], double* map);

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

double** gauss2 = CreateGaussMap(3,0.33);

for (int i=0;i<3;++i) {

for (int j=0;j<3;++j) {

cout<

}

cout<

}

cout<

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值