我的示例图像如下:
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. ]])
我在这里做错了什么?任何帮助将不胜感激。
答案 0 :(得分:1)
您正在尝试使用与您的功能定义不匹配的操作来解决此问题。这不是一个简单的卷积操作。该操作取决于窗口的结构。使用给定的a
数组,您需要非零元素的均值。为什么不这样写过滤器?
您给定的过滤器会误处理除两个非零条目之间的点以外的所有内容:现有元素根本不应更改,但过滤器会将它们切成两半;对于“四个角的中心”条目,过滤器将对两个角进行全权重运算,而忽略其他两个角。
OP更新了问题之后
好多了。现在,如果您更改内核以专门处理四角元素的情况,会发生什么情况?
kernel = array([[0.25, 0.5, 0.25],
[0.5 , 1. , 0.5 ],
[0.25, 0.5, 0.25]])