我不确定问题是什么,但我的第一个猜测是代码从图像中提取的 16 个像素以错误的顺序被解释。
换句话说,也许当前的代码块
val b_1 = q(x1, x2, x3)(extracted(0), extracted(1), extracted(2), extracted(3))
val b0 = q(x1, x2, x3)(extracted(4), extracted(5), extracted(6), extracted(7))
val b1 = q(x1, x2, x3)(extracted(8), extracted(9), extracted(10), extracted(11))
val b2 = q(x1, x2, x3)(extracted(12), extracted(13), extracted(14), extracted(15))
需要是别的东西,也许像
val b_1 = q(x1, x2, x3)(extracted(0), extracted(4), extracted(8), extracted(12))
val b0 = q(x1, x2, x3)(extracted(1), extracted(5), extracted(9), extracted(13))
val b1 = q(x1, x2, x3)(extracted(2), extracted(6), extracted(10), extracted(14))
val b2 = q(x1, x2, x3)(extracted(3), extracted(7), extracted(11), extracted(15))
?
这种混洗像素会产生类似于您所看到的结果 - 输出在“平滑”区域看起来很好,但在非平滑区域中结果更明显是错误的。
这个“非缩放”测试(运行“插值”以生成完全相同大小的图像)是一个很好的第一个测试——它应该提供与输入图像完全相同的像素对像素的输出图像。(扩大或缩小图像的测试,不清楚输出图像应该是什么)。
我还会考虑在一个非常简单的图像上运行非缩放测试(甚至可能是缩放测试),它足够小,以至于人类可以单步遍历图像中的每个像素 - 可能类似于
0 0 0
0 5 6
0 8 9
一旦你让这个“非缩放”测试工作,我同意罗伯特的观点,要真正测试插值,你还需要运行一些扩展或缩小图像的测试。