OpenCV实现Matlab的fspecial('gaussian',m,sigma) 生成高斯核

原创 2013年12月06日 11:02:59
Matlab:
function K = kernal(sigma)
m = ceil(2*sigma+1);  
K = fspecial('gaussian',m,sigma);


VS2008 C++ OpenCV:

Mat gaussian_kernal(int sigma)			//sigma既是高斯核半径,又是真正的sigma
{
	int dim = ceil(2.0 * sigma + 1);	//高斯核大小为dim*dim
	Mat K(dim, dim, CV_32FC1);
	//生成二维高斯核
	float s2 = 2.0 * sigma * sigma;
	for(int i = (-sigma); i <= sigma; i++)
	{
		int m = i + sigma;
		for (int j = (-sigma); j <= sigma; j++)
		{
			int n = j + sigma;
			float v = exp(-(1.0*i*i + 1.0*j*j) / s2);
			K.ptr<float>(m)[n] = v;
		}
	}
	Scalar all = sum(K);
	Mat gaussK;
	K.convertTo(gaussK, CV_32FC1, (1/all[0]));
	return gaussK;
}
//再来一个既含有高斯核直径kernelSize,又有单独的sigma的版本:
//double sigma0 = (halfSize - 1)/ 2.0;
Mat gaussian_kernal(int kernelSize, double sigma0)
{  
int halfSize = (kernelSize-1)/ 2;
Mat K(kernelSize, kernelSize, CV_32FC1);  

//生成二维高斯核  
double s2 = 2.0 * sigma0 * sigma0;  
for(int i = (-halfSize); i <= halfSize; i++)  
{  
int m = i + halfSize;  
for (int j = (-halfSize); j <= halfSize; j++)  
{  
int n = j + halfSize;  
float v = exp(-(1.0*i*i + 1.0*j*j) / s2);  
K.ptr<float>(m)[n] = v;  
}  
}  
Scalar all = sum(K);  
Mat gaussK;  
K.convertTo(gaussK, CV_32FC1, (1/all[0]));  


return gaussK;  
}  

相关文章推荐

OpenCV二维高斯滤波核实现 matlab的fspecial函数

OpenCV二维高斯滤波核实现 matlab的fspecial函数,与matlab结果一致

opencv生成高斯核

[cpp] view plaincopyprint? Matlab:  function K = kernal(sigma)  m = ceil(2*sigma+1);    K = fspec...
  • todayq
  • todayq
  • 2014年04月02日 13:47
  • 1906

Matlab中fspecial的用法

Fspecial函数用于创建预定义的滤波算子,其语法格式为: h = fspecial(type) h = fspecial(type,parameters,sigma) 参数type制定算子类...

高斯(核)函数简介

高斯(核)函数简介  1函数的基本概念 所谓径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数。通常定义为空间中任一点x到某一中心xc之间欧氏距...
  • rns521
  • rns521
  • 2012年04月06日 21:56
  • 12579

图像之二维高斯核

下面的代码是计算二维高斯核,代码是用纯C写的,可移植性应该不错。计算得到的二维高斯核可以用来对图像进行高斯滤波。由于高斯滤波器是可分的,所以可以用一维高斯核得到二维高斯核(其实中间涉及到一些证明,这里...

matlab生成二维服从高斯分布的数据

由于实验需要,需要生成两类模式的数据,同时这两类数据要服从正态分布(高斯分布)。 使用matlab来实现:mu = [2 3]; SIGMA = [1 0; 0 2]; r = mvnrnd(mu,...

生成高斯模板(C++)

 图1. N维空间正态分布方程(该公式与图2的是同一个) 高斯模糊是一种图像模糊滤波器,它用正态分布计算图像中每个像素的变换。N 维空间正态分布方程为 (图2)在二维空间定义为 (图3)其中 r 是模...
  • cay22
  • cay22
  • 2010年05月18日 10:38
  • 6412

高斯模板生成的过程

高斯核是唯一可以产生多尺度空间的核,一个图像的尺度空间L(x,y,σ) ,定义为原始图像I(x,y)与一个可变尺度的2维高斯函数G(x,y,σ)卷积运算。 二维空间高斯函数:等价于 ...

OPENCV2学习(1)_生成运动模糊核(OPENCV2 实现Matlab中fspecial的motion功能)

这段时间在用OPENCV2实现图像运动模糊图像复原功能,其中需要合成不同模糊长度和模糊角度的运动模糊图像,由于没有直接可用的函数,于是自己编了一个,采用OPENCV2风格,代码如下: void ge...
  • lei_yin
  • lei_yin
  • 2014年05月28日 10:58
  • 2401

fspecial()函数解析

今天来总结一下fspecial()函数用法: h = fspecial(type) h = fspecial(type,para) h = fspecial(type, pare, sigma)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenCV实现Matlab的fspecial('gaussian',m,sigma) 生成高斯核
举报原因:
原因补充:

(最多只允许输入30个字)