Гауссовы фильтры создают дыры в гистограмме - PullRequest
0 голосов
/ 29 сентября 2019

Я использую простой фильтр Гаусса, чтобы размыть изображение в MWE ниже

import imageio
import matplotlib.pyplot as plt
import numpy as np
from scipy.ndimage.filters import gaussian_filter

image = imageio.imread('imageio:camera.png')
image_blurred = np.copy(image).astype(np.float)
image_blurred /= 255
image_blurred = gaussian_filter(image_blurred, sigma=3)
image_blurred *= 255
image_blurred = np.round(image_blurred).astype(np.uint8)

plt.close('all')
fig, ax = plt.subplots(2,2, figsize=(6,8))

ax[0][0].imshow(image, cmap='gray')
ax[0][0].set_title('Original')
ax[1][0].hist(image.ravel(), 256, density=True)

ax[0][1].imshow(image_blurred, cmap='gray')
ax[0][1].set_title('Blur 3')
ax[1][1].hist(image_blurred.ravel(), 256, density=True)
plt.show()

Проблема в том, что изображение после фильтра Гаусса показывает некоторые дыры в историограмме, как мы можем видеть ниже вгистограмма справа

enter image description here

Ожидается ли это?Если да, то какую операцию можно применить к изображению для сглаживания гистограммы?

1 Ответ

0 голосов
/ 29 сентября 2019

Обратите внимание на ось x ваших гистограмм: у второй есть меньший диапазон.Если вы создаете 256 ячеек в диапазоне, скажем, 0-240, вы должны получить 15 ячеек, которые не содержат целочисленных значений.Поскольку вы округлите значения в пикселях, эти ячейки останутся пустыми.

Это происходит потому, что размытие приводит к удалению экстремальных значений из изображения.

При вычислении гистограммы изображений с целочисленными значениями убедитесь, чтоваши контейнеры имеют целочисленную ширину.

...