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];