Я работаю над функцией повоксельной обработки 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
Как эффективно вычислять и обрабатывать окрестности вокселей 3x3x3 в 3D-массиве NumPy? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как эффективно вычислять и обрабатывать окрестности вокселей 3x3x3 в 3D-массиве NumPy?
Anonymous » » в форуме Python - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-