• 大小: 1.31MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-16
  • 语言: 其他
  • 标签: 高斯模板  

资源简介

生成高斯模板,模板大小、均值、方差等参数可自己手动设置。利用生成的模板进行高斯滤波。

资源截图

代码片段和文件信息


#include “cv.h“
#include “highgui.h“
#include “math.h“
#include “stdio.h“

bool FunGauss(int Nfloat sigmaint* iTemplatefloat* fCof);

int main(int argcchar** argv)
{
IplImage* src;

if (argc == 2 && (src = cvLoadImage(argv[1]0)) != 0)
{
//高斯滤波后图像
IplImage* dst_Gauss = cvCreateImage(cvGetSize(src)src->depthsrc->nChannels);
cvCopy(srcdst_GaussNULL);
//原图像与高斯滤波后图像之差
IplImage* dst_differ = cvCreateImage(cvGetSize(src)src->depthsrc->nChannels);

int ijmn;  //循环变量
int iGray;  //灰度值

float fC = 0;  //高斯模板系数
int N = 3;  //模板边长的一半
int* iTemplate = new int[(2*N+1)*(2*N+1)];

FunGauss(N2.0iTemplate&fC);  //生成N*N高斯模板,系数存放在iTemplate里

//显示生成的高斯模板系数
for (i=0;i<2*N+1;i++)
{
for (j=0;j<2*N+1;j++)
{
printf(“%d “iTemplate[i*(2*N+1)+j]);
if (j == 2*N)
{
printf(“\n“);
}

}
}

for (i=N+1;iheight-N-1;i++)
{
for (j=N+1;jwidth-N-1;j++)
{
iGray = 0;
for (m=0;m<2*N+1;m++)
{
for (n=0;n<2*N+1;n++)
{
iGray += 
(int)((uchar*)(src->imageData+(i-N-1+m)*src->widthStep))[j-N-1+m]
*iTemplate[m*(2*N+1)+n];
}
}
((uchar*)(dst_Gauss->imageData+i*src->widthStep))[j] = (uchar)(iGray*fC);
}
}

cvNamedWindow(“src“1);
cvShowImage(“src“src);
cvNamedWindow(“dst_Gauss“1);
cvShowImage(“dst_Gauss“dst_Gauss);
cvWaitKey(0);
cvDestroyWindow(“src“);
cvReleaseImage(&src);
cvDestroyWindow(“dst_Gauss“);
cvReleaseImage(&dst_Gauss);

return 0;
}

return -1;
}

bool FunGauss(int Nfloat sigmaint* iTemplatefloat* fCof)
{
int ij;  //循环变量
float t;  //指数部分
int C;    //归一化系数
float* fTemp =new float[(N+1)*(N+1)];
int* iMat = new int[(2*N+1)*(2*N+1)];
int* iArray =new int[(2*N+1)*(2*N+1)];
iArray = iTemplate;
for (i=0;i {
for (j=0;j {
t=(float)(i*i+j*j)/(float)pow(sigma2);  //计算指数项
fTemp[i*(N+1)+j] = (float)(1.0/exp(t/2));  //计算高斯函数离散化后对应的模板取值
}
}
C = (int)ceil(1/fTemp[(N+1)*(N+1)-1]+0.5);  // 计算归一化系数

//给模板右下角赋值
for (i=0;i {
for (j=0;j {
iMat[(N+i)*(2*N+1)+(N+j)] = (int)(fTemp[i*(N+1)+j]*C+0.5);
}
}

//给模板左下角赋值
for (i=N;i<2*N+1;i++)
{
for (j=0;j {
iMat[i*(2*N+1)+j] = iMat[i*(2*N+1)+(2*N-j)];
}
}

//给模板上半部分赋值
for (i=0;i {
for (j=0;j<2*N+1;j++)
{
iMat[i*(2*N+1)+j] = iMat[(2*N-i)*(2*N+1)+j];
}
}

//计算总系数
for (i=0;i<2*N+1;i++)
{
for (j=0;j<2*N+1;j++)
{
*fCof += (float)iMat[i*(2*N+1)+j];
}
}
*fCof = (float)1.0/(*fCof);


//将得到的模板数返回
for (i=0;i<2*N+1;i++)
{
for (j=0;j<2*N+1;j++)
{
iArray[i*(2*N+1)+j] = iMat[i*(2*N+1)+j];
}
}

delete iMat;
delete fTemp;
return TRUE;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     217154  2009-03-31 12:50  Gaussian_高斯滤波\Debug\Gaussian.exe

     文件     236072  2009-03-31 12:50  Gaussian_高斯滤波\Debug\Gaussian.ilk

     文件      18014  2009-03-31 12:50  Gaussian_高斯滤波\Debug\Gaussian.obj

     文件    4109316  2009-03-31 12:45  Gaussian_高斯滤波\Debug\Gaussian.pch

     文件     484352  2009-03-31 12:50  Gaussian_高斯滤波\Debug\Gaussian.pdb

     文件     164864  2009-03-31 12:50  Gaussian_高斯滤波\Debug\vc60.idb

     文件      94208  2009-03-31 12:50  Gaussian_高斯滤波\Debug\vc60.pdb

     目录          0  2009-09-28 10:35  Gaussian_高斯滤波\Debug

     文件       2979  2009-03-31 12:50  Gaussian_高斯滤波\Gaussian.cpp

     文件       4393  2009-03-27 15:47  Gaussian_高斯滤波\Gaussian.dsp

     文件        522  2009-03-27 14:36  Gaussian_高斯滤波\Gaussian.dsw

     文件      41984  2009-04-03 12:10  Gaussian_高斯滤波\Gaussian.ncb

     文件      54784  2009-04-03 12:10  Gaussian_高斯滤波\Gaussian.opt

     文件       1359  2009-03-31 12:50  Gaussian_高斯滤波\Gaussian.plg

     目录          0  2009-04-03 12:10  Gaussian_高斯滤波

----------- ---------  ---------- -----  ----

              5430001                    15


评论

共有 条评论

相关资源