博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【信号、图像、Matlab】如何得到高斯滤波器的整数模板
阅读量:4706 次
发布时间:2019-06-10

本文共 1164 字,大约阅读时间需要 3 分钟。

【信号、图像、Matlab】如何得到高斯滤波器的整数模板

如何得到高斯滤波器的整数模板?这个问题困扰了我两天,上网搜索的代码,基本上都生成的小数,有的文档给写了3*3,5*5,7*7的整数形式,但是没有说是怎么得到的,应该说是我没有仔细看吧,现在恍然大悟,只要将左上角的元素化为1就可以了啊。我还以为用什么高级方法得出来的,晕死了。

二维高斯分布公式:

二维高斯分布公式

要得到高斯滤波器的整数模板就要从这个公式入手,这个公式在三维坐标下的形式是这样的:
这里写图片描述
我们要的高斯滤波器的整数模板相当于这个三维图形在底面(将底面网格化,也就是离散化,计算机不能处理连续的东东)的投影,将曲面的高度换算成网格里面的值,这是我们要的模板了。

计算整数模板的公式

假设我们的模板放在矩阵M中,M的大小为(2k+1)*( 2k+1),那么M(i,j)的值为:

这里写图片描述
说明:这就是由连续公式得到的,只不过这里的M是一个矩阵,原点在矩阵的中间,所以有(i-k-1)以及(j-k-1)为的就是让原点到矩阵中间。

一个Matlab代码

clear;k=1;              %模板长度的一半row = 2*k+1;      %模板长度col = 2*k+1;sigma2=1;         %方差for i=1 : row    for j=1 : col        fenzi=double((i-k-1)^2+(j-k-1)^2);        A(i,j)=exp(-fenzi/(2*sigma2))/(2*pi*sigma2);    endendA                           %显示小数形式C=floor(A.*(1/A(1,1)));      %左上角化为1(想了很久整数是怎么得出来的,只要这样就可以了,郁闷)

这个代码得到的是一个7*7,sigma=1高斯滤波器的小数和整数模板,如下:

小数:
这里写图片描述
整数:
这里写图片描述
当时想了很久怎样才能得到整数形式的模板,无意间从网上看了将左上角的元素化为1就可以了,我只能说自己的脑壳真是迟钝啊。

要说明的两点

  • 上面的整数模板要用于滤波的话,需要归一化,就是在整个模板的前面加一个系数,这个系数是:1/(所有整数总和).
  • 生成的模板,与公式里的一个东西有关:sigma,这对生成的模板数个影响很大。这里给一张不同sigma的一维高斯分布图,二维的类似,理解sigma取值对函数图形的影响就可以了:
    这里写图片描述
    Sigma越大,分布越集中。

再给几个不同大小,不同sigma的整数模板

这里写图片描述

这里写图片描述
这里写图片描述
之所以放这几个模板,可以发现,sigma的取值对模板的影响很大,所以如何取sigma,这应该是个经验性的问题。

转载于:https://www.cnblogs.com/shanchuan/p/8150349.html

你可能感兴趣的文章
python--注释
查看>>
SQL case when else
查看>>
SYS_CONTEXT 详细用法
查看>>
Pycharm配置autopep8让Python代码更符合pep8规范
查看>>
我的第一篇博客
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
C#垃圾回收机制
查看>>
31、任务三十一——表单联动
查看>>
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>
PHP echo 和 print 语句
查看>>
第一讲 一个简单的Qt程序分析
查看>>
Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置
查看>>
poj 1979 Red and Black(dfs)
查看>>
【.Net基础03】HttpWebRequest模拟浏览器登陆
查看>>
zTree async 动态参数处理
查看>>
Oracle学习之常见错误整理
查看>>
数据库插入数据乱码问题
查看>>