如何防止 Numpy/ SciPy 高斯模糊将图像转换为灰度?
How can I prevent Numpy/ SciPy gaussian blur from converting image to grey scale?
我想对图像执行高斯模糊,但我不想转换为灰度。有没有办法执行此操作并保持颜色?
from scipy import misc
import scipy
import numpy as np
a = misc.imread('A.jpg')
# A retains its color
misc.imsave('color.jpg', a)
# A_G_Blur gets converted to grey scale, I want to prevent this
a_g_blure = ndimage.uniform_filter(a, size=11)
# I want it to keep it's color
misc.imsave('now_grey.jpg', a)
a
是一个形状为 (M, N, 3) 的 3 维数组。问题是 ndimage.uniform_filter(a, size=11)
将长度为 11 的过滤器应用于 a
的每个维度,包括保存颜色通道的第三个轴。当您将长度为 11 的过滤器应用于长度为 3 的轴时,结果值都非常接近三个值的平均值,因此您得到的结果非常接近灰度。 (根据图像,您可能会留下一些颜色。)
您真正想要的是分别对每个颜色通道应用二维滤镜。您可以通过将元组作为 size
参数来实现,最后一个轴的大小为 1:
a_g_blure = ndimage.uniform_filter(a, size=(11, 11, 1))
注意:uniform_filter
不是 Gaussian blur. For that, you would use scipy.ndimage.gaussian_filter
. You might also be interested in the filters provided by scikit-image
. In particular, see skimage.filters.gaussian_filter
。
对于高斯模糊,我建议使用 skimage.filters.gaussian_filter。
from skimage.io import imread
from skimage.filters import gaussian_filter
sigma=5 # blur radius
img = imread('path/to/img')
# this will only return grayscale
grayscale_blur = gaussian_filter(src_img, sigma=sigma)
# passing multichannel param as True returns colors
color_blur = gaussian_filter(src_img, sigma=sigma, multichannel=True)
我想对图像执行高斯模糊,但我不想转换为灰度。有没有办法执行此操作并保持颜色?
from scipy import misc
import scipy
import numpy as np
a = misc.imread('A.jpg')
# A retains its color
misc.imsave('color.jpg', a)
# A_G_Blur gets converted to grey scale, I want to prevent this
a_g_blure = ndimage.uniform_filter(a, size=11)
# I want it to keep it's color
misc.imsave('now_grey.jpg', a)
a
是一个形状为 (M, N, 3) 的 3 维数组。问题是 ndimage.uniform_filter(a, size=11)
将长度为 11 的过滤器应用于 a
的每个维度,包括保存颜色通道的第三个轴。当您将长度为 11 的过滤器应用于长度为 3 的轴时,结果值都非常接近三个值的平均值,因此您得到的结果非常接近灰度。 (根据图像,您可能会留下一些颜色。)
您真正想要的是分别对每个颜色通道应用二维滤镜。您可以通过将元组作为 size
参数来实现,最后一个轴的大小为 1:
a_g_blure = ndimage.uniform_filter(a, size=(11, 11, 1))
注意:uniform_filter
不是 Gaussian blur. For that, you would use scipy.ndimage.gaussian_filter
. You might also be interested in the filters provided by scikit-image
. In particular, see skimage.filters.gaussian_filter
。
对于高斯模糊,我建议使用 skimage.filters.gaussian_filter。
from skimage.io import imread
from skimage.filters import gaussian_filter
sigma=5 # blur radius
img = imread('path/to/img')
# this will only return grayscale
grayscale_blur = gaussian_filter(src_img, sigma=sigma)
# passing multichannel param as True returns colors
color_blur = gaussian_filter(src_img, sigma=sigma, multichannel=True)