我是否必须创建一个全新的数组来存储卷积结果?
Do I have to create a whole new array to store results from convolution?
我在 Python 中使用我的卷积算法,我注意到在沿着 原始 数组滑动过滤器并更新其中的条目时,结果非常好阴暗:
而如果我创建了一个全新的数组,它的级别与原始数组相似。
我的愚蠢问题 - 后者是编写此算法的正确方法吗(我猜是)?前者丢失了什么 - 或者更确切地说,有没有一种方法可以编写这个算法,这样我就不必初始化另一个整个数组并占用内存,而是将结果存储在原始数组中或...... ?
您应该使用第二个数组来存储结果。否则,您的大部分计算都是基于您已经更改的像素,而不是基于图像中的原始像素。这就是为什么您的第一个示例的变化超出您的预期。
从技术上讲,您可以通过使用线程在没有第二个数组的情况下做到这一点。您只需要拥有与像素一样多的线程。然后每个线程计算一个像素并将其存储回图像中。然而,这将比仅使用第二个数组占用更多的内存,并且您必须小心地同步事物以避免修改您仍然需要进行计算的像素。而且,它会变慢。
我在 Python 中使用我的卷积算法,我注意到在沿着 原始 数组滑动过滤器并更新其中的条目时,结果非常好阴暗:
而如果我创建了一个全新的数组,它的级别与原始数组相似。
我的愚蠢问题 - 后者是编写此算法的正确方法吗(我猜是)?前者丢失了什么 - 或者更确切地说,有没有一种方法可以编写这个算法,这样我就不必初始化另一个整个数组并占用内存,而是将结果存储在原始数组中或...... ?
您应该使用第二个数组来存储结果。否则,您的大部分计算都是基于您已经更改的像素,而不是基于图像中的原始像素。这就是为什么您的第一个示例的变化超出您的预期。
从技术上讲,您可以通过使用线程在没有第二个数组的情况下做到这一点。您只需要拥有与像素一样多的线程。然后每个线程计算一个像素并将其存储回图像中。然而,这将比仅使用第二个数组占用更多的内存,并且您必须小心地同步事物以避免修改您仍然需要进行计算的像素。而且,它会变慢。