Ho avuto lo stesso problema diversi anni fa e poi ho creato il mio programma Imhof usando Python e Numerical. Il trucco è selezionare una gamma di altitudini e applicare una tavolozza di colori lineare. Alla fine è necessario combinare i diversi risultati. Questo è un frammento del mio codice (molto semplificato)
......
abajos = nrange(dtm, 0,500)
amedias = nrange(dtm, 499, 4000)
amaximas = where (dtm > 4000, dtm, 0)
.......
abajos_i = convert.num2img(abajosbin)
abajos_ic = ImageOps.colorize(abajos_i, (147, 160, 150),(215, 210, 188))
amedias_i = convert.num2img(amediasbin)
amedias_ic = ImageOps.colorize(amedias_i, (215, 210, 188), (206, 187, 173))
amaximas_i = convert.num2img(amaximasbin)
amaximas_ic = ImageOps.colorize(amaximas_i, (206, 187, 173), (255,255,255))
ImageOps fa parte del pacchetto Image di Python.
La conversione da tiff (16b) a numerico è stata pazza usando il pynumeric (penso, non ricordo molto bene).
Le tuple come (147, 160, 150), (215, 210, 188) indicano da quale colore a quale colore voglio la mia scala di colori e quelli RGB riflettono Imhof paleete.
Il risultato è un DTM con una palette Imhof molto dettagliata, molto più di 256 colori.
Se qualcuno vuole creare un plugin Imhof, sono molto felice di passare il codice.