Модификация массива в скользящем окне numpy

Всем привет! Нужна подсказка по работе со sliding_window_view в numpy. Пишу функция дли сигма фильтрации изображений. Есть такой код:

from collections import Counter

from PIL import Image
from numpy import array, arange, sqrt, power, uint8
from numpy.lib.stride_tricks import sliding_window_view

img = Image.open(r'img.jpg').convert('L')
img = array(img, dtype=uint8)
window_view = sliding_window_view(img, (3, 3), writeable=True)
for window in (i for w in window_view for i in w):
    avg = sum(window.flatten()) // window.size
    sig = sqrt(sum([power(pix - avg, 2) // window.size for pix in window.flatten()]))
    gst = Counter(window.flatten())

    row, col = round(window.shape[0] / 2), round(window.shape[1] / 2)
    center = window[row, col]
    s1 = sum([gst[i] * i for i in arange(center - sig, center + sig + 1, 1)])
    s2 = sum([gst[i] for i in arange(center - sig, center + sig + 1, 1)])

    if s2 != 0:
        window[row, col] = s1 / s2

Я полагал что функция sliding_window_view возвращает проекцию исходного массива и изменения элементов в скользящем окне будет приводить к изменению исходного массива. Вопрос заключается в следующем: как можно получить из массива возвращаемого функцией sliding_window_view исходный массив после изменения изображения в скользящем коне? Или может есть какая библиотека для работы с изображениями которая позволит выполнить аналогичные манипуляции?


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