【问题标题】:Image filtering in Python (image normalization)Python中的图像过滤(图像归一化)
【发布时间】:2016-12-18 20:43:56
【问题描述】:

我想编写执行图像过滤的代码。我使用简单的 3x3 内核,然后使用 scipy.ndimage.filters.convolve() 函数。过滤后,值的范围是 -1.27 到 1.12。过滤后如何规范化数据?我是否需要裁剪值(小于零的值设置为零,大于 1 的值设置为 1),还是使用线性归一化?如果过滤后的值大于范围[0,1]可以吗?

【问题讨论】:

  • 这取决于您的目的。我假设您的卷积包含负系数。在这种情况下,将输出范围限制为与最小/最大可视值匹配是很常见的——但这样做会丢失信息。

标签: python image numpy filtering


【解决方案1】:
>>> import numpy as np
>>> x = np.random.randn(10)
>>> x
array([-0.15827641, -0.90237627,  0.74738448,  0.80802178,  0.48720684,
    0.56213483, -0.34239788,  1.75621007,  0.63168393,  0.99192999])

尽管您会丢失这些信息,但您可以剪掉范围之外的值:

>>> np.clip(x,0,1)
array([ 0.        ,  0.        ,  0.74738448,  0.80802178,  0.48720684,
    0.56213483,  0.        ,  1.        ,  0.63168393,  0.99192999])

为了保持缩放,您可以线性地重新归一化到 0 到 1 的范围内:

>>> (x - np.min(x))/(np.max(x) - np.min(x))
array([ 0.27988553,  0.        ,  0.6205406 ,  0.64334869,  0.52267744,
    0.55086084,  0.21063013,  1.        ,  0.57702102,  0.71252388])

如果过滤后的值大于范围[0,1]可以吗?

这实际上取决于您对过滤图像的用例。

【讨论】:

    猜你喜欢
    • 2012-06-04
    • 1970-01-01
    • 2015-09-05
    • 2022-11-05
    • 2015-01-12
    • 2015-08-04
    • 2015-01-15
    • 2014-03-04
    相关资源
    最近更新 更多