Алгоритмы и методы обработки изображений фильтрами
Есть такая задача, небольшой графический редактор на питоне, так вот необходимо реализовать фильтры, например: фильтр Гаусса, фильтр Собеля. Использовать 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