我正在写一个解压缩器(其中包括)必须将增量滤镜应用于RGB图像。也就是说,读取其中只有第一个像素是绝对的(R1,G1,B1)并且所有其他图像都是(R [n] -R [n-1],G [n] -G [n-1 ],B [n] -B [n-1]),并将它们转换为标准RGB。在python/numpy中加速delta滤镜
现在我使用numpy的如下:
rgb = numpy.fromstring(data, 'uint8')
components = rgb.reshape(3, -1, order='F')
filtered = numpy.cumsum(components, dtype='uint8', axis=1)
frame = numpy.reshape(filtered, -1, order='F')
凡
- 线1创建的原始图像的一维阵列;
线2重塑它在形式
[[R1, R2, ..., Rn], [G1, G2, ..., Gn], [B1, B2, ..., Bn]]
线3执行实际defiltering
- 线4再次转换回为一维数组
的问题是,它是我的需求太慢了。我对它进行了剖析,发现花费了大量的时间来重塑阵列。
所以我想知道:有没有避免重塑或加速的方法?
注:
- 我不希望有写C扩展这一点。
- 我已经使用多线程
如果你的'rgb'数据范围从0到255,有一个很好的机会,'numpy.cumsum'会悄悄溢出。看看'x = np.arange(255,dtype ='uint8')'和'y = np.cumsum(x,dtype ='uint8')'会发生什么。 – unutbu 2012-02-08 20:05:47
嗯,我认为它已经溢出了,或者换句话说,它的运行模式为255. – Alberto 2012-02-08 20:35:23
糟糕,所以这是故意的。但是,不应该用'filtered = numpy.diff(components,axis = 1)'来计算'R [n] -R [n-1]'等等。 – unutbu 2012-02-08 20:43:50