Skip to content
Snippets Groups Projects
main.c 3.23 KiB
Newer Older
Og's avatar
Og committed
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>

#include "traitementPGM.h"
Og's avatar
Og committed

void write_error_graphic_file(const char *filename, const uint32_t size_n[], const double error_n[], const uint32_t length_data);
void Integration_numerique(void);
void Convolution_filtrage(void);
Og's avatar
Og committed
void Convolution_test(void);
Og's avatar
Og committed
void Convolution_1d(void);

void write_error_graphic_file(const char *filename, const uint32_t size_n[], const double error_n[], const uint32_t length_data)
Og's avatar
Og committed
{
    FILE *f = fopen(filename, "w");

    for (uint32_t i = 0; i < length_data; i += 1)
    {
        fprintf(f, "%u,%lf\n", size_n[i], error_n[i]);
    }
    fclose(f);
}

void Integration_numerique()
{
    uint32_t size_n[] = {5, 10, 50, 100, 500, 1000};
    double error_n[6];
    for (uint32_t i = 0; i < sizeof(size_n) / sizeof(size_n[0]); i += 1)
    {
        printf("N = %u\n", size_n[i]);
        printf("Res integre : %.5lf\n", interg(1, 5, size_n[i], my_function_x));
        error_n[i] = E_n(size_n[i]);
        printf("E(N) = %lf\nI = %lf\n", error_n[i], VALUE_I);
    }

    write_error_graphic_file("graphique_data.txt", size_n, error_n, 6);
}

void Convolution_filtrage()
{
    char filname[] = "part3_1.pgm";
    char output_image[] = "out.pgm";
    char output_convolve[] = "convolve.pgm";

    char sdl_name[] = "convolution";

Og's avatar
Og committed
    pgm img;
Og's avatar
Og committed
    {
        printf("Impossible de lire l'image shouaitée\n");
Og's avatar
Og committed
    }
    printf("%d %d\n", img.pixels.col, img.pixels.row);

    pgm_write_to_file(&img, output_image);

    // T tab []= {0,0,0,0,1,0,0,0,0};
    T tab[] = {1, 1, 1, 1, 1, 1, 1, 1, 1};
    // T tab []= {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    // T tab[]=  {1,4,6,4,4,16,24,16,46,24,36,24,64,16,24,16,41,4,6,4,1};
    // T tab[] = {0,-1,0,-1,5,-1,0,-1,0};
    // T tab[] = {0,-1,0,-1,4,-1,0,-1,0};
    matrix *kernel = matrix_create_from_array(3, 3, tab, 9);
Og's avatar
Og committed
    matrix_print(kernel);

    pgm res;
    res.max = img.max;
    matrix_init(&res.pixels, img.pixels.col, img.pixels.row);
Og's avatar
Og committed

    convolve_matrix(&res.pixels, &img.pixels, kernel, 9);

    int32_t norm_max = matrix_max(&res.pixels);
    int32_t norm_min = matrix_min(&res.pixels);

    printf("Min : %d, Max : %d\n", norm_min, norm_max);
    normalise_matrix(&res.pixels, norm_min, norm_max, res.max);
Og's avatar
Og committed

Og's avatar
Og committed
    PrintImagePGM(res, sdl_name);
    pgm_write_to_file(&res, output_convolve);
Og's avatar
Og committed

    matrix_free(&img.pixels);
    matrix_free(&res.pixels);
    matrix_destroy(kernel);
Og's avatar
Og committed
}

Og's avatar
Og committed
void Convolution_1d(void)
{
    int PeriodeEchentillonage = 400;
    double signal[PeriodeEchentillonage];
    double out[PeriodeEchentillonage];
    int s1_amplitude = 1;
    int s1_frequence = 50;

    int s2_amplitude = 10;
    int s2_frequence = 5;
    double pi = 3.14;

    for (int i = 0; i < PeriodeEchentillonage; i++)
    {
        signal[i] = s1_amplitude * cos(2 * pi * s1_frequence * i) + s2_amplitude * cos(2 * pi * s2_frequence * i);
        // printf("%f\n",signal[i]);
    }

    convolution_signal(signal, out, PeriodeEchentillonage);
}

Og's avatar
Og committed
int main()
{
    printf("TP math - Integrales\n");

    Convolution_filtrage();

Og's avatar
Og committed
    Convolution_1d();

Og's avatar
Og committed
    return EXIT_SUCCESS;
}