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 (wzrosti); druga = kierunek kolumny (wzrostj).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 orderNumPy 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 relationshipKlasyfikacja 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
InstanceNumberzamiast 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
- Trzy układy współrzędnych: indeksy tablicy, fizyczny układ pacjenta (LPS) i ekran. Przekształcenie afiniczne łączy dwa pierwsze.
- 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ługInstanceNumber. FrameOfReferenceUIDpozwala szybko wykluczyć zgodność, ale jej przyjęcie wymaga dokładniejszej kontroli; zawsze sprawdzaj geometrię.- 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ą.
- 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.
- 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.