ip_lib.c
/* Effettua la convoluzione di un ip_mat "a" con un ip_mat "f".
 * La funzione restituisce un ip_mat delle stesse dimensioni di "a".
 *
 * I parametri della funzione non subiscono modiche, il risultato viene salvato e restituito in output
 * all'interno di una nuova ip_mat.
 */
Effettua la convoluzione di un ip_mat "a" con un ip_mat "f".
La funzione restituisce un ip_mat delle stesse dimensioni di "a".

I parametri della funzione non subiscono modiche, il risultato viene salvato e restituito in output
all'interno di una nuova ip_mat.
Effettua la convoluzione di un ip_mat " a " con un ip_mat " f " . La funzione restituisce un ip_mat delle stesse dimensioni di " a " . I parametri della funzione non subiscono modiche il risultato viene salvato e restituito in output all ' interno di una nuova ip_mat .
ip_mat *ip_mat_convolve(ip_mat *a, ip_mat *f)
{
    ip_mat *padded, *out;
    channel_t fil_ch;
    unsigned int ch, row, col, pad_h, pad_w;
    not_null_ip_mat(a);
    not_null_ip_mat(f);
    pad_h = (f->h - 1) / 2;
    pad_w = (f->w - 1) / 2;
    padded = ip_mat_padding(a, pad_h, pad_w);
    out = ip_mat_create(a->h, a->w, a->k, 0.0);
    for (ch = 0; ch < a->k; ch++)
    {
        if (ch < f->k)
            fil_ch = get_channel(f, ch);
        for (row = 0; row < a->h; row++)
            for (col = 0; col < a->w; col++)
                set_val(out, row, col, ch, convolve_channel(get_channel(padded, ch), fil_ch, row, col));
    }
    ip_mat_free(padded);
    return out;
}
ip_mat * ip_mat_convolve ( ip_mat * a , ip_mat * f ) { ip_mat * padded , * out ; channel_t fil_ch ; unsigned int ch , row , col , pad_h , pad_w ; not_null_ip_mat ( a ) ; not_null_ip_mat ( f ) ; pad_h = ( f -> h - 1 ) / 2 ; pad_w = ( f -> w - 1 ) / 2 ; padded = ip_mat_padding ( a , pad_h , pad_w ) ; out = ip_mat_create ( a -> h , a -> w , a -> k , 0.0 ) ; for ( ch = 0 ; ch < a -> k ; ch ++ ) { if ( ch < f -> k ) fil_ch = get_channel ( f , ch ) ; for ( row = 0 ; row < a -> h ; row ++ ) for ( col = 0 ; col < a -> w ; col ++ ) set_val ( out , row , col , ch , convolve_channel ( get_channel ( padded , ch ) , fil_ch , row , col ) ) ; } ip_mat_free ( padded ) ; return out ; }
Effettua la convoluzione di un ip_mat "a" con un ip_mat "f".
Effettua la convoluzione di un ip_mat " a " con un ip_mat " f " .
/* inizializza matrici per il calcolo della convolve */ /* questa operazione assicura che vengano applicati i primi a->k canali del filtro all'immagine, e se il filtro non ha canali sufficienti si applica sempre l'ultimo canale del filtro disponibile */ /* libera la matrice temporanea */