首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ImageFilter.BoxBlur给出了错误的结果?

为什么ImageFilter.BoxBlur给出了错误的结果?
EN

Stack Overflow用户
提问于 2021-05-16 20:20:24
回答 1查看 166关注 0票数 0

我试图使用枕头与一些测试数据,我正在生成的黑白,像素一个像素。我想使用这些数据来测试我的一个像素框模糊。我将灰度像素存储在3x3矩阵中,如下所示:

代码语言:javascript
复制
 5  10   5
10  15  10
 5  10   5

在一个像素框模糊的情况下,我希望得到的结果如下:

代码语言:javascript
复制
10   9  10
 9   8   9
10   9  10

但是,在调用image.tobytes()之后,我的结果是一个包含9个新行(\n)的数组。有人能指指我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-18 11:34:08

我理解您的预期输出,但让我们先来看看现实:

代码语言:javascript
复制
import numpy as np
from PIL import Image, ImageFilter

array = np.array([[5, 10, 5], [10, 15, 10], [5, 10, 5]]).astype(np.uint8)
img = Image.fromarray(array).filter(ImageFilter.BoxBlur(1))
print(np.array(img), '\n\n', img.tobytes())
# [[9 9 9]
#  [9 9 9]
#  [9 9 9]] 
# 
#  b'\t\t\t\t\t\t\t\t\t'

结果是一个包含所有9的数组--当将9转换为字节时,您将获得水平选项卡或\tASCII字符。老实说,我不明白,为什么您会得到\n或行提要,这将10转换成字节,这里!?

但是,为什么结果呢?从文件中(我强调):

通过将每个像素设置为方框中像素的平均值来模糊图像,在每个方向上扩展半径像素。

因此,您的矩阵实际上类似于计算九个(内部)像素的情况:

代码语言:javascript
复制
 5   5  10   5   5
 5   5  10   5   5
10  10  15  10  10
 5   5  10   5   5
 5   5  10   5   5

对于9个内部像素中的每个像素,我们得到:

代码语言:javascript
复制
(4 * 5 + 4 * 10 + 15) / 9 = 75 / 9 = 8.333 

看来,我们这里也有上限,而不是普通的四舍五入。

这可能是由于:

使用优化的实现,该实现相对于任意半径值的图像大小以线性时间运行。

所以,很可能是一些变化的魔法,而不是真正的分裂或类似的东西。

您还可以检查边框像素是否被复制,而不是镜像:

代码语言:javascript
复制
import numpy as np
from PIL import Image, ImageFilter

array = np.array([[5, 10, 5], [10, 15, 10], [5, 10, 5]]).astype(np.uint8)
img = Image.fromarray(array).filter(ImageFilter.BoxBlur(2))
print(np.array(img), '\n\n', img.tobytes())
# [[7 7 7]
#  [7 7 7]
#  [7 7 7]] 

设置两个可能的7x7矩阵,如上面为5x5矩阵所做的,并对结果进行比较。

一句话:BoxBlur的工作方式与你所期望的不一样。而且,为什么得到\n,而不是\t,这仍然是令人困惑的。

代码语言:javascript
复制
----------------------------------------
System information
----------------------------------------
Platform:      Windows-10-10.0.16299-SP0
Python:        3.9.1
PyCharm:       2021.1.1
NumPy:         1.20.2
Pillow:        8.2.0
----------------------------------------
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67561241

复制
相关文章

相似问题

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