Javascript
 

 Computertomograph

Hier soll die mathematische Arbeitsweise eines Computertomographen vereinfacht erklärt werden.
Auf die Idee zu diesem Programm kam ich durch den Artikel "Computer-Katzographie" von A. K. Dewdney in Spektrum der Wissenschaft Digest "Mathematische Unterhaltungen" 2/2002 (Seite 48).

Im Folgenden können Sie entweder selbst ein Bild malen und die Detektorwerte ausgeben lassen oder Ihren Computer aus eingegebenen Detektorwerten das Bild berechnen lassen:

Hinweise zur Bedienung

Erläuterung des Prinzips

Zeichenfläche
           
           
           
           

Legende
keine Zuordnung möglich
schwarz, im Detektor gezählt
weiß, nicht gezählt




Detektoren
6 Spalten: 0 0 0 0 0 0
4 Zeilen: 0 0 0 0
9 Diagonalen: ⌊ → ⌉ 0 0 0 0 0 0 0 0 0
⌈ → ⌋ 0 0 0 0 0 0 0 0 0


 Rechenschritte ausgeben

Bedienung

Das Programm hat gewissermaßen zwei Betriebsarten: Zum einen können Sie ein Bild zeichnen und erhalten die dazugehörigen Detektorwerte angezeigt. Zum anderen können Sie Detektorwerte eingeben und der Computer berechnet daraus das Bild.

Jede Schaltfläche kann außer mit der Maus auch durch die Tastenkombination [Alt] + den Buchstaben, der in der Beschriftung in eckigen Klammern steht, bedient werden.

Die Schaltfläche "Reset" lädt die Seite neu.

Sie können ein gezeichnetes oder berechnetes Bild als Cookie abspeichern. Klicken Sie dazu auf die Schaltfläche "Bild als Cookie speichern".

Falls ein gespeichertes Bild verfügbar ist, wird die Schaltfläche "Bild aus Cookie laden" aktiviert und durch Klick darauf können Sie dieses gespeicherte Bild anzeigen.

Bild zeichnen

Als erstes sehen Sie eine Zeichenfläche mit 4 x 6 weißen Bildpunkten. Diese Zeichenfläche können Sie in ihren Abmessungen verändern, indem Sie auf die Schaltfläche "Größe ändern" klicken. Sie werden dann aufgefordert, eine Zeilen- und eine Spaltenanzahl anzugeben, die jeweils zischen 2 und 50 liegen müssen. Außerdem können Sie angeben, welche Breite die Bildpunkte haben sollen. Diese Angabe wird als Anzahl Bildschirmpixel eingegeben und muss zwischen 5 und 50 liegen.

Bei einer Größenänderung werden neue Zeilen immer unten und neue Spalten immer rechts angehängt. Umgekehrt werden bei einer Verkleinerung die unteren Zeilen bzw. rechten Spalten gelöscht.

Um ein Bild zu zeichnen, klicken Sie auf diejenigen Bildpunkte, deren Farbe Sie ändern wollen. Bei jedem Klick ändert der Bildpunkt seine Farbe von weiß nach schwarz bzw. umgekehrt.

Sobald sich die Maus über einem Bildpunkt befindet, wird mit roten Rahmen um vier Detektoren angezeigt, zu welchen "Messergebnissen" dieser Bildpunkt beiträgt.

Mit Hilfe der drei Schaltflächen "alle weiß", "alle schwarz" und "invertieren" können Sie alle Bildpunkte gemeinsam entsprechend der Beschriftung verändern.

Detektorwerte eingeben

Unter der Zeichenfläche sehen Sie die Detektoren für Zeilen, Spalten und die beiden Diagonalen.
⌊ → ⌉ bezeichnet die Diagonalen, die von links unten nach rechts oben gehen,
⌈ → ⌋ diejenigen, die von rechts oben nach links unten gehen.
Der erste Detektor der ⌊ → ⌉-Diagonalen "zählt" die linke obere Ecke des Bildes;
der erste Detektor der ⌈ → ⌋-Diagonalen die rechte obere Ecke.

Sobald sich die Maus über einem Bildpunkt befindet, wird mit roten Rahmen um vier Detektoren angezeigt, zu welchen "Messergebnissen" dieser Bildpunkt beiträgt.

Sobald Sie auf "Werte eingeben" klicken, werden Sie aufgefordert, der Reihe nach die Detektorwerte einzugeben. Für jeden Wert erscheint ein Eingabefenster, in dem der abgefragte Detektor genannt und der zulässige Wertebereich angegeben wird.
Am Ende der Eingabe muss die Summe der Detektorwerte für Zeilen, Spalten und Diagonalen gleich sein, weil natürlich alle das vollständige Bild enthalten.

Nach Eingabe der Werte wird das Bild berechnet.

Sollte das Bild schon allein mit Hilfe unvollständig eingegebener Werte berechnet werden können, werden die fehlenden Werte nicht mehr abgefragt sondern automatisch berechnet.

Detektordaten, die zwar die Bedingung gleicher Summen erfüllen, aber ansonsten nicht konsistent sind, werden nicht zurückgewiesen. In diesem Fall werden am Ende des Zeichenvorgangs andere Detektorwerte angezeigt als Sie eingegeben haben.

Wenn das Kontrollkästchen "Rechenschritte ausgeben" angehakt ist, wird jede Zeile, Spalte oder Diagonale sowie jedes Feld, das gezeichnet wird, in einem kleinen Ausgabefenster benannt, das jeweils mit "OK" zu schließen ist, bevor weiter gerechnet wird.

Es kann sein, dass es auch bei vollständig eingegebenen Detektorwerten keine eindeutige Lösung gibt und einige Felder der Zeichenfläche grau bleiben. In diesem Fall erhalten Sie eine entsprechende Information und die Detektorwerte werden auf die fertig berechneten Werte gesetzt. Danach kann das Bild manuell weiter bearbeitet werden.
Dies trifft beispielsweise für folgende Detektorwerte zu:

6 Spalten: 2 3 2 3 2 3

4 Zeilen: 3 4 4 4

9 Diagonalen: ⌊ → ⌉ 1 1 1 2 3 3 2 1 1
⌈ → ⌋ 1 1 1 3 2 3 3 1 0

Falls beim betätigen der Schaltfläche "Werte eingeben" schon ein anderes Bild auf der Zeichenfläche ist, werden Sie gefragt, ob das Bild gelöscht werden soll, und Sie können die Eingabe ggf. abbrechen.

Die Schaltfläche "Demo" füllt die Detektoren mit den Werten, die in Spektrum der Wissenschaft Digest 2/2002 "Mathematische Unterhaltungen" als Aufgabe gestellt wurden, und berechnet anschließend das Bild. Wenn Sie die Taste betätigen, werden Sie sehen, warum der Artikel den Titel "Katzografie" trägt.

Prinzip des Computertomographen

Ein Computertomograph erzeugt ein räumliches Bild vom Innern z.B. eines Menschen. Da die Auflösung in einer der drei Dimensionen - meistens derjenigen der längsten Ausdehnung des Objekts - simpel ist - man verschiebt nämlich einfach das Objekt entlang seiner Längsachse durch die Aufnahmeapparatur und macht viele zweidimensionale Bilder nacheinander - will ich mich auf die Darstellung des zweidimensionalen Problems beschränken:

Dabei stellen wir uns vor, dass wir eine Reihe von parallelen Röntgenstrahlen durch das abzubildende Objekt schicken und am anderen Ende mit genausovielen Detektoren feststellen, wie stark jeder Strahl gedämpft wurde.

Um die Sache noch weiter zu vereinfachen, digitalisieren wir den Weg des Strahls und stellen uns vor, dass wir ihn in eine Anzahl Streckenabschnitte aufteilen. Auf jedem Streckenabschnitt kann der entweder gedämpft werden oder nicht. Im ersteren Falle soll der entsprechende Streckenabschnitt später auf dem Bild schwarz, im anderen Fall weiß erscheinen. Beispielsweise könnte jeder Strahl in 10 Abschnitte unterteilt werden. Der Detektor würde uns dann sagen, auf wie vielen dieser Abschnitte der Strahl gedämpft wurde; sein Messwert ist also 0, 1, 2, 3, ..., 9 oder 10.
Wenn wir insgesamt z.B. 20 parallele Strahlen haben, entsteht so eine Bildauflösung von 10x20 Bildpunkten.

Mit den bisherigen Detektorwerten allein können wir aber noch (fast) nichts anfangen, denn wir können daraus nur ablesen, an wie vielen Stellen der Strahl gedämpft wurde, nicht aber wo - mit zwei Ausnahmen: Wenn der Detektor den Wert "0" liefert, wissen wir, dass alle Bildpunkte entlang des Strahls weiß sein müssen, und wenn er den Wert "10" (also den der Anzahl der Streckenabschnitte entsprechenden Wert) liefert, wissen wir, dass alle Bildpunkte entlang des Strahls schwarz sein müssen.

Nun kommt der Trick: Wir ordnen quer zu unseren Röntgenstrahlen eine weitere Anzahl Strahl/Detektor-Paare an, die wir natürlich auch genauso in Streckenabschnitte unterteilen, und zwar so, dass jeder Bildpunkt von genau einem horizontalen und einem vertikalen Strahl durchlaufen wird. (Natürlich werden an einem Bildpunkt entweder beide Strahlen gedämpft oder beide Strahlen durchgelassen.)
Für unser Beispiel eines 10x20-Bildes bräuchten wir dann zehn parallele Querstrahlen, die jeweils in 20 Streckenabschnitte unterteilt sind.
Was hilft uns das? Nun, nehmen wir an, unter den vertikalen Strahlen ist einer, dessen Detektor den Wert "10" anzeigt. Wir schwärzen also die gesamte Spalte dieses Detektors. Wenn nun unter den Querdetektoren einer ist, der "1" anzeigt, wissen wir, wo in dieser einen Zeile dieser Dämpfungspunkt liegt, nämlich genau dort, wo sie die schwarze Spalte kreuzt! Außerdem wissen wir jetzt, dass der Rest der Zeile weiß sein muss. Auch diese weißen Bildpunkte helfen uns, denn dort können keine schwarzen mehr sein. Wenn also jetzt unter den Spaltendetektoren einer "9" anzeigt, haben wir weitere Teile des Puzzles.

Ein Beispiel soll das Prinzip veranschaulichen:

1
2
2
3 1 1

Wir sehen ein Bild mit 3x3 Bildpunkten.
Die grau hinterlegten Felder entsprechen den Detektoren: In der untersten Zeile wird angezeigt, wie viele schwarze Punkte es in der jeweils über dem Detektor stehenden Spalte gibt; in der ganz rechten Spalte stehen die entsprechenden Werte für die Zeilen.

An der "3" unter der ersten Spalte können wir erkennen, dass alle Punkte der linken Spalte schwarz sein müssen, weil es nur drei gibt.
In der obersten Zeile steht rechts eine "1". Diese kann jetzt nur noch von dem schwarzen Bildpunkt in der ersten Zeile herrühren; also wissen wir, dass die beiden anderen Felder dieser Zeile weiß sind.

Und dann? Dann stehen wir etwas dumm da, weil es keine Zeilen oder Spalten mehr gibt, die eindeutig als schwarz oder weiß identifiziert werden können. Der Code ist nicht eindeutig!

Diesem Problem helfen wir ab, indem wir das selbe Strahl-Detektor-Prinzip, das wir für Zeilen und Spalten angewandt haben, zusätzlich für die Diagonale anwenden.
Bei einer n x m-Bildfläche brauchen wir dafür n+m-1 parallele Strahlen und Detektoren, in diesem kleinen Beispiel also fünf, wie in nachstehendem Bild zu sehen. Die Detektoren der Diagonale sind gelb gefärbt, die zu einem Detektor gehörenden Felder einer Diagonalen (= Streckenabschnitte des Strahls) sind mit einem Punkt markiert, der die selbe Farbe hat wie der Zahlenwert am Detektor:

1
1 2
1 2
2 3 1 1
0
1

Nun können wir die Mehrdeutigkeit auflösen: Z.B. sollen in der blauen Hauptdiagonale zwei schwarze Felder sein. Von dem unteren linken Feld wissen wir aber schon, dass es schwarz und von dem oberen rechten, dass es weiß ist, also muss das mittlere Feld schwarz sein.

Dass das rechte Feld der zweiten Zeile dann weiß sein muss, ergibt sich dann sowohl aus dem Zeilen- wie auch aus dem Diagonalendetektor.

Schließlich bleibt für das untere rechte Feld anhand von Zeilen-, Spalten- und Diagonalendetektoren nur noch "schwarz" übrig.

Wem diese Erklärung des Funktionsprinzips eines Computertomographen zu stark vereinfacht ist, der findet hier etwas umfassenderes und anspruchsvolleres oder er suche im Internet unter dem Stichwort Radon-Transformation.