// makeGause.cpp : 定义控制台应用程序的入口点。
//
#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;
}
生成高斯核
最新推荐文章于 2024-06-29 19:01:37 发布