Celem zajęć jest zapoznanie z algorytmem splotowej filtracji obrazu.

Zadania

  1. Napisać funkcję realizującą zadanie filtru splotowego, działającą dla dowolnego rozmiaru obrazu, jak również dowolnego rozmiaru maski (może być niesymetryczna). Używać jak mniej pętli (nie potrzeba więcej niż dwóch). Wykorzystywać funkcje pakietu NumPy (np.sum,np.multiple), będą one działały szybciej niż wasze pętle. (0,3 pkt)
    • Proszę pamiętać, że norma danej maski może być dostarczana jako parametr i/lub wyliczana na podstawie wartości maski.
    • Proszę uwzględnić jedną z metod powiększania obrazu w celu powiększenia (powielanie pikseli, odbicie lustrzane).
  2. Zbadać działanie filtrów krawędziowych dla załączonego obrazu. (0,3 pkt)
    • Pamiętać, że część filtrów krawędziowych posiada maski kierunkowe, dlatego oprócz analizy działania poszczególnych masek należy, wybrać metodę do połączenia wyników używając przykładowo pierwiastków sumy kwadratów albo sumy wartości bezwzględnych.
    • Dla ułatwienia oceny warto również przeprowadzić progowanie w celu lepszej wizualizacji krawędzi (X=(Y>wartość_progu)*1 ).
    • Maski filtrów:
      • Filtry wielokierunkowe (nie łączyć):
        1. filtr Laplace˙a: \[\begin{aligned} &\begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0  \end{bmatrix} \quad \quad \quad \begin{bmatrix} 1 & 1 & 1 \\ 1 & -8 & 1 \\ 1 & 1 & 1\end{bmatrix}   \end{aligned}\]
      • Filtry kierunkowe: 2. filtr Robertsa: \[\begin{aligned} &\begin{bmatrix} -1 & 0 \\ 1 & 0 \end{bmatrix} \quad \quad \quad \begin{bmatrix} -1 & 1 \\ 0 & 0 \end{bmatrix} \quad \quad \quad \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} \quad \quad \quad \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix} \end{aligned}\] 3. filtr Prewitta: \[\begin{aligned} &\begin{bmatrix} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1 \end{bmatrix} \quad \quad \quad \begin{bmatrix} -1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1 \end{bmatrix} \quad \quad \quad \begin{bmatrix} 0 & 1 & 1 \\ -1 & 0 & 1 \\ -1 & -1 & 0 \end{bmatrix} \quad \quad \quad \begin{bmatrix} -1 & -1 & 0 \\ -1 & 0 & 1 \\ 0 & 1 & 1 \end{bmatrix} \end{aligned}\] 4. filtr Sobela: \[\begin{aligned} &\begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix} \quad \quad \quad \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix} \quad \quad \quad \begin{bmatrix} 0 & 1 & 2 \\ -1 & 0 & 1 \\ -2 & -1 & 0 \end{bmatrix} \quad \quad \quad \begin{bmatrix} -2 & -1 & 0 \\ -1 & 0 & 1 \\ 0 & 1 & 2 \end{bmatrix} \end{aligned}\] 5. filtr Kirscha: \[\begin{aligned} &\begin{bmatrix} -3 & -3 & 5 \\ -3 & 0 & 5 \\ -3 & -3 & 5 \end{bmatrix} \quad \quad \quad \begin{bmatrix} -3 & 5 & 5 \\ -3 & 0 & 5 \\ -3 & -3 & -3 \end{bmatrix} \quad \quad \quad \begin{bmatrix} 5 & 5 & 5 \\ -3 & 0 & -3 \\ -3 & -3 & -3 \end{bmatrix} \quad \quad \quad \begin{bmatrix} 5 & 5 & -3 \\ 5 & 0 & -3 \\ -3 & -3 & -3 \end{bmatrix} \\\\ &\begin{bmatrix} 5 & -3 & -3 \\ 5 & 0 & -3 \\ 5 & -3 & -3 \end{bmatrix} \quad \quad \quad \begin{bmatrix} -3 & -3 & -3 \\ 5 & 0 & -3 \\ 5 & 5 & -3 \end{bmatrix} \quad \quad \quad \begin{bmatrix} -3 & -3 & -3 \\ -3 & 0 & -3 \\ 5 & 5 & 5 \end{bmatrix} \quad \quad \quad \begin{bmatrix} -3 & -3 & -3 \\ -3 & 0 & 5 \\ -3 & 5 & 5 \end{bmatrix} \end{aligned}\]
    • Co przebadać:
      • Dokładności wykrywania krawędzi – dokładność filtracji to odpowiedź na pytanie, czy krawędź jest wykryta w miejscu, w którym faktycznie przebiega
      • Jednoznaczności wykrytych krawędzi – jednoznaczność odpowiada na pytanie, czy wykryta krawędź jest ‘pojedyncza’ (grubość 1-pikselowa)
      • Odporności na szum – odporność na szum odpowiada na pytanie, czy wykrywane są dodatkowe elementy obrazu, niebędące krawędziami
  3. Porównać wyniki uzyskane z działania własnego filtru splotowego z efektami działania filtracji Canny’ego – użyć gotowej funkcji z OpenCV – ocenę można przeprowadzić wzrokowo (subiektywnie) [link] (0,2 pkt)
  4. Opisać obserwacje i podać wnioski. (0,2 pkt)

Do oddania

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