生成高斯核

    xiaoxiao2026-03-25  10

    // 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; }
    转载请注明原文地址: https://ju.6miu.com/read-1308174.html
    最新回复(0)