То, что я пытаюсь сделать, это взять массив данных, представляющий данные трехмерного изображения, и вычислить матрицу гессиана для каждого вокселя.Мой ввод представляет собой матрицу формы (Z, X, Y), и я могу легко взять срез вдоль z и извлечь одно исходное изображение.
gx, gy, gz = np.gradient(imgs)
gxx, gxy, gxz = np.gradient(gx)
gyx, gyy, gyz = np.gradient(gy)
gzx, gzy, gzz = np.gradient(gz)
И я могу получить доступ к гессиану для отдельного вокселя следующим образом:
x = 100
y = 100
z = 63
H = [[gxx[z][x][y], gxy[z][x][y], gxz[z][x][y]],
[gyx[z][x][y], gyy[z][x][y], gyz[z][x][y]],
[gzx[z][x][y], gzy[z][x][y], gzz[z][x][y]]]
Но это громоздко, и я не могу легко разрезать данные.
Я пытался использовать reshape следующим образом
H = H.reshape(Z, X, Y, 3, 3)
Но когда я проверяю это, получая гессиан для определенного вокселя, значение, возвращаемое из массива с измененной формой, полностью отличается от исходногомассив.
Я думаю, что мог бы как-то использовать zip, но мне удалось найти его только для составления списков кортежей.
- Бонус : Если есть более быстрый способ сделать это, пожалуйста, дайте мне знать, мне по сути нужно вычислить три собственных значения гессианской матрицы для каждого вокселя в наборе трехмерных данных,Вычисление значений гессиана действительно быстро, но поиск собственных значений для одного среза 2D-изображения занимает около 20 секунд.Существуют ли графические процессоры или ускоренные библиотеки для обработки изображений?