Informatyka medyczna (Bioinformatyka)


Informatyka medyczna – laboratoria

Do pisania programów w pythonie można wykorzystać darmowe IDE PyCharm (jest zainstalowane w laboratorium pod linuxami), albo dowolne inne Państwu znane i lubiane (np. ipython)

OpenCV + Python

Instalacja biblioteki OpenCV tak żeby działała z Pythonem opisana jest na stronie tutaj.

Strona biblioteki OpenCV: http://opencv.org/
Dokumentacja: http://docs.opencv.org/

Przykład użycia

Stworzenie prostego obrazka i jego wyświetlenie:

import cv2
import numpy as np

img = np.zeros((100,100,3), np.uint8)  # kolejność kanałów: BGR a nie RGB!!!
img[10,10,0] = 255 # Blue
img[10,10,1] = 255 # Green
img[10,10,2] = 255 # Red

img[20:50,20:70] = (0, 255, 255) # kolor żółty

cv2.imshow("tytuł okna", img) # stworzenie okna z obrazkiem
cv2.waitKey()                 # ważna funkcja!!!
cv2.destroyAllWindows()       # zamknięcie wszystkich okien

Funkcja cv2.waitKey() odpowiada za obsługę okienek (ich rysowanie/odświeżanie/interakcję z użytkownikiem). Funkcja zwraca kod klawisza który został naciśnięty.

Obrazki można wyświetlać również przy użyciu biblioteki matplotlib. Jednak w przypadku kolorowych obrazków trzeba pamiętać, że OpenCV zakłada inną kolejność kanałów(!!): BGR a nie tak jak (prawie) wszystko inne na świecie: RGB. Trzeba o tym też pamiętać, gdy samemu chcemy odwołać się do jakiejś składowej pikseli.

Poniżej prosty przykład jak wczytać i wyświetlić obrazek przy użyciu biblioteki OpenCV

import cv2
import numpy as np

img = cv2.imread("ścieżka_do_jakiegoś_obrazka.jpg")
cv2.imshow("tytuł okna", img) # stworzenie okna z obrazkiem
cv2.waitKey()                 # ważna funkcja!!!
cv2.destroyAllWindows()       # zamknięcie wszystkich okien

Zadanie wstępne

Proszę ściągnąć przykładowy >obrazek< i postarać się wykryć i policzyć widoczne na nim komórki.

Przykładowe sposoby przetwarzania (kolejność przypadkowa ;) ):

  • Filtrowanie (np. filtr gausowski, medianowy) obrazu w celu usunięcia szumów i nieistotnych elementów.
  • Zamiana obrazu kolorowego na obraz w odcieniach szarości, przejście do przestrzeni HSV, itp. – funkcja cv2.cvtColor
    Uwaga: stałe określające sposób konwersji pod pythonem nazywają się inaczej niż mówi dokumentacja, np.: cv2.COLOR_BGR2HSV (zamiast cv2.CV_BGR2HSV)
  • Odróżnienie obiektów od tła przez np. binaryzacja/progowanie (funkcją cv2.threshold lub cv2.adaptiveThreshold obrazu (np. progowanie po średniej jasności obrazu, na podstawie histogramu itp.), być może przez wyznaczanie konturów np. filtrem Sobela.
  • Detekcja obiektów (plam w obrazie) np. metoda wykrywania konturów – cv2.findContours, może cv2.floodFill)
    Uwaga: stałe pod pythonem nazywają się troszkę inaczej niż mówi dokumentacja, np.: cv2.RETR_EXTERNAL (zamiast CV_RETR_EXTERNAL)
  • Odfiltrowanie wykrytych obiektów które nie są poszukiwanymi obiektami (np. sprawdzając ich rozmiar, kształt, itp.)
  • Wyliczenie środka obiektów (np. wyliczając środek ciężkości używając momentów).

Projekty 1 – Komórki

Zadanie

Celem projektu jest opracowanie metody która automatycznie (lub półautomatycznie):

  1. rozpozna w podanym obrazie komórki,
  2. wyznaczy ich współrzędne oraz wielkości (pole powierzchni).

Opcjonalnie można zwizualizować poszczególne etapy przetwarzania obrazu – to najprawdopodobniej i tak będzie robione np. w celu dobrania odpowiednich wartości parametrów.

Pod tym adresem znajdują się przykładowe obrazy (niektóre stosunkowo łatwe, inne trudne np. z zachodzącymi na siebie komórkami) oraz schemat programu który należy uzupełnić własnym kodem.

Przy oddawaniu ostatecznego projektu proszę zwrócić uwagę, że funkcja process może przyjmować tylko jeden argument (obraz). Dodatkowo w ostatecznej wersji nie powinno być żadnego kodu “testującego” uruchamianego domyślnie (taki kod może być umieszczony tak jak w przykładowym pliku).

Zaliczenie projektu

  • Projekty realizowane są (domyślnie) w grupach dwuosobowych.
  • Czas przewidziany na ukończenie projektu: miesiąc.
  • Ostateczne zaliczenie projektu po wysłaniu mailem:

    1. pliku *.py (<jedno nazwisko>.py) z zaimplementowaną metodą (na początku pliku w komentarzu muszą znaleźć się imiona i nazwiska + nr indeksów wszystkich osób w grupie)
    2. krótkiego (ok. strony) sprawozdania w formacie pdf (<nazwisko>.pdf); sprawozdanie będzie musiało zawierać opis metody (poszczególne etapy przetwarzania obrazu, po co one są /jaka była motywacja/), co sprawia danej metodzie problemy (co nie działa tak jakby się chciało) a z czym sobie radzi dobrze, jakie ewentualne informacje są potrzebne od użytkownika (w trybie interaktywnym) aby uzyskać lepsze wyniki, itp.
  • Na zakończenie zajęć danego dnia proszę po jednym mailu od każdej z grup z tematem: “[IM] Komorki”. W treści proszę umieścić:

    1. nazwiska wszystkich osób w grupie (z zaznaczeniem nieobecnych)
    2. króciutki raport (wystarczą 2 zdania) co się robiło danego dnia na zajęciach (np. co się próbowało zrobić z obrazem, efekty itp.)
    3. proszę załączyć kody programów w takim stanie w jakim są na zakończenie zajęć
  • Kryteria oceny:

    • Jakość ostatecznych wyników (głównie liczba zidentyfikowanych komórek)
    • Opis metody
    • W sytuacjach spornych czas dostarczenia maila z projektem
    • Jak zwykle widzimisię prowadzącego :)

Projekty 2 – Widma

Zadanie

Mamy dane obrazki przedstawiające widma białkowe wielu osobników danego gatunku (kukurydza). Widma należą do jednej z dwóch kategorii:

  1. kontrola
  2. susza

kontrola susza
Celem projektu jest próba znalezienia statystycznie istotnych różnic pomiędzy tymi dwoma klasami.

Co nas interesuje:

  • mocne sygnały (bardzo intensywne plamki)
  • istotne różnice występujące pomiędzy klasą “susza” a “kontrola”

Co nas nie interesuje:

  • różnice wewnątrz klas (próbki dwóch różnych organizmów z tej samej klasy mogą się różnić między sobą)

Proszę spróbować rozwiązać ten problem (sposób dowolny).
Proponowane kroki (przykładowe, niekoniecznie w dobrej kolejności i niekoniecznie potrzebne…):

  • znalezienie interesujących plam
  • wyrównanie wszystkich obrazków (Tutoriale o znajdowaniu i dopasowywaniu cech w OpenCV)

    1. znalezienie punktów charakterystycznych (interesujące nas plamy lub cechy znalezione algorytmem SURF/SIFT/itp.)
    2. dopasowanie punktów w wyrównywanym obrazie i “wzorcowym” (pierwszy, średni z dotychczas wyrównanych, itp.)
    3. wyliczenie przekształcenia (raczej afiniczne)
  • analiza rozmiarów i/lub położenia dużych spotów:

    1. znalezienie wspólnych plam (spotów) wewnątrz każdej z klasy,
    2. policzenie wartości średniej i wariancji cech znalezionych spotów (położenie, rozmiar, kształt, itp.),
    3. policzenie statystyk porównujących spoty pomiędzy klasami

Pod tym adresem znajdują się przykładowe obrazy. Uwaga: chwilowo jest tam tylko po jednym obrazie z klasy “kontrola” i “susza” ale w najbliższym czasie pojawi się ich więcej.

Zaliczenie projektu

  • Projekty realizowane są w grupach (niekoniecznie takich samych jak projekt pierwszy; mogą być też większe – do 4 osób)
  • Ostateczne zaliczenie projektu po wysłaniu mailem:

    1. Raportu (pdf) opisującego Państwa pomysły na rozwiązanie postawionego problemu, opracowaną metodę (poszczególne elementy które udało się zrobić), oraz wyniki jej działania. Można napisać o nieudanych próbach (tzn. co było sprawdzone/testowane ale z jakiś powodów się nie sprawdziło). W raporcie należy również dla każdej z osoby w grupie napisać konkretnie kto co robił (może być szczegółowo).
    2. Inne pliki które Państwo stworzyli (i uznają za istotną część realizacji projektu), np. pliki z wyliczonymi cechami, arkusze kalkulacyjne ze statystykami, kod stworzonego programu, itp.