Przejdź do głównej zawartości

Geometria, segmentacja i zmiana próbkowania — materiały referencyjne

Materiały referencyjne · Zwarty materiał do sprawdzania informacji. Wróć tutaj później. Wersje dydaktyczne znajdują się w rozdziale.

Układy współrzędnych

Układ Czym jest Kolejność / jednostka
Indeksy tablicy położenie woksela w tablicy NumPy [k, j, i] = warstwa, wiersz, kolumna (liczby całkowite)
Fizyczny układ pacjenta położenie w ciele pacjenta (x, y, z) w mm, układ LPS (wartości ciągłe)
Ekran piksele ekranu zależna od widoku

LPS: +x → lewa strona (Left), +y → tył (Posterior), +z → góra (Superior). 3D Slicer używa układu RAS (zmiana znaku współrzędnych x i y). NumPy nie ma żadnego układu współrzędnych.

Równanie indeks ↔ położenie pacjenta (Image Plane Module, PS3.3 C.7.6.2.1.1)

Indeksy pikseli DICOM: i = kolumna, j = wiersz.

  • ImageOrientationPatient (0020,0037) = [rx,ry,rz, cx,cy,cz]: pierwsza trójka = kierunek wiersza (wzrost i); druga = kierunek kolumny (wzrost j).
  • PixelSpacing (0028,0030) = [row spacing, col spacing].

W płaszczyźnie warstwy:

P(i, j) = P0 + i·(colSpacing)·[rx,ry,rz] + j·(rowSpacing)·[cx,cy,cz]

P0 = ImagePositionPatient (0020,0032) dla lewego górnego piksela. Wektor normalny warstwy n = cross([rx,ry,rz],[cx,cy,cz]); krok między warstwami = odstęp między warstwami; indeks warstwy k → P0_k = ImagePositionPatient warstwy k.

Kolejność indeksów — pułapka

DICOM pixel (i, j) = (column i, row j)
SimpleITK index (x, y, z) = (column i, row j, slice k) # NOT NumPy order
NumPy array [k, j, i] = (slice k, row j, column i)

img.GetSize() ma postać (x,y,z), natomiast arr.shape — (z,y,x). Zawsze wyświetlaj GetSpacing()/GetOrigin()/GetDirection(); konwersję na granicy między reprezentacjami wykonuj za pomocą GetArrayFromImage / GetImageFromArray.

Kolejność warstw

t_k = dot(ImagePositionPatient_k, slice_normal); sortuj warstwy rosnąco według t_k. Rzeczywisty odstęp = t_{k+1} − t_k; SpacingBetweenSlices jest jedynie deklaracją. InstanceNumber ani nazwy plików nie określają geometrii.

Decyzja dotycząca Frame of Reference

same FoR ≠ same voxel grid (verify origin/spacing/direction)
different FoR ≠ impossible to relate (explicit registration can map them)
different FoR ⇒ do NOT overlay without an explicit spatial relationship

Klasyfikacja pary: EXACT_GRID / RESAMPLING_REQUIRED / INCOMPATIBLE.

Reprezentacje segmentacji

Reprezentacja Co przechowuje Jakie informacje zachowuje Co traci podczas konwersji
Maska binarna etykiety wokseli geometria obrazu (jeśli jest przechowywana wraz z obrazem) odwołania do źródeł; ułamkowe wartości na krawędziach
DICOM SEG oznaczone etykietami płaszczyzny poszczególnych klatek odwołania do źródłowych SOP; geometria każdej klatki; tożsamość segmentu wartości ułamkowe→binarne; dopasowanie klatek spoza siatki do siatki
RTSTRUCT kontury współpłaszczyznowe punkty konturów + siatka odniesienia rasteryzacja jest stratna i zależna od narzędzia

SEG Segmentation Type (0062,0001): BINARY / FRACTIONAL / LABELMAP.

Zmiana próbkowania

  • Obraz: interpolacja liniowa lub B-spline (w radiomice preferowana jest B-spline, a następnie ograniczenie zakresu wartości).
  • Maska: metoda najbliższego sąsiada jest ścieżką zachowującą etykiety i bezpiecznym wyborem domyślnym. Dla jawnie binarnego ROI 0/1 IBSI dopuszcza także interpolację liniową/trójliniową do wspólnej docelowej geometrii fizycznej, jeśli kontrakt obejmuje zadeklarowane progowanie/ponowną binaryzację. Dowolne numeryczne identyfikatory klas wieloklasowych nie są wartościami ciągłymi.
  • B-spline oblicza wartości gładkiego, odcinkowego wielomianu dopasowanego w sąsiedztwie → na ostrych granicach może powodować przekroczenie zakresu danych wejściowych → później ogranicz zakres HU (TRACE-CT: [-1000, +400]).
  • Kolejność operacji określa wartości cech: TRACE-CT ustala niezmienną kolejność: HU → zewnętrzna zmiana próbkowania do 1 mm (obraz: B-spline / maska: NN) → ograniczenie zakresu → PyRadiomics. resample → clip ≠ clip → resample (interpolacja otrzymuje różne dane wejściowe); kolejność jest częścią definicji pomiaru, a nie kwestią stylu.
  • Bez dwukrotnej zmiany próbkowania: jeśli zmiana próbkowania jest wykonywana zewnętrznie, plik parametrów PyRadiomics nie może ustawiać resampledPixelSpacing — dwa przebiegi interpolacji stanowią inny pomiar niż jeden.
  • Ograniczanie zakresu zmienia intensywności; ponowna segmentacja (resegmentRange) usuwa woksele z maski. TRACE-CT: zewnętrzne ograniczenie zakresu, resegmentRange = None.
  • Zmiana próbkowania na gęstszą siatkę tworzy próbki, a nie anatomię (siatka 5 mm → 1 mm ≠ odzyskana rozdzielczość).
  • Przy każdym wyniku raportuj docelowy odstęp i metodę interpolacji.
resampled_img = sitk.Resample(img, ref, sitk.Transform(), sitk.sitkBSpline, 0.0, sitk.sitkInt16)
resampled_mask = sitk.Resample(mask, ref, sitk.Transform(), sitk.sitkNearestNeighbor, 0, sitk.sitkUInt8)

Co zwykle idzie źle

  • Mylenie indeksów z położeniem fizycznym — używanie indeksów tablicy tam, gdzie potrzebne jest położenie fizyczne w mm.
  • Mylenie LPS z RAS (DICOM/SimpleITK używają LPS; Slicer używa RAS; NumPy nie używa żadnego z nich).
  • Ustalanie kolejności na podstawie InstanceNumber zamiast rzutu położenia na wektor normalny warstwy.
  • Ufanie zgodności FoR bez sprawdzenia początku układu współrzędnych, odstępów i kierunku.
  • Pozostawienie jawnie binarnej maski w postaci ułamkowej po interpolacji liniowej bez zadeklarowanego progowania/ponownej binaryzacji — niszczy integralność etykiet.
  • Porównywanie kształtów tablic zamiast geometrii fizycznej.
  • Pozostawienie bez ograniczenia wartości przekraczających zakres wskutek interpolacji B-spline na ostrych granicach.
  • Zmiana próbkowania do docelowego odstępu bez zaraportowania go.

Powiązanie z TRACE-CT (odwołania tylko do odczytu)

Konkretne funkcje stojące za tym rozdziałem — wektor normalny warstwy, przekształcenie afiniczne, kolejność geometryczna, równoważność geometrii, obsługa FoR, dekodowanie SEG i przenoszenie masek, odwrotna zmiana próbkowania masek metodą NN, zmiana próbkowania obrazu z ograniczeniem zakresu oraz narzędzia wizualnej kontroli jakości — są zinwentaryzowane w mapie nauki TRACE-CT.

Dalsze zgłębianie tematu

  • Dokumentacja SimpleITK fundamentals (początek układu współrzędnych, odstępy, kierunek, przestrzeń fizyczna a indeksy, zmiana próbkowania) — najlepszy pojedynczy materiał referencyjny dotyczący przekształcenia afinicznego i zmiany próbkowania.
  • DICOM PS3.3 Image Plane Module + Multi-frame Functional Group macros — normatywne źródło definicji IOP/IPP i geometrii poszczególnych klatek SEG.
  • Dokumentacja dcmqi / highdicom — kodowanie i dekodowanie SEG w zakresie wykraczającym poza pydicom.
  • Przebieg przetwarzania obrazu IBSI (Zwanenburg et al. 2020) — które wybory dotyczące zmiany próbkowania i dyskretyzacji muszą zostać jednoznacznie określone w procesie przetwarzania radiomicznego (rozdział 5).

Co zapamiętać — podsumowanie rozdziału

  1. Trzy układy współrzędnych: indeksy tablicy, fizyczny układ pacjenta (LPS) i ekran. Przekształcenie afiniczne łączy dwa pierwsze.
  2. Geometria = początek układu współrzędnych + odstępy + kierunek. Wektor normalny warstwy = cross(row, col); ustalaj kolejność warstw na podstawie ich rzutu na ten wektor — nigdy według InstanceNumber.
  3. FrameOfReferenceUID pozwala szybko wykluczyć zgodność, ale jej przyjęcie wymaga dokładniejszej kontroli; zawsze sprawdzaj geometrię.
  4. Dekoduj obiekty SEG na podstawie grup funkcjonalnych poszczególnych klatek i źródłowych SOP UID; konwersje w obie strony powodują utratę ułamkowych wartości na krawędziach i klatek leżących poza siatką.
  5. Obrazy interpoluje się liniowo lub metodą B-spline; w przypadku masek metoda najbliższego sąsiada jest bezpośrednią ścieżką zachowującą etykiety i bezpiecznym wyborem domyślnym. Dla jawnie binarnego ROI 0/1 IBSI dopuszcza także interpolację liniową/trójliniową do wspólnej docelowej geometrii fizycznej, jeśli po niej następuje zadeklarowane progowanie/ponowna binaryzacja; dowolne numeryczne identyfikatory klas wieloklasowych nie są wartościami ciągłymi. Te same wymiary ≠ ta sama przestrzeń fizyczna.
  6. Zmiana próbkowania zmienia cechy. Ustal i raportuj każdy wybór dotyczący przetwarzania wstępnego.

© 2026 Adrian Tkacz · BioMedical-IT
Oryginalne teksty i ilustracje są udostępniane na licencji Creative Commons Uznanie autorstwa–Użycie niekomercyjne 4.0 Międzynarodowe (CC BY-NC 4.0), o ile nie zaznaczono inaczej. Przy ponownym wykorzystaniu proszę podać Adrian Tkacz / BioMedical-IT jako autora i zamieścić odnośnik do oryginalnego źródła. Materiały osób trzecich zachowują własne prawa i warunki licencyjne.