Как эффективно вычислять и обрабатывать окрестности вокселей 3x3x3 в 3D-массиве NumPy?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как эффективно вычислять и обрабатывать окрестности вокселей 3x3x3 в 3D-массиве NumPy?

Сообщение Anonymous »

Я работаю над функцией повоксельной обработки 3D-изображений. Для каждого воксела я вычисляю разницу между значением вокселя и его окрестностью 3x3x3, применяю масштабирование на основе расстояния и определяю метку на основе максимальной масштабированной разницы. Однако моя текущая реализация работает медленно, и я ищу способы ее оптимизации.
import numpy as np
from tqdm import tqdm import itertools

def create_label(image_input):
# Define neighborhood offsets and distances
locations = np.array([tuple([dx, dy, dz]) for dx, dy, dz in itertools.product(range(-1, 2), repeat=3)])
euclidian_distances = np.linalg.norm(locations, axis=1)
euclidian_distances_inverse = np.divide(1, euclidian_distances, out=np.zeros_like(euclidian_distances), where=euclidian_distances != 0)

image_input = image_input.astype(np.float32)
label = np.zeros_like(image_input)
image_shape = image_input.shape

# Process each voxel (excluding the edges)
for i in tqdm(range(1, image_shape[0] - 1)):
for j in range(1, image_shape[1] - 1):
for k in range(1, image_shape[2] - 1):
# Extract 3x3x3 neighborhood values
all_values_neighborhood = [image_input[loc[0] + i, loc[1] + j, loc[2] + k] for loc in locations]

# Compute differences and scale by distances
centre_minus_rest = image_input[i, j, k, None] - np.array(all_values_neighborhood)
if np.all(centre_minus_rest < 0):
label[i, j, k] = 13
else:
centre_minus_rest_divided = centre_minus_rest * euclidian_distances_inverse
centre_minus_rest_divided[13] = -100 # Ignore the center value
class_label = np.argmax(centre_minus_rest_divided)
label[i, j, k] = class_label

return label

# example 3d array
image_input = np.random.rand(10, 10, 10).astype(np.float32)
# run the function
label = create_label(image_input)
print(label)


Подробнее здесь: https://stackoverflow.com/questions/792 ... 3d-numpy-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как эффективно вычислять и обрабатывать окрестности вокселей 3x3x3 в 3D-массиве NumPy?
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Эффективно вычислять средние пары расстояния в массиве
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как эффективно вычислять парные количества в numpy?
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как эффективно вычислять парные количества в numpy?
    Anonymous » » в форуме Python
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Представление имеет набор теней, но не может эффективно вычислять тень в React Native.
    Гость » » в форуме IOS
    0 Ответы
    111 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»