Код: Выделить всё
def convolve(img, kernel):
#Get properties
row, column = img.shape
diff = int(len(kernel)/2)
output = np.zeros((row,column)) #initialize
#convolve horizontally
for i in range(row):
for j in range(column):
weight = 0
start = j - diff #I set an auxiliar variable to make possible the additions and multiplications for each pixels (fit pixel's index)
for k in range(len(kernel)):
if not(start+k < 0 or start+k >= column):
weight += img[i,start+k]*kernel[k]
output[i,j] = weight
#convolve vertically
for j in range(column):
for i in range(row):
weight = 0
start = i - diff
for k in range(len(kernel)):
if not(start+k < 0 or start+k >= row):
weight += output[start+k,j]*kernel[k]
output[i,j] = weight
output = output.astype(np.uint8)
return output
Исходное изображение:

Размытое изображение:

Мои вопросы:
- Как я могу увеличить или уменьшить эффект размытия?
- Нужно ли для этого изменить значения ядра?
- Как я могу сгенерировать или приблизить их значения ядра с использованием 1D-функции Гаусса (также 2D-ядро)?
- Кроме того, как дисперсия (σ²) влияет на ядро и степень размытия?
- Что еще более важно, существуют ли более эффективные методы реализации фильтра Гаусса вручную в Python (без использования встроенных библиотек)?
Любое объяснение или пример будем с благодарностью!
Подробнее здесь: https://stackoverflow.com/questions/798 ... aussian-ke
Мобильная версия