Zestaw zadań D — splot

Uwaga:

  • W poniższych zadaniach wynik może nie mieścić się w zakresie 0-255, np. może być ujemny. Dlatego trzeba zwrócić uwagę, czy funkcja zwraca tablicę o odpowiednim typie mieszczącym wszystkie zwracane wartości, np. float (ale wystarczy jeśli zwracana tablica będzie miała taki sam tym jak tablica z maską).
  • W celu wykonania jakiejś operacji dla wszystkich możliwych współrzędnych w tablicy tab można wykorzystać konstrukcję:
    1
    2
    
    for (y,x) in np.ndindex(tab.shape):
        print(y,x,tab[y,x])
  • W celu wykonania jakiejś operacji dla każdego elementu tablicy (gdy potrzebujemy zarówno współrzędne jak i wartość każdego elementu) można wykorzystać następującą konstrukcję:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    for index, value in np.ndenumerate(tab): 
        # index jest krotką zawierającą współrzędne punktu o wartości value
        print(index[0],index[1],value) 
        ...
     
    # gdy przetwarzamy tablice 2D możemy sobie uprościć zapis:    
    for (row, col), value in np.ndenumerate(tab):
        print(row,col,value)
        ...

Zestaw D

  1. Napisz funkcję zadD1(image, mask) obliczającą splot obrazu 2D z poziomą maską 1D bez obrotu maski (czyli w “normalnym” wzorze nie ma odejmowania tylko dodawanie współrzędnych), maska ma nieparzystą długość i środkowy element maski ma współrzędną zero. Zakładamy, że wartości pikseli poza obrazem mają wartość zero, a wynik ma identyczny rozmiar co obraz wejściowy.
    Proszę zwrócić uwagę, że wynik może nie mieścić się w zakresie 0-255, np. może być ujemny (maska będzie miała typ int lub float).
    Proszę nie używać funkcji np.convolve

  2. Napisz funkcję zadD2(image, mask) obliczającą splot obrazu 2D z pionową maską 1D bez obrotu maski (czyli w “normalnym” wzorze nie ma odejmowania tylko dodawanie współrzędnych), maska ma nieparzystą długość i środkowy element maski ma współrzędną zero. Zakładamy, że wartości pikseli poza obrazem mają wartość zero, a wynik ma identyczny rozmiar co obraz wejściowy.
    Proszę zwrócić uwagę, że wynik może nie mieścić się w zakresie 0-255, np. może być ujemny (maska będzie miała typ int lub float).
    Proszę nie używać funkcji np.convolve

  3. Napisz funkcję zadD3(image, mask) obliczającą splot obrazu 2D z dwuwymiarową maską 2D bez obrotu maski (czyli w “normalnym” wzorze nie ma odejmowania tylko dodawanie współrzędnych), maska ma nieparzyste wymiary i środkowy element maski ma współrzędną (0,0). Zakładamy, że wartości pikseli poza obrazem mają wartość zero, a wynik ma identyczny rozmiar co obraz wejściowy.
    Proszę zwrócić uwagę, że wynik może nie mieścić się w zakresie 0-255, np. może być ujemny (maska będzie miała typ int lub float).
    Proszę nie używać funkcji np.convolve

  4. Napisz funkcję zadD4(image, maskH, maskV) obliczającą splot obrazu 2D z separowalną dwuwymiarową maską zadaną jako 2 niezależne maski: pozioma (maskH) oraz pionowa (maskV). Wszystkie założenia są identyczne jak w poprzednich zadaniach. Funkcja ma zwracać dwie(!) wartości jako krotkę: (wyliczony_splot, maska_2d). Zastosowanie funkcji zadD3(image, maska_2d) powinno zwrócić identyczny obraz jak wyliczony_splot.