【问题标题】:calculate missing pixel values from edges从边缘计算缺失的像素值
【发布时间】:2019-02-02 11:54:08
【问题描述】:

我的示例图像如下所示:

array([[2, 0, 2, 0, 3, 0],
       [0, 0, 0, 0, 0, 0],
       [2, 0, 2, 0, 4, 0],
       [0, 0, 0, 0, 0, 0],
       [9, 0, 3, 0, 3, 0],
       [0, 0, 0, 0, 0, 0]])

我想根据相邻像素值计算所有缺失的像素值为 0。

缺失像素值的计算公式如下:

其中DN是可用的值,X是DN采样的值,需要填写。

X01 = 0.5 DN00 + 0.5 DN02

X10 = 0.5 DN00 + 0.5 DN20

X11 = 0.25 DN00 + 0.25 DN02 + 0.25 DN20 + 0.25 DN22

X12 = 0.5 DN02 + 0.5 DN22

X21 = 0.5 DN20 + 0.5 DN22

到目前为止,我已经在图像上尝试了convolve2d

from scipy.signal import convolve2d

kernel =  array([[1. , 0.5, 1. ],
                 [0.5, 1. , 0.5],
                 [1. , 0.5, 1. ]])

convolve2d(a, kernel, boundary='wrap', mode='same')

但输出不正确:

array([[ 2. ,  2. ,  2. ,  2.5,  3. ,  2.5],
       [ 2. ,  8. ,  2. , 11. ,  3.5, 11. ],
       [ 2. ,  2. ,  2. ,  3. ,  4. ,  3. ],
       [ 5.5, 16. ,  2.5, 12. ,  3.5, 18. ],
       [ 9. ,  6. ,  3. ,  3. ,  3. ,  6. ],
       [ 5.5, 16. ,  2.5, 11. ,  3. , 17. ]])

我在这里做错了什么?任何帮助将不胜感激。

【问题讨论】:

    标签: python numpy image-processing scipy


    【解决方案1】:

    您正在尝试使用与您的功能定义不匹配的操作来解决此问题。这不是简单的卷积操作;该操作取决于窗口的结构。使用给定的 a 数组,您需要非零元素的平均值。为什么不这样写你的过滤器呢?

    您给定的过滤器错误地处理了除了两个非零条目之间的点之外的所有内容:现有元素根本不应该改变,但过滤器将它们切成两半;对于“四个角的中心”条目,过滤器对两个角取全部权重并忽略其他角。


    OP 更新问题后:

    好多了。现在,如果您更改内核以专门处理四角元素的情况会发生什么,如下所示?

    kernel = array([[0.25, 0.5, 0.25],
                    [0.5 , 1. , 0.5 ],
                    [0.25, 0.5, 0.25]])
    

    【讨论】:

    • 对不起,我的问题中有一个旧内核。我已经用新内核更新了这个问题。
    • 太棒了。它按预期工作。非常感谢您的帮助。
    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多