您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python中的图像平滑

Python中的图像平滑

好问题! 这里的 帖子是一个很好的建议,但是您不会从中学到很多东西,因为scipy会为您完成所有工作!由于您的问题是说您想尝试编写函数 ,所以我将向您展示一些粗略而基本的手动方法,以期希望您能更好地理解卷积等背后的数学原理,然后再进行改进用自己的想法和努力!

注意:对于不同形状/大小的内核,您将获得不同的结果,高斯是通常的方法,但是您可以尝试其他一些有趣的方法(余弦,三角形等!)。我只是当场制作的,我认为它是一种金字塔形的。

import scipy.signal
import numpy as np
import matplotlib.pyplot as plt

im = plt.imread('example.jpg')
im /= 255.   # normalise to 0-1, it's easier to work in float space

# make some kind of kernel, there are many ways to do this...
t = 1 - np.abs(np.linspace(-1, 1, 21))
kernel = t.reshape(21, 1) * t.reshape(1, 21)
kernel /= kernel.sum()   # kernel should sum to 1!  :)

# convolve 2d the kernel with each channel
r = scipy.signal.convolve2d(im[:,:,0], kernel, mode='same')
g = scipy.signal.convolve2d(im[:,:,1], kernel, mode='same')
b = scipy.signal.convolve2d(im[:,:,2], kernel, mode='same')

# stack the channels back into a 8-bit colour depth image and plot it
im_out = np.dstack([r, g, b])
im_out = (im_out * 255).astype(np.uint8)

plt.subplot(2,1,1)
plt.imshow(im)
plt.subplot(2,1,2)
plt.imshow(im_out)
plt.show()

在此处输入图片说明

python 2022/1/1 18:32:07 有298人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶