Metody diagnostyczne

Z Brain-wiki

Struktura plików DICOM

Prace nad ustandaryzowaniem wymiany danych graficznych pomiędzy urządzeniami medycznymi rozpoczęły się już w 1983 w ramach współpracy American College of Radiology (ACR) i National Electrical Manufactures Association (NEMA). Pierwsza wersja standardu pojawiła się dwa lata później i nosiła nazwę ACR/NEMA 300 V1.0. Wersja ta umożliwiała zapis danych w odpowiednim formacie oraz ujednolicony sposób transferu plików za pomocą sieci lub nośników zewnętrznych. W 1988 roku pojawiła się druga wersja standardu ACR/NEMA V2.0, która opierała się na ujednoliconej terminologii, strukturze informacji odpowiednim kodowaniu danych. Wraz z rozwijaniem standardów pojawiały się nowe zapotrzebowania. Ostatni oficjalna wersja to DICOM 3.0 (Digital Imaging and COmmunications in Medicine) z 1992. Standard ten jest w dalszym ciągu uaktualniany.


Dokumentacja

Standard DICOM jest zorganizowany w postaci wieloczęściowego dokumentu (Rys. %i 1) i uaktualniany corocznie w postaci Suplementów.

Poszczególne dokumenty są poświęcone strukturze danych, sposobom kodowania, archiwizacji, wymiany informacji oraz aspektom bezpieczeństwa danych. Na zajęciach skupimy się na następujących częściach dokumentacji:

  • PS 3.1: Introduction and Overview – wprowadzenie oraz informacje podstawowe na temat standardu
  • PS 3.2: Conformance – definicje podstawowych zasad oraz pojęć
  • PS 3.3: Information Object Definitions – definicje atrybutów czyli informatyczna reprezentacja fizycznych danych
  • PS 3.4: Service Class Specifications – obsługa informatycznych reprezentacji danych
  • PS 3.5: Data Structure and Encoding – struktura danych oraz sposób ich kodowania
  • PS 3.6: Data Dictionary – spis wszystkich możliwych atrybutów
    Dokumentacja standardu DICOM.

DICOM-Meta-Information-Header

Dane zawarte w każdym pliku DICOM podzielone są na dwie części:

  • część zawierającą informacje o pliku (Dicom-Meta-Information-Header)
  • dane jednego obiektu Service-Object Pair Instance (Dicom-Data-Set)

Model informacji określa format danych dla różnych typów informacji, takich jak: obrazy, przebiegi czasowe, obiekty graficzne, raporty, wydruki itp. Dane są grupowane w tematycznych zbiorach (ang. Entities) oraz podzbiorach (ang. Modules). Każdy moduł tworzony jest przez zbiór atrybutów.

  1. podstawowa jednostka danych: Data Element
  2. strumień informacji: Data Set

Data Element stanowi podstawową jednostkę danych, opisywany jest przy pomocy:

  • identyfikatora elementu danych (Tag) złożonego z dwóch liczb określających: grupę (Group) oraz element grupy (Element), zapisywanych w postaci liczb heksadecymalnych,
  • typu danych (Value Representation), określonego w postaci pary liter w kodzie ASCII i umożliwiającego poprawną interpretację danych,
  • rozmiaru elementu (Value Length) wyrażonego w bajtach,
  • informacji takich jak: nazwisko pacjenta, rozdzielczość obrazu

Strumień informacyjny (Data Set) jest uporządkowanym strumieniem elementów danych.


Struktura Data Element.


Zadanie 1. Skopiuj na Pulpit katalog DICOM i na podstawie dokumentów w nim zawartych znajdź wyjaśnienie następujących oznaczeń:

  • (0008,0020): 20120510
  • (0008,0030): 101714
  • (0008,0060): MG
  • (0008,0070): SIEMENS
  • (0008,0080): Ovarian Screening, St Barts
  • (0010,0010): xxx
  • (0010,0040): 0

Rozwiązanie:

  • (0008,0020): 20120510 - Study Date
  • (0008,0030): 101714 - Study Time
  • (0008,0060): MG - Modality
  • (0008,0070): SIEMENS - Manufacturer
  • (0008,0080): Ovarian Screening, St Barts - Institution Name
  • (0010,0010): xxx - Patient's Name
  • (0010,0040): 0 - Patient's Sex


Zadanie 2. 56-letnia Janina Kowalska zgłosiła się do Centrum Onkologii z podejrzeniem nowotworu mózgu. 15 lutego 2013 roku zostało wykonanie badanie za pomocą pozytonowej tomografii emisyjnej wykonane na tomografie firmy GE. W czasie badania pacjentka leżała na prawym boku. Za pomocą odpowiednich atrybutów zapisz te informacje w formie pliku DICOM.

Rozwiązanie:

  • (0010,0010): Kowalska Janina
  • (0010,0040): F
  • (0010,1010): 56
  • (0008,0080): Centrum Onkologii
  • (0008,0020): 20130215
  • (0008,0060): PT
  • (0008,0070): GE
  • (0018,5100): HFDR

Oprogramowanie

Oprogramowanie, które pozwala na odczyt i analizę plików DICOM, jest dostępne nie tylko komercyjnie.

Ekran powitalny programu ImageJ.

Mimo że producenci sprzętu medycznego dostarczają to oprogramowanie razem z urządzeniami, istnieje możliwość korzystania z darmowego oprogramowania, takiego jak ImageJ.

ImageJ jest napisany w środowisku Java. Pozwala on wyświetlać, edytować, analizować, drukować 16- i 32-bitowe obrazy. Może być użyty do analizy różnych formatów, m.in. TIFF, GIF, JPEG, BMP, DICOM. ImageJ jest programem, który wykonuje obliczenia: powierzchni, wartości pikseli, odległości, kątów oraz tworzy histogramy, profile, kalibracje przestrzenne. Jest uniwersalnym narzędziem i umożliwia dodanie samodzielnie napisanych wtyczek.

Jak używać programu ImageJ?

Program ImageJ jest użyteczny nie tylko ze względu na możliwość otworzenia i zobaczenia zdjęcia diagnostycznego. To program, który pozwala na edycję obrazów oraz ich analizę. Bardzo ważną cechą jest również dostosowanie do potrzeb użytkownika przez możliwość dodawania potrzebnych wtyczek czy makra.


Podstawowe informacje

Instalacja: Program można pobrać bezpośrednio ze strony: http://imagej.nih.gov/ij/
Konfiguracja pamięci: ImageJ jest aplikacją napisaną w Javie. Aby uruchomić program napisany
w Javie trzeba wcześniej zdefiniować ilość pamięci. Robi się to wybierając
z menu Edit[math]\gt [/math]Options[math]\gt [/math]Memory & Threads.
Uaktualnienia: Najnowszą wersją w chwili obecnej jest ImageJ 1.47m. Aby sprawdzić
aktualną wersję programu należy skorzystać z menu Help[math]\gt [/math]About ImageJ.
Żeby dokonać uaktualnienia trzeba wybrać z menu Help[math]\gt [/math]Update ImageJ.


ImageJ - katalogi

Katalog, w którym został zainstalowany ImageJ, zawiera dodatkowo następujące elementy:

  • plik ij.jar –czyli program ImageJ. Podczas uaktualnienia plik ten jest zastępowany na nowy.
  • plik ImageJ.cfg – ten plik zawiera konfigurację pamięci dla ImageJ.
  • katalog macros – ten katalog zawiera makra czyli małe programy napisane w specjalnym języku do tego stworzonym.
  • katalog plugins – ten katalog zanier wtyczki, które pozwalają na większą funkcjonalność programu. Wtyczki, które się w nim znajdują można znaleźć również w menu Plugins.


Zadanie 3. W katalogu macros znajdź plik Mandelbrot.txt i przeciągnij go do okna głównego programu ImageJ. Co się stanie w tej sytuacji?

a). Jeśli wykonamy to makro używając polecenia Macros[math]\gt [/math]Run Macro z menu, to co otrzymamy?

b). Zapisz makro Mandelbrot.txt pod nazwą Mandelbrot_.txt w katalogu ImageJ/plugins/Examples. Możesz użyć polecenia z editor makro File[math]\gt [/math]Save As…. Zamknij wszystkie otwarte okna w ImageJ. Żeby odświeżyć wtyczki należy wybrać z menu Help[math]\gt [/math]Refresh Menus. Wykonaj makro używając polecenia z menu Plugins[math]\gt [/math]Examples[math]\gt [/math]Mandelbrot.

c) Przytrzymując klawisz shift, wybierz Plugins[math]\gt [/math]Examples[math]\gt [/math]Mandelbrot. Co się stało?

Rozwiązanie


Mandelbrot.png
Makro-edytor.png

Otwieranie plików

Istnieją dwie możliwości otwierania plików graficznych. Można użyć polecenia z menu File[math]\gt [/math]Open… (ctrl+o) lub przeciągnąć plik bezpośrednio z katalogu do głównego okna programu (ang. ImageJ launcher window).

Zadanie 4. Używamy katalogu WMD_2017 na pulpicie.

a). Otwórz zdjęcie dapi.tif z tego katalogu. Spróbuj różnych możliwości otwierania plików w programie ImageJ. Wypróbuj kombinację klawiszy: ctrl+shift+o. Jaka jest funkcja tego polecenia? Otwórz jednocześnie kilka zdjęć.

b). Otwórz obrazy z katalogu \WMD_2017\LADJAN_MRI\t1_vibe_tra - 3 przez przeciągnięcie tego katalogu do okna głównego ImageJ. Następnie otwórz je za pomocą File[math]\gt [/math]Import[math]\gt [/math]Image Sequence….

c). Otwórz ten sam plik dwukrotnie. Co się dzieje z tytułem zdjęcia?

d). Otwórz zdjęcie cafe.lsm. Zdjęcie jest przykładem tzw. hyperstack. Składa się ono z dwóch warstw. Numer kanału jest wyświetlany na górze/dole zdjęcia. Wykorzystaj polecenie: Run Image[math]\gt [/math]Color[math]\gt [/math]Channels Tool… i zmień parametry wyświetlania.

e). Spróbuj otworzyć zdjęcie FC green-40X sec.ics.


Zadanie 5. Za pomocą programu ImageJ otwórz plik z katalogu DICOM: MonochromeSample.dcm. Odczytaj i zinterpretuj informacje zawarte w Dicom-Meta-Information-Header.

Rozwiązanie


Widok zdjęcia i pliku meta w ImageJ.

Ważne narzędzia

Podstawowe funkcje dostępne w programie ImageJ będą dyskutowane z użyciem odpowiednich przykładów bez wstępu teoretycznego.


Piksele, powiększanie, przewijanie

Zadanie 6. Sprawdź następujące funkcje z użyciem pliku duck.bmp:

  • niektóre informacje dotyczące zdjęcia znajdują się w górnej części okna: rozmiar zdjęcia w pikselach (np. 650 x 515), rodzaj (np. 8-bit) i rozmiar zdjęcia w pamięci komputera (np. 327K);
  • powiększanie/zmniejszanie jest możliwe na dwa sposoby: klikając w lupę znajdującą się w pasku głównym lub używając “+” i “-” z klawiatury;
  • jeśli obraz jest większy niż okno, to w górnym lewym rogu pojawia się wskaźnik pozycji;
  • po powiększeniu obrazu i pojawieniu się wskaźnika pozycji, przewijanie zdjęcia jest możliwe za pomocą narzędzia do przewijania (symbol łapki w pasku głównym); po wybraniu opcji należy kliknąć na obraz i bez odrywania myszy przesuwać po obrazie;
  • inną możliwością przewijania obrazu jest użycie klawisza spacji; korzyścią tego sposobu jest to, że jednocześnie możemy używać innych funkcji z paska głównego;
  • na pasku postępu (tuż pod paskiem głównym) znajduje się aktualna pozycja piksela, na który wskazujemy myszą oraz wartość tego piksela, np. w skali szarości (mogą być to trzy wartości w przypadku RGB).

Zadanie 7. Otwórz plik dapi.tif z katalogu podstawowe_info.

a). Jakie jest największe możliwe powiększenie zdjęcia, a jakie największe zmniejszenie?

b). Jaka jest wartość piksela w skali szarości dla współrzędnych [math]x=32[/math] i [math]y=456[/math]? Jaka jest ta wartość dla [math]x=429[/math] i [math]y=125[/math]?

c). Jaka jest szerokość i wysokość obrazu? Jaki to typ i ile miejsca zajmuje w pamięci komputera?

d). Przesuń mysz na obraz. W którym kierunku wartości współrzędnej [math]x[/math] rosną? Jak to jest w przypadku drugiej współrzędnej? Narysuj układ współrzędnych.

e). Możliwa jest zmiana orientacji osi [math]y[/math] używając polecenia Analyze[math]\gt [/math]Set Measurements, a następnie wybierając opcję Invert [math]Y[/math] coordinates. Przesuń mysz na obraz ponownie. Jak teraz wygląda układ współrzędnych?

Rozwiązanie:

a). max 3200%, min 3.1%

b). 1, 239

c). 650x515, 8-bit, 327K

d). w prawo, w dół

e). w prawo, w górę

Zaznaczanie obszaru

Do zaznaczania obszaru służy narzędzie oznaczone jako prostokąt w głównym pasku programu. Jeśli jest on aktywny, możemy klikając na punkt na zdjęciu i przesuwając myszą zaznaczyć interesujący nas obszar. Podczas tej czynności na pasku postępu pojawiają się informacje o szerokości, wysokości oraz współczynnik proporcjonalności obrazu. Żeby zakończyć zaznaczanie obszaru należy uwolnić mysz. Nawet po zwolnieniu myszy można edytować zaznaczony rejon.

Zadanie 8. Wszystkie czynności wykonuj na otworzonym już pliku dapi.tif.

a). Wybierz z paska głównego symbol prostokąta i zaznacz dowolne pole. Następnie zmień jego rozmiar. Znajdź w manualu, znajdującym się w [1], skróty klawiszowe związane z opcją zaznaczenia i napisz do czego one konkretnie służą. Wypróbuj je.

b). Sprawdź, jaka jest rola klawisza shift i alt, gdy chcemy zaznaczyć kolejny obszar. Przesuń stworzony przez siebie obszar (obszar powinien składać się z kilku elementów).

c). Zmień kolor zaznaczenia na magenda (Edit[math]\gt [/math]Options[math]\gt [/math]Colors).

d). Kliknij prawym przyciskiem myszy na symbol prostokąta na pasku głównym i wybierz opcję rounded rectangle. Jaki teraz kształt ma wybrany obszar? Żeby zmienić ustawienie koloru dla rounded rectangle, wystarczy dwa razy kliknąć przycisk na pasku głównym.

e). Po podwójnym kliknięciu na przycisk rounded rectangle zmień wartość promienia zakrzywienia. Zaznacz kilka obszarów z różnymi kantami.

f). Przećwicz używanie pozostałych narzędzi do zaznaczania łącznie z rysowaniem własnoręcznym. Zauważ, że podczas jego używania wystarczy uwolnić mysz w pobliżu początku zaznaczania, a obszar zamknie się automatycznie.

g). Po zaznaczeniu obszaru użyj polecenia Image[math]\gt [/math]Crop. Co się stało? Żeby wrócić do poprzedniej wersji zdjęcia, należy użyć polecenia File[math]\gt [/math]Revert (ctrl+r). Zaznacz obszar ponownie i użyj polecenia Image[math]\gt [/math]Duplicate (shift+d). Co się stało tym razem?

Rozwiązanie:

a). Shift - zaznaczenie ogranicza się do kwadratu

Alt - zmiana rozmiaru, ale zaznaczenie jest przez cały czas zaczepione w jednym miejscu

Ctrl - zaznaczenie zmienia rozmiar wokół środka

Ctrl Alt - zmiana rozmiaru przy zachowanych proporcjach

g). Image[math]\gt [/math]Crop wycina obraz do rozmiarów zaznaczenia. Image[math]\gt [/math]Duplicate tworzy nowy obraz tylko z zaznaczeniem.

Pomiar i tabele z wynikami

Polecenie Analyze[math]\gt [/math]Measure (ctr+m) pozwala na pomiar parametrów całego obrazu lub zaznaczonego obszaru. Korzystając z polecenia Analyze[math]\gt [/math]Set Measurements, mamy możliwość wybrania wielkości, które zostaną zmierzone. Wartości te są zapisywane i wyświetlane z tabeli z wynikami globalnymi.

Zadanie 9. W dalszym ciągu korzystamy z pliku dapi.tif.

a). Zaznacz własnoręcznie obszar jądra, a następnie zmierz jego powierzchnię i średnią wartość w skali szarości. Powtórz to samo dla kilku jąder. Jak zmienią się wyniki, jeśli powtórzymy procedury dla powiększonego zdjęcia?

b). Skorzystaj z polecenia File[math]\gt [/math]Duplicate, żeby zrobić kopię tabeli z wynikami. Zmierz nowe zaznaczenie. Do której tabeli został dopisany wynik?

c). Skorzystaj z polecenia File[math]\gt [/math]Rename i zmień nazwę oryginalnej tabeli z wynikami (Results [math]\rightarrow [/math] old). Zmierz nowe zaznaczenie i sprawdź do której tabeli został dopisany pomiar.

d). Skasuj wszystkie wyniki poleceniem Results[math]\gt [/math]Clear Results i zmierz co najmniej 3 jądra ponownie. Jaka jest wartość średnia, odchylenie standardowe, wartość minimalna, maksymalna oraz rozkład wartości zmierzonych powierzchni? Użyj poleceń Results[math]\gt [/math]Summarize i Results[math]\gt [/math]Distribution, żeby dostać odpowiedzi.

Rozwiązanie:

b). i c). Nowe pomiary są dodawane do tabeli o nazwie Results. Jeśli takiego okna nie ma, to otwierane jest nowe.


Linijka, profil i punkt

Trzy możliwe opcje funkcji linijka są dostępne w programie: linia ciągła, linia łamana i dowolna linia rysowana przez użytkownika. W przypadku tworzenia linii ciągłej i łamanej na pasku postępu pojawia się długość rysowanej linii oraz kąt mierzony względem osi [math]x[/math].

Zadanie 10.

a). Użyj linii ciągłej, żeby oszacować odległość pomiędzy środkami najbliżej położonych jąder.

b). Użyj linii ciągłej, żeby oszacować średnice jąder.

c). Użyj linii łamanej, żeby oszacować obwód jąder.

d). Własnoręcznie narysuj linię, żeby oszacować obwód jąder.

e). Użyj narzędzia Angle tool, żeby oszacować kąty pomiędzy trzema najbliższymi jądrami.

Narzędzie linijka może być użyte to stworzenia profili. Profil zawiera intensywność wartości wzdłuż narysowanej linii. Procedura jest następująca: na początku rysujemy linię wzdłuż jądra, następnie kliknij klawisz k (skrót od Analyze[math]\gt [/math]Plot profile). Jeśli grubość linii jest większa niż 1, profil będzie uśredniony po szerokości. Żeby zmienić grubość linii, należy kliknąć dwukrotnie na symbol linii na pasku głównym programu.

Zadanie 11.

a). Użyj profilu, żeby oszacować średnicę jądra. Zauważ, że wykres jest obrazem samym w sobie, więc możesz do jego analizy możesz użyć narzędzi ImageJ. Czy jest jakaś korzyść z używania profili zamiast pomiaru średnicy na oryginalnym obrazie?

b). Stwórz profile wzdłuż jądra. Nie zmieniając żadnych dodatkowych parametrów, zmień grubość linii i stwórz kolejny wykres. Co się zmieniło?

c). Stwórz profile wzdłuż jądra, następnie wydłuż linię i stwórz kolejny profil. Jaka jest różnica pomiędzy profilami? Zmierz odległość pomiędzy dwoma punktami na wykresach. Czy wyniki, które otrzymałeś, są jednakowe? Wskazówka: popatrz na wielkość pikseli (Image[math]\gt [/math]Properties).

d). Stwórz profile wzdłuż jądra. Wybierz opcję List na dole okna profilu. Skopiuj wszystkie wartości (ctrl+a, żeby zaznaczyć wszystko i ctrl+c, żeby skopiować). Otwórz opcję Curve Fitter z menu Analyze[math]\gt [/math]Tools[math]\gt [/math]Curve Fitting. Skasuj wartości, które się tam znajdują i wklej wartości skopiowane (ctrl+v). Dopasuj rozkład Gaussa do punktów pomiarowych.

Rozwiązanie:

a). W zależności od ustawień wyświetlania obiektu może być on mniejszy lub większy. W profilu poziom tła jest często dobrze widoczny i pomiar średnicy powyżej niego jest możliwy.

b). Profil jest gładszy ponieważ jest uśredniony.

c). Profile mają różne rozmiary. Jakkolwiek mają również różne skale, więc pomiary korespondują z odległościami na oryginalnym obrazie. Czyli otrzymane wyniki powinny być takie same. Rozmiar piksela w obu profilach jest inny.

Do zliczania obiektów na zdjęciu służy polecenie zaznaczania punktu. Żeby dodać punkty, należy użyć klawisza shift lub narzędzie zaznaczania wielokrotnego punktów. Do kasowania punktów służy alt.

Zadanie 12.

a). Zaznacz trzy dowolne jądra, następnie dodaj punkt gdzieś w tle i kontynuuj z dodawaniem punktów w obszarze pozostałych jąder. Skasuj punkt z tła. Co się stało z numeracją zaznaczonych punktów?

b). Zachowaj zdjęcie z zaznaczonymi punktami w formacie tif (File[math]\gt [/math]Save As[math]\gt [/math]Tiff). Zamknij stare zdjęcie i otwórz to, które przed chwilą zachowałeś (File[math]\gt [/math]Open). Co się stało z zaznaczeniem? Czy możesz je modyfikować?

c). Sprawdź opcję pomiaru automatycznego, które uruchamia się poprzez dwukrotne kliknięcie na symbol punktu z paska głównego. Co ta opcja robi?

d). Czy można używać funkcji zaznaczania punktów z opcją Auto-Measure i Auto-Next Slice, żeby śledzić żółte cząstki w czasie z pliku moving-particles.tif z katalogu narzedzia_1?

Tło i obsługa ROI

Narzędzie o nazwie magic wand pozwala dokonać selekcji połączonych pikseli na zdjęciu. Istnieją dwie możliwości dokonania wyboru pikseli: piksele o tej samej intensywności (ewentualnie plus-minus tolerancja) lub piksele tła czyli wszystkie piksele o intensywnościach większych niż dana wartość minimalna lub o intensywnościach mniejszych niż dana wartość maksymalna. Minimalna i maksymalna wartość tła może być wybrana przez dopasowanie, które można otworzyć używając polecenia Image[math]\gt [/math]Adjust[math]\gt [/math]Threshold (shift+t). Należy zmienić mod z Red na Over/Under.

Każde kliknięcie z użyciem wand-tool tworzy selekcję. Żeby usunąć ją ze zdjęcia, należy użyć kombinacji klawiszy ctrl+shift+a.

Zadanie 13. Otwórz ponownie plik dapi.tif.

a). Użyj narzędzia wand-tool łącznie z opcją wyboru tła, żeby wybrać jądra. Zmierz jądra. Jaki jest najmniejszy i największy obwód jądra oraz najmniejsza i największa średnica?

b). Użyj wand-tool, żeby wybrać wszystkie jądra w jednej selekcji (shift). Jaki procent powierzchni zdjęcia jest pokryty przez jądra? Wskazówka – żeby wybrać całe zdjęcie, trzeba użyć ctrl+a.

Rozwiązanie:

a). obwód: min. 288.8 p, max. 608.0 p

średnica: min. 95.8 p, max. 188.4 p

b). powierzchnia: zdjęcia - 334750 p, jądra - 64885 p czyli procent będzie wynosił [math]64885 \cdot 100\% / 334750 = 19.4\%[/math]

ROI (Region Of Interest) manager pomaga w pracy z selekcjami. Dzięki niemu można zatrzymać nieograniczoną liczbę selekcji, wyświetlania, modyfikowania i pomiaru. Polecenia mogą dotyczyć albo wybranych ROI, albo wszystkich, jeśli nie było żadnego zaznaczenia.

Zadanie 14. a). Użyj wand-tool, żeby wybrać jądra, następnie naciśnij klawisz t (skrót dodawania ROI od Analyze[math]\gt [/math]Tools[math]\gt [/math]ROI Manager). Wybierz opcję Show All w managerze ROI. Wybierz pozostałe jądra i dodaj je do managera.

b). Kliknij na jedną z pozycji w managerze ROI (np. 5). Zauważ, że odpowiednie jądro na zdjęciu zostanie podświetlone. To działa również w drugą stronę. Modyfikuj selekcję (usuń część jąder używając klawisza alt). Uaktualnij zmiany.

c). Wybierz jedną lub kilka linii w managerze ROI (możesz użyć ctrl/shift) i naciśnij przycisk służący do pomiarów.

d). Do czego służy opcja Flatten? Wskazówka – Rzuć okiem na zdjęcia, które powstało w wyniku zastosowania tej opcji.

e). Ustaw niskie tło (niebieski kolor). Stwórz selekcję na podstawie wartości tła używając Edit[math]\gt [/math]Selection[math]\gt [/math]Create Selection. Użyj polecenia split. Co się dzieje?

f). Bez zmiany selekcji otwórz zdjęcie A4 Rhod 1.tif z katalogu narzedzia_1. Żeby zobaczyć wybrane jądra użyj opcji Show All z managera ROI. Dokonaj pomiaru. Jak wytłumaczysz to, co się stało?

Rozwiązanie:

d). Opcja tworzy obwiednię będącą granicą poszczególnych jąder i zapisuje zdjęcie jako RGB.

e). Create Selection tworzy pojedynczą selekcję złożoną ze wszystkich jąder. Opcja Split dzieli selekcje na poszczególne jądra i dodaje je do managera ROI.

f). Wybrana selekcja dla zdjęcia dapi.tif została użyta do nowo wczytanego zdjęcia.


Analizator cząstek

Dotychczas wszystkie selekcje były tworzone pojedynczo. Analizator cząstek pozwala automatycznie stworzyć selekcję dla każdego obiektu (cząstki), np. obszarowi pikseli powyżej minimalnej wartości tła i poniżej jego wartości maksymalnej.

Zadanie 15. a). Użyj narzędzia do wyrównywania tła (Image[math]\gt [/math]Adjust[math]\gt [/math]Threshold lub shift+t) oraz analizatora cząstek, żeby dodać jądro do managera ROI (usuń wszystkie opcje oprócz Add to Manager).

b). Usuń wszystko z managera ROI i użyj analizatora cząstek ponownie. Tym razem wybierz opcję Exclude on edges. W jakim celu można tę opcję stosować i kiedy może być używana?

c). Użyj ponownie analizatora cząstek. Tym razem spróbuj wykluczyć obiekty, które są zbyt małe, żeby być jądrami. Jest to możliwe dzięki ustawieniu minimalnego rozmiaru w oknie analizatora cząstek.

d). Użyj analizatora cząstek, żeby wybrać tylko te jądra, które są okrągłe. Jaka jest wartość, która usuwa dwa jądra najbardziej odbiegające od kolistego kształtu?

e). Otwórz plik inclusion.tif. Wyobraź sobie, że wewnętrzny i zewnętrzny prostokąt przedstawia cząstki. Użyj analizatora cząstek z włączona i wyłączoną opcją Include holes. Jaką widzisz różnicę?

f). Użyj analizatora cząstek do znalezienia liczby jasnych plamek na zdjęciu blobs.gif z katalogu narzedzia_1. Jaka jest średnia powierzchnia plamek?

Rozwiązanie:

b). Obiekty, które nie są całkowicie na zdjęciu, nie mają właściwego rozmiaru, co sprawi, że zafałszują pomiar wartości średniej i całkowitej opartej na rozmiarze (powierzchnia, średnica, obwód, itp.). Opcja Exclude on edges pozwala zignorować te obiekty.

d). 0.8

e). Jeśli włączona jest opcja Include holes, tylko jedna cząstka jest znaleziona i zawiera ona wewnętrzną cząstkę. Bez tej opcji wewnętrzna i zewnętrzna cząstka jest traktowana osobno.

f). 46 plamek o różnych rozmiarach i kształtach; średnia powierzchnia to 414.5 piksela


Strzałki, komentarze i warstwy

Bardzo przydatną funkcją jest dodawanie komentarzy bez niszczenia zdjęcia. W tym celu używa się warstw. Strzałki i nie tylko mogą być dodawane z użyciem klawisza b lub Image[math]\gt [/math]Overlay[math]\gt [/math]Add Selection.

Zadanie 16.

a). Użyj strzałki (prawym przyciskiem myszy na funkcji linia w głównym pasku ImageJ), żeby zaznaczyć na zdjęciu wszystkie jądra. Przed narysowaniem strzałek zmień ich kolor na magenta.

b). Użyj narzędzia do pisania, żeby dodać notatkę do każdej strzałki (jądro nr 1, jądro nr 2). Użyj kombinacji klawiszy ctrl+alt+b, żeby dodać tekst do warstwy.

c). Zmień strzałki. Wskazówka: Image[math]\gt [/math]Overlay[math]\gt [/math]To ROI Manager. Nie zapomnij uaktualnić managera po dokonanych zmianach.

d). Zmień napisany wcześniej tekst. Wskazówka: Nie możesz samodzielnie edytować tekstu. Wybierz test w managerze ROI, napisz coś nowego i naciśnij przycisk uaktualnienia zmian.

e). Dodaj trzeci komentarz. Wskazówka: konwertuj selekcje z powrotem do warstw, dodaj nowy komentarz do warstwy.

f). Użyj Image[math]\gt [/math]Overlay[math]\gt [/math]Flatten, żeby stworzyć zdjęcie ze wszystkimi komentarzami (np. do swojej prezentacji). W tak zapisanym zdjęciu komentarze nie są warstwami, są dodane przez zmianę wartości pikseli.


Programowanie w ImageJ

Zadanie 1

Mamy obraz rtg płuc w formacie jpg, w 8-bitowej skali szarości. Zauważyliśmy, że punkty tła mają wartość mniejszą niż 10. Chcielibyśmy na tej podstawie ustalić, jaki procent na obrazie stanowi tło. W tym celu sprawdzamy po kolei wszystkie punkty obrazu i jeśli któregoś wartość jest mniejsza niż wartość graniczna, zliczamy go.

Zadanie 2

Mamy obraz w formacie dicom przedstawiający jedną warstwę CT (można wybrać dowolny z obrazów, na których pracowaliśmy na zajęciach). Chcielibyśmy sprawdzić, gdzie na tym obrazie znajduje się najjaśniejszy obszar. Moglibyśmy zrobić to tak, że podzielilibyśmy obraz na 10x10=100 mniejszych obrazków, w każdym z nich sprawdzilibyśmy sumę wartości wszystkich punktów i wskazalibyśmy współrzędne obrazka o największej wartości sumy. Na koniec wybrana część obrazka powinna zostać zaznaczona.

Hint: Należy zrobić pętlę, w której 100 razy zaznaczy się coraz to inny obszar, sprawdzi się sumę w nim i czy jest większa niż największa dotąd znaleziona wartość, a jeśli tak, to nową wartość zapamięta wraz z jej współrzędnymi. Pamiętaj: komendy w ImageJ kończy się zawsze średnikiem, a komentarze zaczyna się //

open(path)
Otwiera obraz o tytule podanym w ścieżce.

makeRectangle(x, y, width, height)
Zaznacza obszar prostokątny o lewym górnym rogu w punkcie x,y, szerokości width i wysokości height. Np.: 
makeRectangle(10,10,50,50);

getStatistics(area, mean, min, max, std, histogram)
Wywołanie tego polecenia spowoduje, że w zmiennej mean zostanie zapisana średnia wartość pikseli w zaznaczeniu.

getWidth()
Zwraca szerokość obrazu w pikselach. Np.: 
szer=getWidth();

getHeight()
Zwraca wysokość obrazu w pikselach.

getPixel(x, y)
Zwraca wartość piksela o współrzędnych (x,y).

floor(x) 
Zwraca wartość x zaokrągloną w dół. Np. 
n=floor(128/10); //zwróci wartość 12.

print(args)
Wypisuje wyliczoną wartość lub wartości. Np. jeśli wartość n to 5, wówczas
print(Wynik , n); //wypisze Wynik=5

Przykład pętli iterującej n od 0 do 5:
for (n=0; n<=5; n++) {
  print n; //lista komend
}

Przykład instrukcji warunkowej:
if (n<100) {
	print n;
}

Zadanie 3

Chcemy podzielić obraz na kwadraty o boku n pikseli i w każdym z nich znaleźć średnią wartość gradientu. Gradient to wektor o dwóch współrzędnych. Pierwsza współrzędna może być oszacowana jako różnica między wartością danego piksela a piksela po lewej stronie od niego, druga jako różnica wartości danego piksela i piksela ponad nim. Wynik obliczeń ma zostać przedstawiony jako osobny obraz, na którym w każdym kwadracie zostanie wyrysowany odcinek o długości n i nachyleniu zgodnym z gradientem. Wartość gradientu może zostać zobrazowana jasnością lub jeszcze lepiej kolorem odcinka.

Przydadzą się do tego następujące komendy:

a=newArray(n); //tworzy jednowymiarową tablicę o długości n
//W ImageJ nie istnieją tablice wielowymiarowe. 
//Ale tablicy 1-D można użyć jako 2-D odpowiednio adresując jej komórki. 
//Np. gdybyśmy chcieli mieć tablicę o wymiarach nx na ny, stworzylibyśmy ją:
tabl=newArray(nx*ny);
//Wypisanie wartości elementu tablicy o współrzędnych i, j wykonalibyśmy: 
print (tabl[i+ny*j]);

//Nowy obraz tworzy się:
newImage(tytul, typ, szerokosc, wysokosc, grubosc);
//Typ to może być np. "8-bit". "8-bit black" oznacza, że na początku piksele wszystkie będą czarne.