У меня есть PNG-изображение с размерами 1024x1024
, которое содержит RGB-кодированные данные о высоте. я прочитал в изображение с помощью asarray
из numpy
:Быстрый способ декодирования изображения RGB в python
rgb_data = np.asarray(image)
Какие результаты в 3D-массив с размерами (1024, 1024, 4)
. (Я использую RGBA)
Мне нужно запустить некоторые фильтры (гауссовы, медианные) по этим данным, но мне нужно запустить их на декодированных данных о высоте.
Данные рельефа могут быть расшифрованы с помощью следующей функции:
def decodeRGB(pixel):
return (pixel[0] * 256 + pixel[1] + pixel[2]/256) - 32768
После декодирования у меня будет 2D массив с размерами (1024, 1024)
, который содержит декодированные данные высотных отметок. (Фактическая высота над уровнем моря)
То, что я до сих пор это:
rgb_data = np.asarray(image)
decoded_data = np.zeros(tile.size)
for rownum in range(width):
for colnum in range(height):
decoded_data[rownum][colnum] = decodeRGB(rgb_data[rownum][colnum])
К сожалению, это решение довольно медленно. Это займет ок. 10 секунд для изображения 1024 на 1024.
Есть ли более эффективный способ реализовать это?
Основная проблема заключается в том, что размеры массива меняются. Я собираюсь из массива (1024, 1024, 4)
в массив (1024, 1024)
.
Я в основном ищут быстрый/эффективный способ применения функции к каждому пикселю RGB в изображении, что позволяет уменьшить размер массива.
Большое спасибо за помощь!
Python не является хорошим выбором для чтения, вычисления данных пикселя изображения. Получите язык 'LOW_LEVEL'! – dsgdfg
@dsgdfg Конечно, чистый Python не известен своей скоростью, но именно поэтому Numpy популярен: он может работать с многомерными массивами машинных данных с использованием скомпилированного кода, поэтому арифметика и цикл происходят на скомпилированной скорости, _not_ на довольно медленный темп байт-кода Python, который управляет объектами Python на виртуальной машине. –
'64-разрядный адрес Бит-машины + Виртуальный адрес табуляции + Основной адрес потоковой передачи + адрес обратной линии потока. Возможно, работа над проектами @Sandro, но не все время. Сохраните адреса ram в ram, почему еще производитель производит модуль PCI-калькулятора '? – dsgdfg