3

PIL中的ImageFilter如何在使用内核或掩码过滤后将像素值(不是内核)归一化在0到255之间?(特别是零和内核,如:(-1,-1,-1,0,0,0,1 ,1,1))

我的代码是这样的:
导入图片
导入图像过滤器
Horiz = ImageFilter.Kernel((3, 3), (-1,-2,-1,0,0,0,1,2,1), scale=None, offset=0) #sobel mask
im_fltd = myimage.filter(水平)
4

2 回答 2

1

答案在文档Kernel

如果给出了 scale 参数,则将内核应用于每个像素的结果除以 scale 值。默认值为内核权重的总和。

编辑:我做了一些实验,发现当比例为零时会发生什么,因为除以零不会很好。任何结果值都<= 0变为255。0> 0

在你的情况下,我建议使用比例1和偏移量128

PS您可以scale通过查看源代码来验证参数的计算:

    if scale is None:
        # default scale is sum of kernel
        scale = reduce(lambda a,b: a+b, kernel)
于 2013-04-09T17:58:02.433 回答
1

Mark 的上述回答陈述了他的理论,即当零和内核与比例参数 0 或 None 或未通过/提及时会发生什么。现在讨论 PIL 在应用内核、缩放和偏移后如何处理计算的像素值,这些值不在 [0,255] 范围内。我关于它如何标准化计算的像素值的理论是它只是简单地做:任何结果值 <= 0 变为 0,任何 > 255 变为 255。

于 2013-04-11T19:22:38.983 回答