今天在调试圆环展开的代码,展开代码中的双线性插值是自己写的,原理很简单,就是计算插值点临近(左上、左下、右上、右下)四个点的均值。在代码中是这样的:
gray_value = (image[p1_y,p1_x,c]+image[p2_y,p2_x,c]+image[p3_y,p3_x,c]+image[p4_y,p4_x,c])/4
在解决了一些广播错误的报错后,算法输出了这样的展开结果:
这很显然是不对的。我试图输出不使用插值的展开结果,合理的展开图像让我排除了坐标变换公式推导错误的可能性,很显然问题出现在插值代码中,但是我不知道简单的除法运算会出现什么错误。
一开始我认为是坐标映射出现了问题,比如行和列弄反了,仔细核对之后也排除了这个可能性。
我尝试输出一些像素点插值计算的结果:
gray_value = (image[p1_y,p1_x,c]+image[p2_y,p2_x,c]+image[p3_y,p3_x,c]+image[p4_y,p4_x,c])/4
print(image[p1_y,p1_x,c],image[p2_y,p2_x,c],image[p3_y,p3_x,c],image[p4_y,p4_x,c],gray_value)
很显然,四个三位数的均值不可能是两位数甚至一位数。但我还是不知道问题出在哪里,我又尝试输出四个插值点的和值,像这样:
sum_1 = image[p1_y,p1_x,c]+image[p2_y,p2_x,c]+image[p3_y,p3_x,c]+image[p4_y,p4_x,c]
gray_value = (image[p1_y,p1_x,c]+image[p2_y,p2_x,c]+image[p3_y,p3_x,c]+image[p4_y,p4_x,c])/4
print(image[p1_y,p1_x,c],image[p2_y,p2_x,c],image[p3_y,p3_x,c],image[p4_y,p4_x,c],sum_1)
看着第五列这些神奇的三位数,我试着做了一些计算,然后突然意识到问题是什么了……