Computertomographie (CT), Teil 5

Der diskrete Charme der Pixel

Wie schon gesagt, muss man für die Rückprojektion der Schattenbilder ein Pixel-Gitter über die reale physikalische Szene legen (s. Abb. 1). Man spricht dabei von Rasterung. Nachdem es sich um eine kreisförmige Szene mit Radius r handelt, ist das Gitter sinnvollerweise quadratisch, und die Anzahl der Pixel in x– und y-Richtung wird gleich gewählt, also n_x = n_y = n. Die Pixel sind dann Quadrate mit einer realen Seitenlänge von s = 2 r / n. Um die Formeln etwas zu vereinfachen wählen wir für n eine gerade Zahl, was keine große Einschränkung bedeutet.

Gitter1
Abb. 1: Das kreisförmige Gebiet mit Radius r wird mit einem (8×8)-Pixelgitter überdeckt. Der Ursprung des Pixel-Koordinatensystems befindet sich links oben. Die i-Achse zeigt wie die x-Achse nach rechts, die j-Achse zeigt entgegen der y-Achse nach unten.

reale Punkte zu Pixeln

Der Ursprung des Pixel-Koordinatensystem liegt bei (-r|r), während der Ursprung des »realen« Koordinatensystems im Drehpunkt O ist. Außerdem zeigt aus historischen Gründen die j-Achse üblicherweise der y-Achse entgegen, während die i-Achse in dieselbe Richtung wie die x-Achse zeigt.

Wie kann man die Koordinaten eines realen Punktes P(P_x|P_y) in Pixel-Koordinaten (P_i|P_j) umrechnen?

Zunächst muss man zu P_x den Radius r addieren, weil der Ursprung O, auf den sich P_x bezieht, die Strecke r rechts vom Pixelursprung liegt. Diese Zahl dividiert man dann durch die Pixelbreite s. Weil die Pixel-Koordinaten nur ganze Zahlen sein können, muss man zuletzt die größte ganze Zahl nehmen, die kleiner oder gleich (P_x + r) / s ist, nämlich

\displaystyle\left\lfloor\frac{P_x+r}{s}\right\rfloor\,.

Viele Programmiersprachen stellen zur Berechnung von \lfloor x\rfloor die Funktion floor(x) zur Verfügung.

Weil die j-Achse entgegen die y-Achse zeigt, muss man für die Umrechnung der y-Koordinate nun P_x durch -P_y ersetzt. Berücksichtigt man noch, dass r / s = n / 2 eine ganze Zahl ist, erhält man insgesamt

\displaystyle(P_i|P_j) = \left(\left\lfloor\frac{P_x}{s}\right\rfloor + \frac{n}{2}\middle|\left\lfloor-\frac{P_y}{s}\right\rfloor + \frac{n}{2}\right)\,.

Nehmen wir an, der Durchmesser unseres CTs ist 2r = 10\,\text{cm}. Legen wir ein (16×16)-Pixelgitter über diesen Kreis, hat jedes Pixel eine Breite von s = \frac{10}{16}\,\text{cm} = 0.625\,\text{cm}. Betrachten wir den Punkt A(-0.52r|0.7r) = A(-2.6\,\text{cm}|3.5\,\text{cm}). Dividieren wir seine x-Koordinate durch s, erhalten wir -2.6/0.625 = -4.16. Die größte ganze Zahl kleiner oder gleich diesem Wert ist -5. Dazu müssen wir noch n / 2 = 8 addieren und erhalten schlussendlich die i-Koordinate 3. Für die j-Koordinate gehen wir ähnlich vor: -3.5/0.625 = -5.6, die größte ganze Zahl kleiner oder gleich dieser Wert ist -6; plus n/2 = 8 macht insgesamt 2.

In der Mitte von Abb. 2 sieht man das entsprechende Pixel eingefärbt. Dabei ist zu beachten, dass die linke Pixelspalte die i-Koordinate 0 und die oberste Pixelzeile die j-Koordinate 0 haben.

Weiters vergleicht Abb. 2 die Punkte A(-0.52r|0.7r), B(0.27r|0.3r), C(-0.3r|{-0.52r}) und D(0.6r|{-0.48r}) als Pixel in verschieden hoch auflösenden Gittern. Man sieht, dass die Punkte nicht genau im Zentrum der Pixel liegen müssen, sondern irgendwo innerhalb sein können.

Gitter2
Abb. 2: Die Punkte A, B, C und D als Pixel in einem (8×8)-Gitter (links), einem (16×16)-Gitter (Mitte) und einem (32×32)-Gitter (rechts).

Im Teil 6 geht es weiter mit Linien aus Pixeln.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit deinem WordPress.com-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..