Алгоритмы и методы обработки изображений фильтрами

Есть такая задача, небольшой графический редактор на питоне, так вот необходимо реализовать фильтры, например: фильтр Гаусса, фильтр Собеля. Использовать imagepillow нельзя, нужно как то реализовать данные фильтры с нуля. У меня есть код для фильтра размытия Гаусса, но его не получается реализовать. Для начала представлю пример gui:

from tkinter import *
from tkinter.filedialog import askopenfilename
from PIL import ImageTk, Image, ImageFilter
from tkinter.ttk import Combobox
import numpy as np

# функция для открытия файла изображения
def open_image():
    global photo, image_label
    # отображение диалогового окна открытия файла
    file_path = askopenfilename(filetypes=[("JPEG files", "*.jpg"), ("PNG files", "*.png")])

    if file_path:
        # открытие выбранного изображения с помощью библиотеки Pillow
        image = Image.open(file_path)

        # преобразование изображения в формат, подходящий для Tkinter
        photo = ImageTk.PhotoImage(image)

        # установка ширины и высоты корневого окна Tkinter в соответствии с размерами изображения
        root.geometry("%dx%d" % (image.width, image.height))

        # удаление предыдущей метки, если она существует
        if hasattr(open_image, "image_label"):
            open_image.image_label.pack_forget()

        # создание метки для отображения изображения
        image_label = Label(root, image=photo)
        image_label.image = photo
        image_label.pack()

        # сохранение ссылки на метку для возможности ее удаления при следующей загрузке изображения
        open_image.image_label = image_label


# создание корневого окна Tkinter
root = Tk()
root.title('Граф_Редактор')
root.geometry("600x600")
# создание кнопки загрузки изображений
load_button = Button(root, text="Загрузить изображение", command=open_image)
load_button.pack()


# запуск главного цикла обработки событий Tkinter
root.mainloop()

Теперь пример фильтра Гаусса, с которым ничего не вышло:

def blur(a):
    kernel = np.array([[1.0,2.0,1.0], [2.0,4.0,2.0], [1.0,2.0,1.0]])
    kernel = kernel / np.sum(kernel)
    arraylist = []
    for y in range(3):
        temparray = np.copy(a)
        temparray = np.roll(temparray, y - 1, axis=0)
        for x in range(3):
            temparray_X = np.copy(temparray)
            temparray_X = np.roll(temparray_X, x - 1, axis=1)*kernel[y,x]
            arraylist.append(temparray_X)

    arraylist = np.array(arraylist)
    arraylist_sum = np.sum(arraylist, axis=0)
    return arraylist_sum

Ответы (0 шт):