Я пишу декомпрессор, который (помимо прочего) должен применить дельта-фильтр к изображениям RGB.То есть читать изображения, где только первый пиксель является абсолютным (R1, G1, B1), а все остальные находятся в форме (R [n] -R [n-1], G [n] -G [n-1]], B [n] -B [n-1]) и преобразовать их в стандартный RGB.
Сейчас я использую 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выполняет фактическую фильтрацию
- , строка 4 снова преобразует в 1D массив
Проблема в том, что он слишком медленный для моих нужд.Я профилировал его и обнаружил, что на изменение формы массива уходит достаточно времени.
Поэтому я задаюсь вопросом: есть ли способ избежать изменения формы или ускорить ее?
Примечания:
- Я бы предпочел не писать для этого расширение C.
- Я уже использую многопоточность