📄 main.cpp
字号:
// gen 2D guass window
//
#define PI 3.1415926
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "string.h"
int main(int argc, char* argv)
{
// 输入参数对么?
//if (argc != 5)
//{
//printf("pls input 5 params\n");
// return 0;
//}
// range
// 注意 range 是奇数
//int range = argv[0];
//if (range % 2 != 0)
//{
// printf("range must be odd number!\n");
// return 0;
//}
int range = 5;
// sigma 1 1.2 1.4 1.5 1.6 1.8 2.0
//double sigma = argv[2];
double sigma_x = 1.0;
double sigma_y = 1.0;
//double sigma_x = 0.707;
//double sigma_y = 0.707;
//double sigma_x = 0.79358;
//double sigma_y = 0.79358;
//double sigma_x = 0.890762;
//double sigma_y = 0.890762;
//double sigma_x = 0.999849;
//double sigma_y = 0.999849;
//double sigma_x = 0.3535; // 1.414/4
//double sigma_y = 0.3535; // 1.414/4
//double sigma_x = 0.7070; // 1.414/4
//double sigma_y = 0.7070; // 1.414/4
//double sigma_x = 0.236; // 1.414/6
//double sigma_y = 0.236; // 1.414/6
// dx 步长 0.1 dy 步长0.1
//double dx = argv[1];
double dx = 0.1;
double dy = 0.1;
// 窗口文件名
char GuassWndwFileName[255] = "gs2DSigma_x1_y1";
//strcpy(GuassWndwFileName, &argv[3]);
// 数组记录数据
int gsLoc = 0;
// 目前257是足够大了
double guassWin[257];
//memset(guassWin, 0, 257);
//ZeroMemory(guassWin, sizeof(257*sizeof(double));
// 总的值
double total_sum = 0;
// 每个cell的值
double cell_sum = 0;
//
double mid_dx = dx/2;
double mid_dy = dy/2;
double start_x = -1 * (double(range)/2);
double start_y = -1 * (double(range)/2);
double end_x;
double end_y;
//while(start_x < (double)range/2 &&
// start_y < (double)range/2
// )
for(; start_x < (double)range/2; start_x = start_x + 1.0 )
{
start_y = -1 * (double(range)/2);
for(; start_y < (double)range/2; start_y = start_y + 1.0 )
{
// 当前计算的范围
end_x = start_x + 1.0;
end_y = start_y + 1.0;
// 本单元格的高斯值清零
cell_sum = 0.0;
// 以一个步长为单位,从每个步长的中点开始计算
for(double tag_x = start_x + mid_dx; tag_x < end_x; tag_x = tag_x + dx )
{
for(double tag_y = start_y + mid_dy; tag_y < end_y; tag_y = tag_y + dy )
{
// 前面的系数值
double preComp = (double)1.0/(sigma_x * sigma_y * sqrt(2*PI));
// 后面部分指数值
double expComp_x = (-1)*(tag_x * tag_x)/(2*(sigma_x*sigma_x));
double expComp_y = (-1)*(tag_y * tag_y)/(2*(sigma_y*sigma_y));
double expComp = expComp_x + expComp_y;
// 后面部分值
double suffComp = (double)exp(expComp);
// guass值
double guassVal = preComp * suffComp;
//
cell_sum += guassVal;
}// end for
}//end for
// 记录到数组
guassWin[gsLoc] = cell_sum;
gsLoc++;
//start_x = start_x + 1.0;
//start_y = start_y + 1.0;
//total_sum
total_sum += cell_sum;
}
}//end outer for
//
FILE *resFile = fopen(GuassWndwFileName, "w");
// 显示到文件
int len_1D = (int)sqrtl(gsLoc);
for(int i = 0; i < len_1D ; i++)
{
fprintf(resFile, "\n");
for(int j = 0; j < len_1D ; j++)
{
int loc = i * len_1D + j;
fprintf(resFile, "[%10.5f \t %10.5f]", guassWin[loc], guassWin[loc]/total_sum);
}//end for
}// end for
// 归一化
fprintf(resFile, " \n\n\n");
for(int i = 0; i < len_1D ; i++)
{
fprintf(resFile, "\n");
for(int j = 0; j < len_1D ; j++)
{
int loc = i * len_1D + j;
fprintf(resFile, "%f, ", guassWin[loc]/total_sum);
}//end for
}// end for
if (resFile)
{
fclose(resFile);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -