Я работаю над функцией повоксельной обработки 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
Программы на Python
1733220000
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)
Подробнее здесь: [url]https://stackoverflow.com/questions/79247091/how-to-efficiently-compute-and-process-3x3x3-voxel-neighborhoods-in-a-3d-numpy-a[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия