模仿matlab里的fspecial()函数,创建一个自定义空间高斯滤波器模板。
基本原理:二维高斯核函数的基本形式是这样滴:
通常我们的坐标都是x和y整数,要产生一个3x3的滤波器,我们要以中心为基础取样,这样第一个值为(-1,-1),以后依次排序到(1,1)。这样就可以产生一个mxn的滤波器模板了。
基于opencv的程序如下:
CvMatguss(int size,float sigma)
{
float w = 2.0sigmasigma;
CvMatK = cvCreateMat(size,size,CV_32FC1);
int m = size / 2;
int n = size / 2;
for (int i = (-m);
i <= m;
i++)
{
int row = i + m;
for (int j = (-n);
j <= n;
j++)
{
int col = j + n;
float v = exp(-(1.0ii + 1.0jj) / w);
cvmSet(K,row,col,v);
}
}
CvScalar p;
p = cvSum(K);
cvConvertScale(K, K, 1 / p.val[0], 0);
return K;
}
void printarry(CvMatzero)
{
for (int i = 0;
i < zero->height;
i++)
{
//float p = (float*)(zero->data.ptr + i*zero->step);
for (int j = 0;
j width;
j++)
{
float value = https://www.it610.com/article/cvGetReal2D(zero, i, j);
//float value = https://www.it610.com/article/*(p + j);
printf("%f “, value);
}
printf(”\n");
}
}
void main()
{
CvMat*K = guss(3, 0.5);
printarry(K);
system(“pause”);
}
【用opencv模仿matlab中的fspecial()函数创建一个自定义空间高斯滤波器模板】结果和matlab的fspecial(‘gaussian’, [3 3],0.5)进行对比如图所示:
文章图片
文章图片
推荐阅读
- 人脸识别|【人脸识别系列】| 实现自动化妆
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- opencv|图像处理之椒盐噪声的添加与去除
- 人脸识别|【人脸识别系列】| 实现人脸截图保存并编写128维特征向量
- opencv|网络爬虫入门练习
- OpenCV|【OpenCV 完整例程】89. 带阻滤波器的传递函数
- OpenCV|【OpenCV 完整例程】90. 频率域陷波滤波器
- OpenCV|【OpenCV 完整例程】22. 图像添加非中文文字
- OpenCV|【OpenCV 完整例程】91. 高斯噪声、瑞利噪声、爱尔兰噪声
- opencv|python+opencv车道线,实线虚线的检测