python图像模糊处理_Python图像处理-模糊和锐化

在这篇文章中,我们将讨论如何应用模糊和锐化图像。这些基本知识构成了许多更高级应用程序的主干。我们将讨论如何将这些知识应用到彩色图像上。现在开始吧!从导入所需的Python库开始。import numpy as npimport matplotlib.pyplot as pltfrom http://skimage.io import imshow, imreadfrom skimage.color...
摘要由CSDN通过智能技术生成

在这篇文章中,我们将讨论如何应用模糊和锐化图像。这些基本知识构成了许多更高级应用程序的主干。我们将讨论如何将这些知识应用到彩色图像上。现在开始吧!从导入所需的Python库开始。import numpy as np
import matplotlib.pyplot as plt
from http://skimage.io import imshow, imread
from skimage.color import rgb2yuv, rgb2hsv, rgb2gray, yuv2rgb, hsv2rgb
from scipy.signal import convolve2d
我们将使用下图:dog = imread('fire_dog.png')
plt.figure(num=None, figsize=(8, 6), dpi=80)
imshow(dog);
现在我们应用到图像的核是高斯模糊核和锐化核。你可以在下面看到如何定义它们的矩阵。# 锐化
sharpen = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])
# 高斯模糊
gaussian = (1 / 16.0) * np.array([[1., 2., 1.],
[2., 4., 2.],
[1., 2., 1.]])
fig, ax = plt.subplots(1,2, figsize = (17,10))
ax[0].imshow(sharpen, cmap='gray')
ax[0].set_title(f'Sharpen', fontsize = 18)
ax[1].imshow(gaussian, cmap='gray')
ax[1].set_title(f'Gaussian Blur', fontsize = 18)
[axi.set_axis_off() for axi in ax.ravel()];
图片上传失败​重试但如何将这些核应用到图像中呢?我首先定义了下面的函数来允许我们迭代地处理核。请注意,我们将边界设置为fill,将fillvalue设置为0,这对于确保输出将是一个0填充的矩阵、且其大小与原始矩阵相同非常重要。def multi_convolver(image, kernel, iterations):
for i in range(iterations):
image = convolve2d(image, kernel, 'same', boundary = 'fill',
fillvalue = 0)
return image
multi_convolver(dog, gaussian, 2)
图片上传失败​重试似乎我们遇到了一个值错误。为什么会这样?记住,当我们将一个矩阵与另一个矩阵卷积时,矩阵的维数应该相同。这意味着我们不能将2D卷积应用到3D矩阵(因为颜色通道)。为了解决这个问题,我们必须首先将图像转换成灰度。dog_grey = rgb2gray(dog)
plt.figure(num=None, figsize=(8, 6), dpi=80)
imshow(dog_grey);
现在如果我们运行这个函数,应该会得到想要的效果。convolved_image = multi_convolver(dog_grey, gaussian, 2)
plt.figure(num=None, figsize=(8, 6), dpi=80)
imshow(convolved_image);
我们现在可以看到,图像已经明显模糊了。下面的代码将告诉我们,如果继续对图像运行高斯模糊卷积,图像会发生什么。def convolution_plotter(image, kernel):
iterations = [1,10,20,30]
f_size = 20
fig, ax = plt.subplots(1,4, figsize = (15,7))
for n, ax in enumerate(ax.flatten()):
ax.set_title(f'Iteration : {iterations[n]}', fontsize =
f_size)
ax.imshow(multi_convolver(image, kernel, iterations[n]),
cmap='gray')
ax.set_axis_off()
fig.tight_layout()
convolution_plotter(dog_grey, gaussian)
图片上传失败​重试太好了!由于核的应用,我们可以清楚地看到图像的持续模糊。但是如果你需要模糊图像并保留颜色呢?让我们首先尝试应用每个颜色通道的卷积。def convolver_rgb(image, kernel, iterations = 1):
convolved_image_r = multi_convolver(image[:,:,0], kernel,
iterations)
convolved_image_g = multi_convolver(image[:,:,1], kernel,
iterations)
convolved_image_b = multi_convolver(image[:,:,2], kernel,
iterations)
reformed_image = np.dstack((np.rint(abs(convolved_image_r)),
np.rint(abs(convolved_image_g)),
np.rint(abs(convolved_image_b)))) /
255
fig, ax = plt.subplots(1,3, figsize = (17,10))
ax[0].imshow(abs(convolved_image_r), cmap='Reds')
ax[0].set_title(f'Red', fontsize = 15)
ax[1].imshow(abs(convolved_image_g), cmap='Greens')
ax[1].set_title(f'Green', fontsize = 15)
ax[2].imshow(abs(convolved_image_b), cmap='Blues')
ax[2].set_title(f'Blue', fontsize = 15)
[axi.set_axis_off() for axi in ax.ravel()]
return np.array(reformed_image).astype(np.uint8)
convolved_rgb_gauss = convolver_rgb(dog, gaussian, 2)
图片上传失败​重试这个函数实际上返回给我们经过修改的图像,我们只需要将它插入show函数。plt.figure(num=None, figsize=(8, 6), dpi=80)
imshow(convolved_rgb_gauss);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值