<jupyter_start><jupyter_text>Введение в оспользование [antspy](https://github.com/ANTsX/ANTsPy) и MRTDataset<jupyter_code>import ants<jupyter_output><empty_output><jupyter_text>Скармливаете `ants.image_read()` путь до `.nii.gz` или `.mni`<jupyter_code>img = ants.image_read(ants.get_ants_data('mni'))
img.plot()<jupyter_output><empty_output><jupyter_text>Это все легко перегоняется в numpy массивы<jupyter_code>img_array = img.numpy()
img_array.shape, img_array.max()<jupyter_output><empty_output><jupyter_text>Это все дело можно нормировать<jupyter_code>ants.iMath_normalize(img).max()<jupyter_output><empty_output><jupyter_text>Также удобно ресайзить<jupyter_code>print(img.shape)
img.resample_image((10, 20, 30), 1, 0).shape<jupyter_output>(182, 218, 182)<jupyter_text>Также можно поворачивать<jupyter_code>ants.reorient_image(img, (1,0))<jupyter_output><empty_output><jupyter_text>Ну и гонять массивы назад в мозги<jupyter_code>new_img1 = img.new_image_like(img_array)

# doesnt copy any information
new_img2 = ants.from_numpy(img_array)

# verbose way to copy information
new_img3 = ants.from_numpy(img_array, spacing=img.spacing,
                           origin=img.origin, direction=img.direction)<jupyter_output><empty_output><jupyter_text>Теперь перейдем к датасету<jupyter_code>%matplotlib notebook
import os, sys
from matplotlib import pyplot

sys.path.append('/root/cAAE')
from model.tools.config import Config, read_conf
from model.generator import generator, net

config = read_conf(f'/root/cAAE/config/{os.environ["CONFIG_NAME"]}.json')
def plot_all_axis(brain):
    n=2/3
    fig, axs = pyplot.subplots(1, 3)
    axs[0].imshow(brain[int(brain.shape[0]*n), :, :])
    axs[0].set_title('Brain axis = 0')
    axs[1].imshow(brain[:, int(brain.shape[1]*n), :])
    axs[1].set_title('Brain axis = 1')
    axs[2].imshow(brain[:, :, int(brain.shape[1]*n)])
    axs[2].set_title('Brain axis = 2')<jupyter_output><empty_output><jupyter_text>Давайте посмотрим на датасеты. Сначала на тренировочный (`train_flg = True`)<jupyter_code>dataset = generator(config, train_flg=True)<jupyter_output><empty_output><jupyter_text>Основа датасета это объект класса `Person`. Датасет веде себя и как словарь и как список<jupyter_code>person = dataset.get_person(11) #Или случайный dataset.get_random()
person<jupyter_output><empty_output><jupyter_text>Если вызывать `dataset[i]`, то будет вызвано `person.__call__` с `transform`, которая есть в датасете<jupyter_code>print(dataset.transform)
brain = dataset[11]
brain.shape<jupyter_output>Compose(
    <function iMath_normalize at 0x7f73e766bc80>
    <function generator.<locals>.resize at 0x7f727dd0c0d0>
    <function generator.<locals>.<lambda> at 0x7f727dd0c730>
    ToTensor()
)<jupyter_text>Давайте посмотрим на преобразованный тензор. Желательно следить за направлением мозга по каждой из осей, чтобы на трейне и на тесте данные были соноправленны.<jupyter_code>plot_all_axis(brain)<jupyter_output><empty_output><jupyter_text>А теперь посмотрим на то, как оно выглядело в оригинале<jupyter_code>person.plot(axis=2)<jupyter_output><empty_output><jupyter_text>Для тестовых данных работает все тоже самое, но появляется еще и возможность посмотреть на опухоли<jupyter_code>dataset_test = generator(config, train_flg=False)
person_test = dataset_test.get_person(11)
print(dataset_test.transform) #должен быть такой же, как и трейн
brain_test = dataset_test[11]
brain_test.shape<jupyter_output>Compose(
    <function iMath_normalize at 0x7f73e766bc80>
    <function generator.<locals>.resize at 0x7f728a2b3048>
    <function generator.<locals>.<lambda> at 0x7f728a2b32f0>
    ToTensor()
)<jupyter_text>Должны смотреть в том же направлении, что и трейн<jupyter_code>plot_all_axis(brain_test)<jupyter_output><empty_output><jupyter_text>Так получается маска, она вам понадобится<jupyter_code>person_test.get_mask().plot()<jupyter_output><empty_output><jupyter_text>Для того, чтобы получить опухоль, надо сначала ее подвязать<jupyter_code>person_test.set_tumor()
tumor = person_test.get_tumor(dataset_test.transform)
plot_all_axis(tumor)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11608663908493551, 'fraction_numerical': 0.024580189827208568, 'mean_word_length': 7.934782608695652, 'pattern_counts': {'":': 0, '<': 78, '<?xml version=': 0, '>': 78, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '17', 'dir': 'jupyter-structured-clean-dedup', 'id': '511215', 'license': 'MIT', 'n_tokens_mistral': 1752, 'n_tokens_neox': 1726, 'n_words': 264, 'path': 'jupyter/MRTDataset_and_antspy.ipynb', 'repo_name': 'alexgalayda/cAAE', 'size': '4109'}