#include <stdio.h>
#include <math.h>
#include <memory.h>
#include <malloc.h>
#define ENumber 2.71828183f
#define PI 3.1415926f
int makeGaussianData(
float ** data,
int width,
int height,
float filterRatio){
int i, j;
float sum =
0.0f;
*data = (
float*)
malloc(
sizeof(
float) * width * height);
for(i =
0; i < height; i ++){
for(j =
0; j < width; j ++){
float temp =
0.0f;
temp = -
1.0f * ((j - width /
2) * (j - width /
2) + (i - height /
2) * (i - height /
2)) / (
2.0f * filterRatio * filterRatio);
temp = powf(ENumber, temp);
(*data)[i * width + j] = (
1.0f / (
2.0f * PI * filterRatio * filterRatio)) * temp;
sum += (*data)[i * width + j];
}
}
printf(
"sum = %f\n", sum);
for(i =
0; i < height; i ++){
for(j =
0; j < width; j ++){
(*data)[i * width + j] = (*data)[i * width + j] / sum;
}
}
return 0;
}
int makeOneDimGaussKernel(
float ** data,
int num,
float sigma)
{
int i =
0;
*data = (
float*)
malloc(
sizeof(
float) * num);
float sum =
0.0f;
for(i =
0; i < num; i ++)
{
float temp =
0.0f;
temp = -
1.0f * (i - num /
2) * (i - num /
2) / (
2 * sigma * sigma);
temp = powf(ENumber, temp);
(*data)[i] = (
1.0f / (
2.0f * PI * sigma * sigma)) * temp;
sum += (*data)[i];
}
printf(
"onesum = %f\n", sum);
for(i =
0; i < num; i ++)
{
(*data)[i] = (*data)[i] / sum;
}
return 0;
}
int main(
int argc,
char* argv[])
{
float * gaussData = NULL;
int width =
5;
int height =
5;
float sigma =
0.8f;
makeGaussianData(&gaussData, width, height, sigma);
for(
int i =
0; i < height; i ++)
{
for(
int j =
0; j < width; j ++)
{
printf(
"%f ", gaussData[width * i + j]);
}
printf(
"\n");
}
float * dataOne = NULL;
makeOneDimGaussKernel(&dataOne, width, sigma);
printf(
"\n");
for(
int i =
0; i < width; i ++)
{
printf(
"%f ", dataOne[i]);
}
printf(
"\n");
free(dataOne);
free(gaussData);
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-1308174.html