高斯滤波器在直方图中创建空洞

Gaussian filters create holes in histogram

我正在使用一个简单的高斯滤波器来模糊下面 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()

问题是,高斯滤波后的图像在直方图中显示了一些空洞,如下图右侧的直方图所示

这是预期的吗?如果可以,我可以对图像应用哪种操作来平滑直方图?

注意直方图的 x 轴:第二个的范围较小。如果您在 0-240 范围内创建 256 个 bin,您应该得到 15 个不包含整数值的 bin。因为您对像素值进行了四舍五入,所以这些箱子将保持为空。

发生这种情况是因为模糊往往会从图像中移除极值。

计算整数值图像的直方图时,请确保您的分箱具有整数宽度。