È data una immagine monocromatica in formato PFM (dati di tipo float).
Si scriva un programma che utilizzi la GPU per effettuare le seguenti operazioni:
riscalamento dei valori dei singoli pixel secondo la formula
nuovo = (vecchio - minval)/(maxval - minval);
dove maxval e minval sono i valori massimi e minimi trovati al punto precedente (20 punti);
BONUS: si corregga la gamma dell'immagine (riscalata) con un coefficiente 0.5 (la correzione gamma è data dalla formula p^g dove p è il valore del pixel e g il coefficiente).
File ausiliari forniti:
pfmalign.h: fornisce strutture dati e funzioni per il
caricamento ed il salvataggio di immagini in formato PFM. Per immagini a 3 canali
i dati sono allineati a 4 canali.
Strutture definite:
struct imgInfo {
uint width; /* larghezza dell'immagine */
uint height; /* altezza dell'immagine */
uint channels; /* numero di canali reali dell'immagine */
size_t data_size; /* dimensioni in byte dell'array data */
float *data; /* dati */
};
Funzioni definite:
int load_pfm(const char *fname, imgInfo *img);
int save_pfm(const char *fname, const imgInfo *img);
che hanno come scopo rispettivamente il caricamento ed il salvataggio
dell'immagine dal/sul file fname con dati in img. Le funzioni
restituiscono 0 in caso di successo, 1 in caso di fallimento.
dati d'esempio: immagine 1600x1600, la Nebulosa dell'Aquila, i ‘Pilastri della Creazione’; minimo: 0, massimo 3194.12
I file PFM possono essere visualizzati con display.