import cv2
import numpy as np
import matplotlib.pyplot as plt

image = cv2.imread("himeji.jpg")   # podaj poprawną ścieżkę
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

def apply_filter(grayscale_image, filter_kernel):
    # Wymiary obrazu
    image_height, image_width = grayscale_image.shape

    # Obraz wyjsciowy
    filtered_image = np.zeros((image_height - 2, image_width -2), dtype=np.float32)

    # Przechodzimy przez każdy pixel (z pominieciem krawedzi)
    for y in range (1, image_height - 1):
        for x in range (1, image_width -1):
            #Wycinamy 3x3 fragment obrazu wokół aktulanego piksela
            neighborhood = grayscale_image[y - 1:y + 2,x - 1: x + 2]
            #Obliczamy wartość konwulcji: suma elementów
            convolution_value = np.sum(neighborhood * filter_kernel)
            #Przypisujemy wynik do nowej macierzy
            filtered_image[y - 1, x - 1] = convolution_value
    #Skalowanie do przedziału 0-255 i konwersaja na typ całkowity
    filtered_image = np.abs(filtered_image)
    filtered_image = np.clip(filtered_image, 0, 255).astype(np.uint8)
    #Wyswietlenie
    plt.figure(figsize=(10,4))

    plt.subplot(1,2,1)
    plt.title("Orginalny obraz")
    plt.imshow(grayscale_image, cmap='gray')

    plt.subplot(1,2,2)
    plt.title("Nałożony filtr")
    plt.imshow(filtered_image, cmap='gray')

    plt.show()

#Wykrywanie krawędzi pionowych
apply_filter(gray, np.array([
    [-1,0,1],
    [-2,0,2],
    [-1,0,1]
]))