fspecial matlab 自己实现,matlab中fspecial中生成高斯模板的解释以及c语言兑现
matlab中fspecial中生成高斯模板的解释以及c语言实现
下面这个函数是模拟fspecial中的生成高斯模板的函数。
function h=makefilter(size,sigma)
%size为模板大小
%sigma为标准差
%下面的代码其实是从fspecial中摘录出来的,我做了一些更改放到自己写的函数里面便于解释
%计算高斯模板的中心位置
siz = ([size size]-1)/2;
sig = sigma;
%用meshgrid是为了加速,不用for循环
[x y] = meshgrid(-siz(2):siz(2),-siz(1):siz(1));
%计算exp(-(x^2+y^2)/(2*sig^2))
%我想你肯定有一个疑问,那就是为什么不除以2*pi*sig^2
%因为不除也没有关系,因为最后归一化之后会约掉
arg = -(x.*x+y.*y)./(2*sig*sig);
h = exp(arg);
%不知道它为什么要这样,忘懂得人解释一下
h(h
%求和,用来归一化
sumh = sum(h(:));
%防止求和之后出现为0的情况,然后再归一化一下使高斯,模板为小数
if sumh ~=0
h=h/sumh;
end
end
运行结果:
>> makefilter(3,0.5)
ans =
0.0113 0.0838 0.0113
0.0838 0.6193 0.0838
0.0113 0.0838 0.0113
下面给出C的代码
#include
#include
#include
double** makeGaussianFilter(int iSize, double sigma);
double** malloc2DArray(int iRow, int iCol);
void free2DArray(double** p,int iRow);
int _tmain(int argc, _TCHAR* argv[])
{
double** filter = makeGaussianFilter(3,0.5);
for (int i=0; i<3; i++)
{
for (int j=0; j<3; j++)
{
printf("%lf\t",filter[i][j]);
}
printf("\n");
}
_getch();
free2DArray(filter,3);
return 0;
}
double** makeGaussianFilter(int iSize, double sigma)
{
double** filter = malloc2DArray(iSize,iSize);
int center = (iSize-1)/2;
double sum = 0;
double x2 = 0;
double y2 = 0;
for (int i=0; i
{
x2 = pow(double(i-center),2);
for (int j=0; j
{
y2 = pow(double(j-center),2);
sum += filter[i][j] = exp(-(x2+y2)/(2*sigma*sigma));
}
}
if (sum!=0)
{
//归一化
for (int i=0; i
{
for (int j=0; j
{
filter[i][j] /= sum;
}
}
}
return filter;
}
double** malloc2DArray(int iRow, int iCol)
{
double **filter = new double*[iRow];
for (int i=0; i
{
filter[i] = new double[iCol];
}
return filter;
}
void free2DArray(double** p,int iRow)
{
for (int i=0; i
{
delete []p[i];
}
delete []p;
}
结果:
总结:有时候不一定按照公式的算法去做,可以简化计算。
fspecial matlab 自己实现,matlab中fspecial中生成高斯模板的解释以及c语言兑现相关推荐
- matlab中conv滤波,其中是Matlab(imfilter)和TensorFlow中偶数滤波器(6x6)的中心像素(转速表nn.conv2d)?...
在我的硕士论文中,我正在将一个卷积操作从一个Matlab代码移植到TensorFlow(pythonapi)中.例外的是,在Matlab中使用了一个均匀的滤波器大小(6x6).在 通过调试Matlab ...
- python变量存为matlab,详解如何在python中读写和存储matlab的数据文件(*.mat)
背景 在做deeplearning过程中,使用caffe的框架,一般使用matlab来处理图片(matlab处理图片相对简单,高效),用python来生成需要的lmdb文件以及做test产生结果.所以 ...
- matlab 颜色势能,Matlab在模拟晶面势能分布中的应用
ComputerKnowledgeand Technology 电脑知识与技术 本栏目责任编辑:唐一东人工智能及识别技术 第 6 卷第 31 期 (2010 年 11 月) Matlab 在模拟晶面势 ...
- matlab中存档算法代码,MATLAB 智能算法超级学习手册中程序代码
[实例简介] MATLAB 智能算法超级学习手册中程序代码 [实例截图] [核心代码] dc90ef43-7920-434e-bdb8-0636c31c0b44 └── MATLAB 智能算法超级学习 ...
- matlab中向量norm,【Matlab开发】matlab中norm范数以及向量点积、绘图设置相关
[Matlab开发]matlab中norm范数以及向量点积.绘图设置相关 标签(空格分隔): [Matlab开发] 声明:引用请注明出处外链网址已屏蔽 norm范数使用 help norm norm ...
- 水库调度matlab,基于MATLAB模糊系统在水库调度中的应用初探_廖明潮
文章编号:1009-4881(2004)01-0022-03 收稿日期:2003-04-25 修回日期:2003-12-15 作者简介:廖明朝(1968-),男,湖北省洪湖市人,讲师. 基于MATLA ...
- matlab括号区别,matlab中各种括号(),[],与{}的区别与认识
matlab中各种括号(),[],与{}的区别与认识 发布时间:2018-06-04 10:37, 浏览次数:469 , 标签: matlab 原文 在matlab中,常常会遇到(),[],和{},这 ...
- matlab在电磁场与电磁波中的应用,matlab在电磁场与电磁波学习中的应用.docx
matlab在电磁场与电磁波学习中的应用.docx MATLAB在电磁场与电磁波学习中的应用裴逸菲(燕京理工学院信息科学与技术学院,河北廊坊065201)摘要针对电磁场与电磁波在大学课程中的理论性强. ...
- matlab安装m_map,MATLAB中安装m_map后不能用,求解
MATLAB中安装m_map后不能用,求解 因为画图,所以今天在MATLAB中安装了m_map,之后还写了几个m文件,后来MATLAB突然卡住,就关了,之后再打开,就显示如下: Warning: Di ...
- matlab 函数优化问题,matlab求解最优化问题 Matlab在最优化问题中的应用举例.doc
matlab求解最优化问题 Matlab在最优化问题中的应用举例 导读:就爱阅读网友为您分享以下"Matlab在最优化问题中的应用举例"的资讯,希望对您有所帮助,感谢您对92的支持 ...
最新文章
- java RSA加密解密实现(含分段加密)
- devserver配置_03-零基础学webpack4.0之html相关配置
- vim 删除行_【收藏】138条 Vim 命令、操作、快捷键全
- 查看matlab当前路径,MATLAB R2012a 的当前路径和路径搜索
- leetcode 7. 反转整数(python3)
- 益阳计算机应用专业推荐一下,益阳职业技术学院10大好专业推荐
- 网络层传输协议(详解)
- LapSRN 超分辨率
- html的特殊符号五角星,五角星怎么打出来?打出五角星符号的方法
- spark的三种部署模式
- 设计窗口模拟教室座位表java,基于web的考研自习教室座位管理(完整源码+论文全套+教学视频)...
- ipad触摸测试软件,平板电脑屏幕灵敏度测试:iPad系列最出色
- 哔哩哔哩 2019校园招聘 开发工程师-2018.09.21
- leetcode每日一题第三十二天-剑指 Offer 65. 不用加减乘除做加法(easy??middle了吧)
- js控制蓝牙笔翻页功能(键盘事件)
- 百度编辑器Editor 1.4.3.2 asp.net版最新使用方法
- 高血压补钾降压该咋吃
- PHP接入网易易盾验证码
- 图片和网络的第三方的地址汇总
- 产品经理设计产品流程都有哪些步骤