Skip to content

Instantly share code, notes, and snippets.

View sarthakpati's full-sized avatar
💡
Researching privacy-first approaches to ML

Sarthak Pati sarthakpati

💡
Researching privacy-first approaches to ML
View GitHub Profile
@sarthakpati
sarthakpati / get_debug_info.py
Created November 19, 2024 14:51
A small script to generate system debugging information
import platform
from pip import main
from deprecated import deprecated
print(f"Platform: {platform.platform()}")
print(f"Machine: {platform.machine()}")
print(f"Processor: {platform.processor()}")
print(f"Architecture: {(' ').join(list(platform.architecture()))}")
print("Python environment:")
print(f" Version: {platform.python_version()}")
@sarthakpati
sarthakpati / json_to_csv_with_plots.py
Last active August 22, 2024 13:48
Convert dictionary based JSON data structures to CSV files
import os, json
import matplotlib.pyplot as plt
import pandas as pd
if __name__ == "__main__":
base_dir = os.path.dirname(os.path.abspath(__file__))
all_dirs = os.listdir(base_dir)
@sarthakpati
sarthakpati / sitk_cast_image.py
Created April 23, 2024 17:49
Cast an image to different pixel type using SimpleITK
import SimpleITK as sitk
image_to_cast = sitk.ReadImage("/path/to/image.nii.gz")
options_for_casting = {
"int64": sitk.sitkInt64,
"int32": sitk.sitkInt32,
"int16": sitk.sitkInt16,
"int8": sitk.sitkInt8,
"uint64": sitk.sitkUInt64,
"uint32": sitk.sitkUInt32,
@sarthakpati
sarthakpati / dicom_downsampling.py
Last active January 12, 2024 14:09
Downsample DICOM images and write out as DICOM or fall back to NIfTI
import os, time, traceback, pathlib
import SimpleITK as sitk
def downsample_dicom(
dicom_path: str, output_path: str, downsample_factor: int = 0.5
) -> None:
"""
Downsample DICOM images and save them to the output path.
@sarthakpati
sarthakpati / get_image_properties.py
Created November 22, 2023 20:58
Get basic image properties of ITK image
import os
import SimpleITK as sitk
input_directory = os.path.join(os.getcwd(), "data")
for filename in os.listdir(input_directory):
if filename.endswith(".nii.gz"):
image = sitk.ReadImage(os.path.join(input_directory, filename))
# properties
@sarthakpati
sarthakpati / easy_one_hot_encoding.py
Created May 15, 2023 21:13
Easy way to perform one-hot encoding of a medical annotation
from typing import Union, OrderedDict
import SimpleITK as sitk
import numpy as np
def one_hot_encode(
input_mask: Union[str, sitk.Image],
encoding_logic: dict = {"NET": [1], "TC": [1, 4], "WT": [1, 2, 4]},
) -> dict:
"""
@sarthakpati
sarthakpati / copy_image_information.py
Created September 7, 2021 18:17
Copy image information
import SimpleITK as sitk
# read image to copy information from
image_reference = sitk.ReadImage('/path/to/reference.nii.gz')
image_to_copy_from = sitk.ReadImage('/path/to/image_to_change.nii.gz')
image_to_copy_from.CopyInformation(image_reference)
# write the image
sitk.WriteImage(image_to_copy_from, '/path/to/result.nii.gz')
@sarthakpati
sarthakpati / image_sanity_check.py
Last active April 14, 2025 15:28
Comparing two image files for sanity checking
import SimpleITK as sitk
import numpy as np
def sanity_checker_with_files(
image_file_baseline: str, image_file_compare: str, threshold: float = 1e-5
) -> bool:
"""
This function performs sanity check on 2 image files WITHOUT loading images into memory.
Supported image formats: https://simpleitk.readthedocs.io/en/master/IO.html
## Ref: https://github.com/razorx89/pydicom-seg#getting-started
import pydicom
import pydicom_seg
import SimpleITK as sitk
dcm_path = pydicom.dcmread('/path/to/segmentation.dcm')
reader = pydicom_seg.MultiClassReader()
result = reader.read(dcm_path)
@sarthakpati
sarthakpati / dicom_conversion.py
Last active April 7, 2025 15:41
Reading and converting DICOM images using SimpleITK
import os
import SimpleITK as sitk
input_dicom = '/path/to/input/dicom'
output_dicom_dir = '/path/to/output'
# create the folder output_dicom_dir
series_IDs = sitk.ImageSeriesReader.GetGDCMSeriesIDs(input_dicom)
if not series_IDs:
print("ERROR: given directory \"" + input_dicom + "\" does not contain a valid DICOM series.")
sys.exit(1)