Различные результаты SSIM для срезов 3D -микроскопии с использованием Torchmetrics и Skimage: какой из них я должен испоPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Различные результаты SSIM для срезов 3D -микроскопии с использованием Torchmetrics и Skimage: какой из них я должен испо

Сообщение Anonymous »

Я работаю с данными 3D -микроскопии (например, стек 2D -изображений) и пытаюсь вычислять индекс структурного сходства (SSIM) между двумя 3D -изображениями. Цель состоит в том, чтобы оценить сходство между входным стеком и стеком основной истины. Они оба имеют одинаковые размеры. < /P>
Вот MRE со случайными тензорами: < /p>

Код: Выделить всё

import torch
import numpy as np
from skimage.metrics import structural_similarity
from torchmetrics.image import StructuralSimilarityIndexMeasure

# Simulating 10 256x256 numpy images randint from 0 to 2**16
input_array = np.random.randint(0, 2**16, (10, 256, 256), dtype=np.uint16)
output_array = np.random.randint(0, 2**16, (10, 256, 256), dtype=np.uint16)
input_tensor = torch.tensor(input_array, dtype=torch.float32)
output_tensor = torch.tensor(output_array, dtype=torch.float32)

# Computing SSIM
data_range = max(input_tensor.max(), output_tensor.max()) - min(input_tensor.min(), output_tensor.min())

ssim_metric = StructuralSimilarityIndexMeasure(data_range=data_range)
ssim_score = ssim_metric(
input_tensor.unsqueeze(0),  # Add batch dimension
output_tensor.unsqueeze(0)   # Add batch dimension
)
print(f"torchmetrics - SSIM score: {ssim_score}")

all_slices_ssim = []
for i in range(input_tensor.shape[0]):
slice_ssim = ssim_metric(
input_tensor[i].unsqueeze(0).unsqueeze(0),  # Add channel and batch dimensions
output_tensor[i].unsqueeze(0).unsqueeze(0)   # Add channel and batch dimensions
)
all_slices_ssim.append(float(slice_ssim))
mean_ssim = sum(all_slices_ssim) / len(all_slices_ssim)
print(f"torchmetrics - Mean SSIM score (slice-wise): {mean_ssim}")

ssim_3d_scikit = structural_similarity(
input_array,
output_array,
data_range=data_range.item(),
channel_axis=None
)
print(f"skimage - 3D SSIM score: {ssim_3d_scikit}")

ssim_3d_scikit_slices: list[float] = []
for i in range(input_tensor.shape[0]):
slice_ssim = structural_similarity(
input_array[i],
output_array[i],
data_range=data_range.item(),
channel_axis=None
)
ssim_3d_scikit_slices.append(slice_ssim)
print(f"skimage - Mean SSIM score (slice-wise): {sum(ssim_3d_scikit_slices) / len(ssim_3d_scikit_slices)}")
< /code>
Когда я запускаю этот код, я получаю разные результаты для оценки SSIM: < /p>
torchmetrics - SSIM score: 0.00599062442779541
torchmetrics - Mean SSIM score (slice-wise): 0.005990624928381294
skimage - 3D SSIM score: 0.006143948174795598
skimage - Mean SSIM score (slice-wise): 0.005819291556411987
Я не совсем уверен, какой из них я должен использовать (я чувствую, что солидному среднему значению-это не ходу).


Подробнее здесь: https://stackoverflow.com/questions/793 ... nd-skimage
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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