Wir schreiben ein erstes richtiges RTA-Programm ...
Die folgenden kleinen Programme sind ein perfekter Einstieg in das Programmieren mit RTA, dem RT-Assembler unter Vimage.
Zur Übersicht über die Befehle am besten die
Referenzkarte (deutsch oder englisch) ausdrucken:
Vimage nutzt RTA außer, um Kartennetzentwürfe zu rechnen, auch für Grauwerttransformationen. Dies erfolgt mit der über das Radiometriemenü aufrufbaren Radio engine. Weil sich die Radio engine besonders einfach bedienen lässt, ist sie für den Einstieg in Vimage/RTA ideal geeignet.
Die Radio engine fragt nach einem RT-Assemblerprogramm, und dieses muss lediglich einen Eingabegrauwert x in einen Ausgabegrauwert x' umrechnen. Das ist alles ...
1. Beispiel: Alle Grauwerte eines Bildes mit 128 füllen
RTA-Programme bestehen nur aus genz wenigen Befehlen. Wir stellen die Programme hier mit allen empfohlenen Deklarationen vor. Im praktischen Tagesgeschäft können die Befehle _name, _var, exit und _end auch weggelassen werden.
Das allererste Programm soll ein Bild konstant mit Grauwert 128 füllen.
Formel:
x' = ƒ(x) = 128
Programm:
_name Bild~mit~Grauwert~128~füllen mov x' 128 ; Eine 128 nach x' schaffen exit _end
Programm rt_radio_bild_mit_128_fuellen.rta downloaden.
Bitte die im Menü Radiometrie befindliche Radio engine rufen. Die engine fragt nach einem RT-Assemblerprogramm. Hier bitte Programm radio_bild_mit_grauwert_128_fuellen.rta wählen.
Das Programm setzt alle Pixel auf Grauwert 128:
2. Beispiel: Alle Grauwerte eines Bildes mit 2 multiplizieren
Formel:
x' = ƒ(x) = 2 x
Programm:
_name Grauwerte~verdoppeln mov x' x ; x nach x' schaffen mul x' 2 ; mit 2 multiplizieren exit ; Ende _end
Programm rt_radio_grauwerte_verdoppeln.rta downloaden.
Nach der Abarbeitung mit der Radio engine haben alle Grauwerte, die vormals Grauwert 128 hatten, nun Grauwert 256:
3. Beispiel: Eine Konstante c auf alle Grauwerte addieren
Nun soll ein wählbarer Wert c auf alle Grauwerte addiert werden. Dessen Abfrage per Dialog ist mit dem Befehl input leicht möglich. Ein kleines Problem hierbei ist, dass die Radio engine das RTA-Programm für jedes Pixel einmal abarbeitet. Das hätte nun zur Folge, dass der Grauwert ebenfalls für jedes Pixel einmal abgefragt würde. Mit einer Variablen initial kann dies verhindert werden. Das Programm durchläuft nur beim allerersten Aufruf den input-Befehl und den Befehl mov initial 1. Die Variable initial ungleich Null sorgt ab dem 2. Aufruf dafür, dass der tstne-Befehl zur Marke go springt ...
Formel:
x' = ƒ(x) = x + c
Programm:
_name Wählbare~Konstante~addieren _var c _var initial tstne initial go ; Test, ab initial Null ist, wenn nicht Sprung nach go input c Zu~addierende~Konstante ; Konstante c abfragen mov initial 1 ; initial auf 1 setzen; ist nun nicht mehr Null go: ; Marke, die das Sprungziel ist mov x' x ; x holen und nach x' schaffen add x' c ; c auf x' addieren exit ; Ende _end
Programm rt_radio_waehlbare_konstante_addieren.rta downloaden.
Irgendein Bild in Vimage laden. Dies kann das Bild rm_map_demo_earth_gtopo305_1200arcsec.fix (ca. 1,6 MByte) sein oder ein beliebiges anderes Bild.
Dann die Radio engine rufen und radio_waehlbare_konstante_addieren.rta abarbeiten. Bei der Abfrage der Konstanten c, z. B. 100 eingeben. Das Programm macht nun alle Pixel z. B. 100 Grauwerte dunkler:
4. Beispiel: Alle Grauwerte, die -32768 sind, auf -9999 setzen
Dies ist eine Teilaufgabe, die man z. B. beim Zu-Fuß-Import von SRTM-Daten aus dem Hgt-Format lösen muss. In Hgt haben alle Leerpixel Grauwert -32768. Leerpixel in Vimage sollen Grauwert -9999 haben.
Programm:
_name Grauwert~-32768~auf~-9999~setzen mov x' x ; x nach x' schaffen cmpne x' -32768 go ; Sprung nach go, sofern x nicht -32768 ist mov x' -9999 ; -9999 nach x' schaffen go: ; Marke, die Sprungziel ist exit ; Ende _end
Programm kann als rt_radio_grauwert_-32768_auf_-9999_setzen.rta heruntergeladen werden.