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结果一致
  • aimuHeart
  • aimuHeart
  • 2016年09月09日 17:22
  • 931

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

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

Matlab中fspecial的用法

Fspecial函数用于创建预定义的滤波算子,其语法格式为: h = fspecial(type) h = fspecial(type,parameters,sigma) 参数type制定算子类...
  • WindsInHust
  • WindsInHust
  • 2013年06月23日 01:23
  • 14544

今天终于弄清楚了fspecial('gaussian',3,1.8)怎么算的了

首先我们看一下用 fspecial生成的一个标准差为1.8,大小为3*3的高斯模板矩阵 >> fspecial('gaussian',3,1.8) ans =     0.0997    0....
  • ckghostwj
  • ckghostwj
  • 2013年09月29日 21:58
  • 1954

Opencv学习(1):高斯滤波

快乐虾@http://blog.csdn.net/lights_joy/欢迎转载,但请保留作者信息本文适用于opencv3.0.0, vs2013Opencv中提供了高斯滤波函数:/** @brief...
  • lights_joy
  • lights_joy
  • 2015年08月31日 21:57
  • 3069

opencv生成高斯核

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

高斯滤波(opencv)

int main() { IplImage* img = cvLoadImage("C:\\vvv.jpg", 0); IplImage *avgImg = cvCreateImag...
  • timidsmile
  • timidsmile
  • 2013年12月12日 21:53
  • 9125

fspecial()函数解析

今天来总结一下fspecial()函数用法: h = fspecial(type) h = fspecial(type,para) h = fspecial(type, pare, sigma)...
  • HowardLin
  • HowardLin
  • 2016年05月18日 22:12
  • 794

matlab中fspecial中生成高斯模板的解释以及c语言实现

下面这个函数是模拟fspecial中的生成高斯模板的函数。 function h=makefilter(size,sigma)   %size为模板大小   %sigma为标...
  • yansmile1
  • yansmile1
  • 2015年05月30日 20:42
  • 882

关于高斯模糊与opencv中的GaussianBlur函数

在上次的opencv源码解析之滤波前言1中,按照opencv_tutorials.pdf中的滤波部分试了下常用的4种滤波器的使用方法。在opencv的C++中,这4个函数分别为:blur,Gaussi...
  • vbLittleBoy
  • vbLittleBoy
  • 2013年06月27日 14:24
  • 43007
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenCV实现Matlab的fspecial('gaussian',m,sigma) 生成高斯核
举报原因:
原因补充:

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