ip_lib.c
/* calcola la somma di prodotti tra il kernel fornito e il canale fornito, partendo dalla posizione (start_h,start_w) del canale */
calcola la somma di prodotti tra il kernel fornito e il canale fornito, partendo dalla posizione (start_h,start_w) del canale
calcola la somma di prodotti tra il kernel fornito e il canale fornito partendo dalla posizione ( start_h start_w ) del canale
float convolve_channel(channel_t ch, channel_t filter, unsigned int start_h, unsigned int start_w)
{
    if (start_h + filter.h <= ch.h && start_w + filter.w <= ch.w)
    {
        float result = 0.0;
        unsigned int row, col;
        for (row = 0; row < filter.h; row++)
            for (col = 0; col < filter.w; col++)
                result += ch.data[start_h + row][start_w + col] * filter.data[row][col];
        return result;
    }
    else
    {
        printf("Invalid start_h or start_w, or channel too small \n");
        exit(1);
    }
}
float convolve_channel ( channel_t ch , channel_t filter , unsigned int start_h , unsigned int start_w ) { if ( start_h + filter . h <= ch . h && start_w + filter . w <= ch . w ) { float result = 0.0 ; unsigned int row , col ; for ( row = 0 ; row < filter . h ; row ++ ) for ( col = 0 ; col < filter . w ; col ++ ) result += ch . data [ start_h + row ] [ start_w + col ] * filter . data [ row ] [ col ] ; return result ; } else { printf ( " \n " ) ; exit ( 1 ) ; } }
calcola la somma di prodotti tra il kernel fornito e il canale fornito, partendo dalla posizione (start_h,start_w) del canale
calcola la somma di prodotti tra il kernel fornito e il canale fornito partendo dalla posizione ( start_h start_w ) del canale