首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python枕头中核大小大于5x5的卷积

在python枕头中核大小大于5x5的卷积
EN

Stack Overflow用户
提问于 2015-07-15 13:55:38
回答 2查看 6.6K关注 0票数 3

我想用一个简单的卷积内核在python枕头中过滤一个图像。然而,为了达到最佳结果,我需要一个9x9内核。这是枕头中的不可能,至少在使用ImageFilter.Kernel和内置filter()方法时是如此,这两种方法仅限于5x5内核。

如果没有实现我自己的卷积代码,是否有一种方法可以过滤/转换内核大小大于5x5的图像?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-17 13:13:31

我很惊讶地看到PIL没有超过5x5内核的支持。因此,谨慎地考虑其他Python包,例如OpenCVscipy.为了节省时间,让我们使用scipy。OpenCV很难配置,尽管它非常强大。

我建议使用scipyimread包加载映像,并将映像与内核进行转换,然后在完成后转换为PIL映像。从convolve包中使用ndimage,然后通过Image.fromArray将其转换回PIL映像。它确实支持转换numpy.ndarray (这是使用scipy.ndimage.imread时加载的),这是很棒的。

就像这样,假设一个9×9的平均滤波器:

代码语言:javascript
复制
# Import relevant packages
import numpy as np
from scipy import ndimage
from PIL import Image

# Read in image - change filename to whatever you want
img = ndimage.imread('image.jpg')

# Create kernel
ker = (1/81.0)*np.ones((9,9))

# Convolve
out = ndimage.convolve(img, ker)

# Convert back to PIL image
out = Image.fromArray(out, 'RGB')
票数 3
EN

Stack Overflow用户

发布于 2017-05-03 12:07:49

比维普斯是另一种选择,如果你没有被绑在枕头上,松软的或者是枕木的话。它速度更快,需要更少的内存,特别是对于较大的图像。它也会打败opencv的,至少在某些基准上

我试过这台笔记本电脑:

代码语言:javascript
复制
import sys
import numpy as np
from scipy import ndimage
from PIL import Image

img = ndimage.imread(sys.argv[1])
ker = (1 / 81.0) * np.ones((9, 9))
out = ndimage.convolve(img, ker)
out = Image.fromarray(out)
out.save(sys.argv[2])

我可以这样运行:

代码语言:javascript
复制
$ /usr/bin/time -f %M:%e ./try257.py ~/pics/wtc-mono.jpg x.jpg
300352:22.47

因此,2015年i5笔记本电脑上的10kx10k像素单jpg大约需要22秒,并且需要300 of的最大内存。

在比目鱼里是:

代码语言:javascript
复制
import sys
import pyvips

im = pyvips.Image.new_from_file(sys.argv[1], access="sequential")
size = 9
kernel = size * [size * [1.0 / (size * size)]]
im = im.conv(kernel)
im.write_to_file(sys.argv[2])

我看到:

代码语言:javascript
复制
$ /usr/bin/time -f %M:%e ./try258.py ~/pics/wtc-mono.jpg x.jpg
44336:4.76

大约5秒45 of的内存。

这是一个浮子卷积。您可以将其交换为int精度,如下所示:

代码语言:javascript
复制
im = im.conv(kernel, precision="integer")

我看到:

代码语言:javascript
复制
$ /usr/bin/time -f %M:%e ./try258.py ~/pics/wtc-mono.jpg x.jpg
44888:1.79

1.8秒

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31432443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档