我的示例图像如下:
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. ]])我在这里做错什么了?任何帮助都将不胜感激。
发布于 2018-08-27 22:57:17
你试图用一个不符合你的功能定义的操作来解决这个问题。这不是一个简单的卷积操作;操作取决于窗口的结构。对于给定的a数组,您需要非零元素的平均值。为什么不这样写你的过滤器呢?
您给定的过滤器错误地处理所有东西,除了两个非零项之间的直接点:现有的元素根本不应该改变,但是过滤器将它们切成两半;对于“四个角的中心”条目,过滤器对两个角完全加权,而忽略其他的。
在执行部分更新问题后:
好多了。现在,如果您更改内核以专门处理四角元素的情况,会发生什么,如下所示?
kernel = array([[0.25, 0.5, 0.25],
[0.5 , 1. , 0.5 ],
[0.25, 0.5, 0.25]])https://stackoverflow.com/questions/52047851
复制相似问题