计算边缘缺失的像素值

时间:2018-08-27 22:43:00

标签: python numpy image-processing scipy

我的示例图像如下:

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。

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

Kernel

其中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. ]])

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

1 个答案:

答案 0 :(得分:1)

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

您给定的过滤器会误处理除两个非零条目之间的点以外的所有内容:现有元素根本不应更改,但过滤器会将它们切成两半;对于“四个角的中心”条目,过滤器将对两个角进行全权重运算,而忽略其他两个角。


OP更新了问题之后

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

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