Initial commit: project structure, scripts and documentation
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "553zXx91g7fz"
|
||||
},
|
||||
"source": [
|
||||
"Пример загрузки данных с сайта Breast Cancer Wisconsin (Original)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "JYb7HU1k9lFC",
|
||||
"outputId": "7a608a7c-9f85-4cc8-9b72-65a67381e960"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"from sklearn.model_selection import train_test_split\n",
|
||||
"from sklearn.tree import DecisionTreeClassifier\n",
|
||||
"from sklearn.metrics import accuracy_score\n",
|
||||
"\n",
|
||||
"# 1) Ссылка на датасет\n",
|
||||
"dataset_url = \"https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data\"\n",
|
||||
"\n",
|
||||
"# 2) Имена столбцов (по документации UCI)\n",
|
||||
"col_names = [\n",
|
||||
" \"Sample_code_number\",\n",
|
||||
" \"Clump_Thickness\",\n",
|
||||
" \"Uniformity_of_Cell_Size\",\n",
|
||||
" \"Uniformity_of_Cell_Shape\",\n",
|
||||
" \"Marginal_Adhesion\",\n",
|
||||
" \"Single_Epithelial_Cell_Size\",\n",
|
||||
" \"Bare_Nuclei\",\n",
|
||||
" \"Bland_Chromatin\",\n",
|
||||
" \"Normal_Nucleoli\",\n",
|
||||
" \"Mitoses\",\n",
|
||||
" \"Class\"\n",
|
||||
"]\n",
|
||||
"\n",
|
||||
"# 3) Считываем csv\n",
|
||||
"df = pd.read_csv(\n",
|
||||
" dataset_url,\n",
|
||||
" names=col_names,\n",
|
||||
" na_values=[\"?\"],\n",
|
||||
" header=None\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"# 4) Быстрый осмотр\n",
|
||||
"print(df.head())\n",
|
||||
"print(df.info())\n",
|
||||
"\n",
|
||||
"# 5) Удалим строки с пропусками\n",
|
||||
"df.dropna(inplace=True)\n",
|
||||
"\n",
|
||||
"# 6) Разделим на признаки (X) и целевую переменную (y)\n",
|
||||
"y = df[\"Class\"]\n",
|
||||
"X = df.drop([\"Sample_code_number\", \"Class\"], axis=1)\n",
|
||||
"\n",
|
||||
"# 7) Разделим на train и test\n",
|
||||
"X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)\n",
|
||||
"\n",
|
||||
"# 8) Обучим модель (DecisionTree)\n",
|
||||
"clf = DecisionTreeClassifier(random_state=42)\n",
|
||||
"clf.fit(X_train, y_train)\n",
|
||||
"\n",
|
||||
"# 9) Предсказание и оценка\n",
|
||||
"predictions = clf.predict(X_test)\n",
|
||||
"acc = accuracy_score(y_test, predictions)\n",
|
||||
"print(f\"Accuracy: {acc:.3f}\")\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "2t5p4Mt7hKSw"
|
||||
},
|
||||
"source": [
|
||||
"Пример кода с requests + BeautifulSoup. Подставить нужную ссылку"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "1L4ZnJL5iDMm"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 321
|
||||
},
|
||||
"id": "SqUDAUG0esKO",
|
||||
"outputId": "150062f1-72e8-4f8e-b006-12ef211609ab"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import requests\n",
|
||||
"from bs4 import BeautifulSoup\n",
|
||||
"import pandas as pd\n",
|
||||
"\n",
|
||||
"url = \"https://opendata.some-region.ru/datasets/interesting-table\"\n",
|
||||
"response = requests.get(url)\n",
|
||||
"soup = BeautifulSoup(response.text, \"html.parser\")\n",
|
||||
"\n",
|
||||
"# Предположим, на странице есть <table> с классом \"data-table\"\n",
|
||||
"table_html = soup.find(\"table\", {\"class\": \"data-table\"})\n",
|
||||
"\n",
|
||||
"# Преобразуем в DataFrame, если таблица более-менее стандартная\n",
|
||||
"df_list = pd.read_html(str(table_html)) # возвращает список df\n",
|
||||
"df = df_list[0] # берем первую таблицу\n",
|
||||
"\n",
|
||||
"df.head()\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "dl9b0hqOiFII"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"\n",
|
||||
"excel_url = \"https://data.gov.ru/files/dataset.xls\"\n",
|
||||
"df_excel = pd.read_excel(excel_url, sheet_name=\"Sheet1\")\n",
|
||||
"print(df_excel.columns)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "A_13q1K9iMr2"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"\n",
|
||||
"json_url = \"https://data.gov.ru/files/dataset.json\"\n",
|
||||
"df_json = pd.read_json(json_url, orient=\"records\")\n",
|
||||
"print(df_json.info())\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": []
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,274 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "btIcF4lpu_Xx"
|
||||
},
|
||||
"source": [
|
||||
"import requests\n",
|
||||
"\n",
|
||||
"# Пример запроса к TCIA API\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "j4rCtvc9u_XD"
|
||||
},
|
||||
"source": [
|
||||
"**Шаг 1**. The Cancer Imaging Archive (TCIA) предоставляет доступ к медицинским изображениям через API. Вы можете использовать библиотеку requests для загрузки данных из TCIA:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "uR4WCv5yrzNl",
|
||||
"outputId": "0a2a3495-5147-4bed-a209-c800c26cda8d"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import requests\n",
|
||||
"\n",
|
||||
"# Пример запроса к TCIA API\n",
|
||||
"url = \"https://services.cancerimagingarchive.net/services/v3/TCIA/query/getSeries?Collection=TCGA-BRCA\"\n",
|
||||
"response = requests.get(url)\n",
|
||||
"\n",
|
||||
"# Проверка ответа\n",
|
||||
"if response.status_code == 200:\n",
|
||||
" print(\"Данные получены успешно\")\n",
|
||||
"else:\n",
|
||||
" print(\"Ошибка получения данных\")\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "AlwoAu-ju7SC"
|
||||
},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "LuW1z73XvxYF"
|
||||
},
|
||||
"source": [
|
||||
"**Шаг 2.** Данные приходят в JSON формате.\n",
|
||||
"В этом примере запрос отправляется с параметром format=json, чтобы вернуть данные в формате JSON.\n",
|
||||
"Преобразование ответа в JSON:\n",
|
||||
"response.json() позволяет конвертировать ответ в словарь Python, с которым будем работать дальше.\n",
|
||||
"Обработка JSON-ответа:\n",
|
||||
"Сначала печатаем весь JSON для ознакомления."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "0rA31BsAuGeM",
|
||||
"outputId": "fac4ab13-ddbb-41fd-ade9-279df305554a"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import requests\n",
|
||||
"import json\n",
|
||||
"\n",
|
||||
"# Пример запроса к TCIA API, предполагающий JSON формат\n",
|
||||
"url = \"https://services.cancerimagingarchive.net/services/v3/TCIA/query/getSeries?Collection=TCGA-BRCA&format=json\"\n",
|
||||
"response = requests.get(url)\n",
|
||||
"\n",
|
||||
"# Проверка ответа\n",
|
||||
"if response.status_code == 200:\n",
|
||||
" print(\"Данные получены успешно\")\n",
|
||||
"\n",
|
||||
" # Преобразование ответа в JSON\n",
|
||||
" data = response.json()\n",
|
||||
" print(json.dumps(data, indent=4)) # Печать данных в формате JSON с отступами\n",
|
||||
"\n",
|
||||
" # Обработка данных\n",
|
||||
" for item in data:\n",
|
||||
" series_instance_uid = item.get('SeriesInstanceUID', 'N/A')\n",
|
||||
" modality = item.get('Modality', 'N/A')\n",
|
||||
" protocol_name = item.get('ProtocolName', 'N/A')\n",
|
||||
" body_part_examined = item.get('BodyPartExamined', 'N/A')\n",
|
||||
"\n",
|
||||
" # Печать извлеченной информации\n",
|
||||
" print(f\"SeriesInstanceUID: {series_instance_uid}\")\n",
|
||||
" print(f\"Modality: {modality}\")\n",
|
||||
" print(f\"ProtocolName: {protocol_name}\")\n",
|
||||
" print(f\"BodyPartExamined: {body_part_examined}\")\n",
|
||||
" print('-' * 30)\n",
|
||||
"else:\n",
|
||||
" print(\"Ошибка получения данных\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "G3VSxAgX6RbK"
|
||||
},
|
||||
"source": [
|
||||
"**Шаг3**.**Получение идентификаторов для загрузки изображений**\n",
|
||||
"\n",
|
||||
"Используя первый запрос к TCIA API, получили метаданные, такие как SeriesInstanceUID для каждой серии изображений.\n",
|
||||
"Эти идентификаторы нужны для следующего шага — получения ссылок на сами изображения.\n",
|
||||
"Запрос на загрузку изображений с использованием SeriesInstanceUID\n",
|
||||
"Чтобы загрузить все изображения в определенной серии, нужно выполнить запрос к TCIA API с использованием SeriesInstanceUID"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "AexV0o2gJahr",
|
||||
"outputId": "06c3167c-931f-4f15-917e-a5fe6d7463d5"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import os\n",
|
||||
"import requests\n",
|
||||
"\n",
|
||||
"# Пример использования SeriesInstanceUID\n",
|
||||
"series_instance_uid = \"1.3.6.1.4.1.14519.5.2.1.6450.4002.265963154110062013582166845425\" # Пример идентификатора\n",
|
||||
"\n",
|
||||
"# URL для загрузки изображений\n",
|
||||
"url = f\"https://services.cancerimagingarchive.net/services/v3/TCIA/query/getImage?SeriesInstanceUID={series_instance_uid}\"\n",
|
||||
"response = requests.get(url, stream=True)\n",
|
||||
"\n",
|
||||
"# Путь для сохранения ZIP-файла\n",
|
||||
"output_path = \"/content/images.zip\"\n",
|
||||
"\n",
|
||||
"# Создание необходимых папок, если их нет\n",
|
||||
"folder_path = os.path.dirname(output_path)\n",
|
||||
"os.makedirs(folder_path, exist_ok=True)\n",
|
||||
"\n",
|
||||
"# Проверка ответа и сохранение изображения\n",
|
||||
"if response.status_code == 200:\n",
|
||||
" print(f\"Сохранение файла в {output_path}\")\n",
|
||||
" with open(output_path, \"wb\") as file:\n",
|
||||
" for chunk in response.iter_content(chunk_size=128):\n",
|
||||
" file.write(chunk)\n",
|
||||
" print(f\"Изображения успешно загружены и сохранены как {output_path}\")\n",
|
||||
"else:\n",
|
||||
" print(\"Ошибка при загрузке изображений\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "-PwPLc8aKV9h",
|
||||
"outputId": "821075b5-c777-451e-e84f-6ea3f69c092a"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import zipfile\n",
|
||||
"\n",
|
||||
"# Распаковка загруженного ZIP-файла\n",
|
||||
"with zipfile.ZipFile(\"images.zip\", 'r') as zip_ref:\n",
|
||||
" zip_ref.extractall(\"images\") # Папка для распакованных изображений\n",
|
||||
"print(\"Файлы успешно распакованы\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "DVVYma3wM4vf"
|
||||
},
|
||||
"source": [
|
||||
"**Шаг. 4**# Для чтения DICOM файлов используйте pydicom, а для визуализации изображений — matplotlib."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "Tw2PTwQrOlLe",
|
||||
"outputId": "d21f3b3b-c985-45ad-fdc6-a8c36cd10335"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install pydicom\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 839
|
||||
},
|
||||
"id": "OLMmOFkCM59-",
|
||||
"outputId": "f4370e76-ad70-45da-8192-fe2de2232455"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import os\n",
|
||||
"import pydicom\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"# Папка с распакованными изображениями\n",
|
||||
"dicom_folder = \"images\"\n",
|
||||
"\n",
|
||||
"# Чтение всех DICOM-файлов в папке и визуализация первого изображения\n",
|
||||
"for filename in os.listdir(dicom_folder):\n",
|
||||
" if filename.endswith(\".dcm\"):\n",
|
||||
" dicom_path = os.path.join(dicom_folder, filename)\n",
|
||||
" dicom_data = pydicom.dcmread(dicom_path)\n",
|
||||
"\n",
|
||||
" # Получение массива пикселей изображения\n",
|
||||
" image = dicom_data.pixel_array\n",
|
||||
"\n",
|
||||
" # Визуализация изображения\n",
|
||||
" plt.imshow(image, cmap=\"gray\")\n",
|
||||
" plt.title(f\"Пациент ID: {dicom_data.PatientID}\")\n",
|
||||
" plt.axis(\"off\")\n",
|
||||
" plt.show()\n",
|
||||
" break # Визуализируем только первое изображение\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "U-9TfVjKQsFV"
|
||||
},
|
||||
"source": [
|
||||
" библиотеки, как OpenCV, scikit-image, и NumPy предоставляют множество инструментов для фильтрации, повышения контраста и удаления шума."
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": []
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "9B_sc-M_NlTZ"
|
||||
},
|
||||
"source": [
|
||||
"Шаг 1. Устанавливаем библиотеку для работы с загрузкой данных по ссылке"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "OsQErPaDDkmK",
|
||||
"outputId": "49149067-e8b9-42f8-acbe-15b2d80cd79e"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install gdown\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "_F6Rmsu4NviH"
|
||||
},
|
||||
"source": [
|
||||
"Шаг 3. Скачиваем и распаковываем файлы,з ная ID"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "d19wjKXOLIyw",
|
||||
"outputId": "804d657b-dce7-4822-c631-b6a330801207"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import gdown\n",
|
||||
"\n",
|
||||
"# ID файла с Google Диска\n",
|
||||
"file_id = '1qVrpV7vmhIsUxFiH189LmAn0ALbAPrgS'\n",
|
||||
"#https://drive.google.com/file/d/1qVrpV7vmhIsUxFiH189LmAn0ALbAPrgS/view?usp=drive_link\n",
|
||||
"# Формируем URL для скачивания\n",
|
||||
"url = f'https://drive.google.com/uc?id={file_id}'\n",
|
||||
"\n",
|
||||
"# Скачиваем файл в директорию /content/\n",
|
||||
"file_path = '/content/my_file_name.tar'\n",
|
||||
"gdown.download(url, file_path, quiet=False)\n",
|
||||
"\n",
|
||||
"# Распаковываем архив .tar\n",
|
||||
"import tarfile\n",
|
||||
"with tarfile.open(file_path, 'r') as tar:\n",
|
||||
" tar.extractall(path='/content/')\n",
|
||||
" print(\"Архив распакован в директорию /content/\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "YNJiS-a6N4vg"
|
||||
},
|
||||
"source": [
|
||||
"Шаг 4. Просматриваем структуру и описание данных в JSON"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "_G-7skCHPJZ2",
|
||||
"outputId": "f0d8712c-1805-4a5d-c857-3c6b6659fc71"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import json\n",
|
||||
"\n",
|
||||
"# Путь к файлу JSON\n",
|
||||
"json_file_path = '/content/Task08_HepaticVessel/dataset.json'\n",
|
||||
"\n",
|
||||
"# Загружаем содержимое JSON файла\n",
|
||||
"with open(json_file_path, 'r') as f:\n",
|
||||
" dataset_info = json.load(f)\n",
|
||||
"\n",
|
||||
"# Просмотрим содержимое JSON\n",
|
||||
"print(json.dumps(dataset_info, indent=4)) # Красиво выводим содержимое\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "4GOfTVYdODLL"
|
||||
},
|
||||
"source": [
|
||||
"Шаг 5. Выводим для просмотра 20 случайных объектов с метками из обучающего набора."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 1000
|
||||
},
|
||||
"id": "CTMaymbpP1IQ",
|
||||
"outputId": "e6ce5b6a-b949-4499-93e5-a7f8816bc888"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import random\n",
|
||||
"import nibabel as nib\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import numpy as np\n",
|
||||
"import os\n",
|
||||
"\n",
|
||||
"# Папки с изображениями и метками\n",
|
||||
"images_dir = '/content/Task08_HepaticVessel/imagesTr'\n",
|
||||
"labels_dir = '/content/Task08_HepaticVessel/labelsTr'\n",
|
||||
"\n",
|
||||
"# Фильтруем доступные файлы\n",
|
||||
"available_files = sorted([f for f in os.listdir(images_dir) if not f.startswith('._') and f.endswith('.nii.gz')])\n",
|
||||
"images = [os.path.join(images_dir, file) for file in available_files]\n",
|
||||
"labels = [os.path.join(labels_dir, file.replace('imagesTr', 'labelsTr')) for file in available_files]\n",
|
||||
"\n",
|
||||
"# Проверяем количество файлов\n",
|
||||
"print(f\"Обнаружено {len(images)} изображений и {len(labels)} меток.\")\n",
|
||||
"\n",
|
||||
"# Случайно выбираем 20 изображений\n",
|
||||
"random_indices = random.sample(range(len(images)), min(20, len(images)))\n",
|
||||
"\n",
|
||||
"# Цветовая карта для меток\n",
|
||||
"cmap = plt.cm.colors.ListedColormap(['black', 'green', 'red']) # Цвета: фон, сосуды, опухоли\n",
|
||||
"bounds = [0, 1, 2, 3]\n",
|
||||
"norm = plt.cm.colors.BoundaryNorm(bounds, cmap.N)\n",
|
||||
"\n",
|
||||
"# Визуализация изображений и меток\n",
|
||||
"for idx in random_indices:\n",
|
||||
" try:\n",
|
||||
" # Загружаем изображение и метку\n",
|
||||
" image = nib.load(images[idx]).get_fdata()\n",
|
||||
" label = nib.load(labels[idx]).get_fdata()\n",
|
||||
"\n",
|
||||
" # Поиск срезов с ненулевыми метками\n",
|
||||
" non_empty_slices = [z for z in range(label.shape[2]) if np.unique(label[:, :, z]).size > 1]\n",
|
||||
"\n",
|
||||
" if not non_empty_slices:\n",
|
||||
" print(f\"Все срезы в {images[idx]} содержат только фон.\")\n",
|
||||
" continue\n",
|
||||
"\n",
|
||||
" # Выбираем случайный срез с ненулевыми метками\n",
|
||||
" slice_index = random.choice(non_empty_slices)\n",
|
||||
" print(f\"Выбран срез {slice_index} для изображения {images[idx]}\")\n",
|
||||
"\n",
|
||||
" plt.figure(figsize=(10, 5))\n",
|
||||
"\n",
|
||||
" # Отображаем изображение\n",
|
||||
" plt.subplot(1, 2, 1)\n",
|
||||
" plt.imshow(image[:, :, slice_index], cmap='gray')\n",
|
||||
" plt.title(f'Изображение (Slice: {slice_index})')\n",
|
||||
" plt.axis('off')\n",
|
||||
"\n",
|
||||
" # Отображаем метки\n",
|
||||
" plt.subplot(1, 2, 2)\n",
|
||||
" plt.imshow(label[:, :, slice_index], cmap=cmap, norm=norm)\n",
|
||||
" plt.title('Метки')\n",
|
||||
" plt.axis('off')\n",
|
||||
"\n",
|
||||
" plt.show()\n",
|
||||
"\n",
|
||||
" except Exception as e:\n",
|
||||
" print(f\"Ошибка при обработке файла {images[idx]}: {e}\")\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"accelerator": "GPU",
|
||||
"colab": {
|
||||
"gpuType": "T4",
|
||||
"provenance": []
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user