Celem zajęć jest zapoznanie z podstawowymi operatorami morfologicznymi.

Zadania

  1. Wczytać obrazy testowe dołączone do instrukcji. Po wczytaniu przerobić je na binarne (\(0\) lub \(1\)) - (IMG>0.5)*1. Wybrać dwa z nich lub przygotować własne obrazy testowe do wykorzystania w dalszej części zadania.
  2. Zaimplementować własne implementacje dla Dylatacji, Erozji, Otwarcia i Domknięcia działające dla dowolnego elementu strukturalnego. (0,2 pkt)
  3. Porównać działanie własnych implementacji z funkcjami z OpenCV. Eksperymenty z OpenCV przeprowadzić dla 1, 2 i 3 iteracji w przypadkach, kiedy ten parametr ma znaczenie oraz dla elementów strukturyzujących o rozmiarach 3,5,7 i kształcie kwadrat oraz dysk. Wyświetlić i skomentować wybrane wyniki. Można wyświetlić z użyciem innej palety kolorów nie koniecznie skali odcieni szarości. (0,1 pkt)
  4. Zaimplementować jeden własny algorytm wykrywania konturu (na bazie erozji, zaproponować element strukturyzujący), a następnie sprawdzić wyniki jego działania z funkcją OpenCV. (0,2 pkt) Przykładowe algorytmy (jest ich więcej):
    • \(G(I)=(I \oplus B) - I\)
    • \(G(I)=I - (I \ominus B)\)
    • \(Grad(I)=(I \oplus B) - (I \ominus B)\)
  5. Narysować kontur obliczony własną funkcją (funkcjami) i metodą z OpenCV – pokazać różnice, jeśli są (można odjąć obrazy i wyświetlić różnicę w wartościach bezwzględnych). Wyświetlić kontury oraz ich wzajemne różnice. (0,2 pkt)
  6. Obliczyć (cv2.contourArea) oraz wyświetlić pole powierzchni największego znalezionego konturu dla funkcji napisanej samemu i wyniku działania funkcji OpenCV – odpowiednio przetworzyć własny kontur do formatu oczekiwanego przez OpenCV (OpenCV: Contour Features). Podać i skomentować uzyskane wartości. (0,3 pkt)

Do oddania

  • Sprawozdanie w PDF
  • Kod programu, jaki powstał w ramach instrukcji.