Il doppio puntatore ti serve per gestire l'allocazione dinamica dell'array (se non conosci a priori il numero di righe e colonne).
Considera che la scrittura
char im[x][y];
se x e y non sono costanti, non e' consentita.
Se invece sai che l'immagine sara' di 100 righe da 200 caratteri, puoi scrivere
char im[100][200];