OSCR

Medical Spine Sagittal MRI Dataset for Segmentation and Foraminal Stenosis detection.

Code ↔ Paper

7 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 7 matches
  1. [1] § Data Records ↔ models/position_of_slices.ipynb, lines 334–420 · score 0.90 · L3 L4, L4 L5, L2 L3, AISSLab, patient ID, L5 S1
  2. [2] § Technical Validation › Preprocessing ↔ models/Custom_CNN.ipynb, lines 37–73 · score 0.80 · Gaussian blur, vertical flips, noise, brightness, horizontal, gamma
  3. [3] § Technical Validation › Sagittal MRI foraminal stenosis detection ↔ models/Custom_CNN.ipynb, lines 121–196 · score 0.69 · weight decay, dropout rate, layers, CNN, optimized, module
  4. [4] § Methodology › Data curation ↔ de_identification.py, lines 7–23 · score 0.64 · patient history, de identification, ethnic, physician
  5. [5] § Technical Validation › Sagittal MRI foraminal stenosis detection ↔ models/Diet_model.ipynb, lines 156–298 · score 0.61 · mAP, dropout, recall, scores, architecture, DeiT
  6. [6] § Methodology › Sagittal foraminal detection and classification ↔ models/position_of_slices.ipynb, lines 334–420 · score 0.61 · L5 S1, L1 L2, xmax, xmin, ymax, ymin
  7. [7] § Technical Validation › Sagittal MRI segmentation ↔ models/Diet_model.ipynb, lines 156–298 · score 0.58 · Windows, configuration, metrics, Recall, CPU, architectures

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Jupyter notebook · 509 lines · 16 KB · no license · 2 matches

  1. # %% [markdown]
  2. # #### builld the dataset
  3. # %%
  4. import os
  5. import pydicom
  6. def detect_scan_direction(folder):
  7. slices = []
  8. for f in sorted(os.listdir(folder)):
  9. path = os.path.join(folder, f)
  10. ds = pydicom.dcmread(path)
  11. if "ImagePositionPatient" not in ds:
  12. continue
  13. x = ds.ImagePositionPatient[0] # X coordinate
  14. slices.append((f, x))
  15. if len(slices) < 2:
  16. print("Not enough slices to determine direction.")
  17. return
  18. first_x = slices[0][1]
  19. last_x = slices[-1][1]
  20. if first_x < last_x:
  21. print("Scan direction: Right → Left")
  22. else:
  23. print("Scan direction: Left → Right")
  24. for name, x in slices:
  25. print(f"{name}: X = {x:.2f}")
  26. # Example usage
  27. # detect_scan_direction(r"Sagittal")
  28. # detect_scan_direction(r"D:\Dataset\DatasetV0.17 Dicom format - Correct version\PATIENT672717\ST000000-MR, VERTEBRA, LOMBER\SE000000-Sag T2 frFSE"
  29. # detect_scan_direction(r"D:\AISSLab\Code\3D CNN\datasets\DatasetV0.17 Dicom format - Correct version\PATIENT62951\ST000000-MR, LOMBER\SE000000-Sag T2 frFSE")
  30. # detect_scan_direction(r"D:\AISSLab\Code\3D CNN\datasets\DatasetV0.17 Dicom format - Correct version\PATIENT110343\ST000000-MRG, LOMBER VERTEBRA, KONTRASTSIZ\SE000000-T2W_TSE")
  31. # opisite
  32. # %%
  33. import os
  34. root_folder = r"D:\Dataset\DatasetV0.17 Dicom format - Correct version"
  35. for patient_name in os.listdir(root_folder):
  36. patient_folder = os.path.join(root_folder, patient_name)
  37. if not os.path.isdir(patient_folder):
  38. continue
  39. folder_file_counts = {}
  40. for item in os.listdir(patient_folder):
  41. item_path = os.path.join(patient_folder, item)
  42. if os.path.isdir(item_path):
  43. for scan_module in os.listdir(item_path):
  44. scan_path = os.path.join(item_path, scan_module)
  45. if os.path.isdir(scan_path):
  46. file_count = sum(len(files) for _, _, files in os.walk(scan_path))
  47. folder_file_counts[scan_path] = file_count
  48. if folder_file_counts:
  49. # Identify the longest and shortest folders
  50. longest_folder = max(folder_file_counts, key=folder_file_counts.get)
  51. shortest_folder = min(folder_file_counts, key=folder_file_counts.get)
  52. # Define new paths
  53. axial_path = os.path.join(os.path.dirname(longest_folder), "Axial")
  54. sagittal_path = os.path.join(os.path.dirname(shortest_folder), "Sagittal")
  55. # Rename the folders
  56. try:
  57. os.rename(longest_folder, axial_path)
  58. print(f"Renamed '{longest_folder}' to '{axial_path}'")
  59. except FileExistsError:
  60. print(f"Cannot rename '{longest_folder}' to '{axial_path}': Destination already exists.")
  61. except Exception as e:
  62. print(f"Error renaming '{longest_folder}' to '{axial_path}': {e}")
  63. try:
  64. os.rename(shortest_folder, sagittal_path)
  65. print(f"Renamed '{shortest_folder}' to '{sagittal_path}'")
  66. except FileExistsError:
  67. print(f"Cannot rename '{shortest_folder}' to '{sagittal_path}': Destination already exists.")
  68. except Exception as e:
  69. print(f"Error renaming '{shortest_folder}' to '{sagittal_path}': {e}")
  70. # %%
  71. # check the lenght of each folder
  72. import os
  73. root_folder = r"D:\AISSLab\Code\3D CNN\datasets\test_system\Dicom"
  74. sagittal_counts = []
  75. for patient_name in os.listdir(root_folder):
  76. patient_folder = os.path.join(root_folder, patient_name)
  77. if not os.path.isdir(patient_folder):
  78. continue
  79. for item in os.listdir(patient_folder):
  80. item_path = os.path.join(patient_folder, item)
  81. if os.path.isdir(item_path):
  82. sagittal_path = os.path.join(item_path, "Sagittal")
  83. if os.path.isdir(sagittal_path):
  84. file_count = sum(len(files) for _, _, files in os.walk(sagittal_path))
  85. sagittal_counts.append((sagittal_path, file_count))
  86. # Sort and get top 5
  87. top5_sagittal = sorted(sagittal_counts, key=lambda x: x[1], reverse=True)[:10]
  88. # Display results
  89. print("Top 5 Sagittal directories with the largest number of files:")
  90. for path, count in top5_sagittal:
  91. print(f"{path} - {count} files")
  92. # %% [markdown]
  93. # ## padding
  94. # %%
  95. import os
  96. import pydicom
  97. import numpy as np
  98. from pydicom.uid import generate_uid
  99. def pad_dicom_series(folder_path, target_count=18):
  100. # Load and sort DICOM files by InstanceNumber
  101. dicom_files = sorted(
  102. [f for f in os.listdir(folder_path) if f.lower().endswith('.dcm')],
  103. key=lambda x: int(pydicom.dcmread(os.path.join(folder_path, x)).InstanceNumber)
  104. )
  105. current_count = len(dicom_files)
  106. if current_count >= target_count:
  107. print(f"{folder_path} already has {current_count} slices.")
  108. return
  109. print(f"Padding {folder_path}: {current_count} → {target_count}")
  110. last_file = os.path.join(folder_path, dicom_files[-1])
  111. last_ds = pydicom.dcmread(last_file)
  112. last_instance_number = int(last_ds.InstanceNumber)
  113. # Determine slice spacing
  114. if current_count >= 2:
  115. second_last_file = os.path.join(folder_path, dicom_files[-2])
  116. second_last_ds = pydicom.dcmread(second_last_file)
  117. spacing = np.array(last_ds.ImagePositionPatient) - np.array(second_last_ds.ImagePositionPatient)
  118. else:
  119. spacing = np.array([0, 0, 1]) # default spacing if only 1 slice
  120. current_position = np.array(last_ds.ImagePositionPatient)
  121. rows, cols = last_ds.Rows, last_ds.Columns
  122. dtype = last_ds.pixel_array.dtype
  123. black_image = np.zeros((rows, cols), dtype=dtype).tobytes()
  124. instance_number = last_instance_number # starting point
  125. for i in range(target_count - current_count):
  126. instance_number += 1 # increment correctly
  127. new_ds = last_ds.copy()
  128. new_ds.SOPInstanceUID = generate_uid()
  129. new_ds.InstanceNumber = instance_number
  130. # Update position
  131. new_position = current_position + spacing * (i + 1)
  132. new_ds.ImagePositionPatient = [str(p) for p in new_position]
  133. if 'SliceLocation' in new_ds:
  134. new_ds.SliceLocation = float(new_ds.SliceLocation) + spacing[-1] * (i + 1)
  135. new_ds.PixelData = black_image
  136. # Save
  137. filename = os.path.join(folder_path, f"pad_{i+1:03d}.dcm")
  138. new_ds.save_as(filename)
  139. print("✅ Padding complete and InstanceNumbers correctly incremented.")
  140. # Example usage
  141. # folder = r"Sagittal"
  142. # pad_dicom_series(folder)
  143. # %%
  144. root_folder = r"D:\AISSLab\Code\3D CNN\datasets\test_system\Dicom"
  145. for patient_folder in os.listdir(root_folder):
  146. patient_folder = os.path.join(root_folder ,patient_folder)
  147. for subfolders in os.listdir(patient_folder):
  148. if os.path.isdir( os.path.join(patient_folder ,subfolders)):
  149. for sagittal in os.listdir( os.path.join(patient_folder ,subfolders)):
  150. if sagittal == "Sagittal":
  151. print(os.path.join(patient_folder ,subfolders,sagittal))
  152. pad_dicom_series(os.path.join(patient_folder ,subfolders,sagittal))
  153. # %% [markdown]
  154. # copy the padding image to other folder
  155. # %%
  156. import os
  157. import shutil
  158. root_folder = r"D:\AISSLab\Code\3D CNN\datasets\DatasetV0.17 Dicom"
  159. destination_base = r"preprocessing_Dataset"
  160. for patient_folder in os.listdir(root_folder):
  161. patient_folder_path = os.path.join(root_folder, patient_folder)
  162. if not os.path.isdir(patient_folder_path):
  163. continue
  164. for subfolder in os.listdir(patient_folder_path):
  165. subfolder_path = os.path.join(patient_folder_path, subfolder)
  166. if not os.path.isdir(subfolder_path):
  167. continue
  168. for item in os.listdir(subfolder_path):
  169. if item == "Sagittal":
  170. sagittal_path = os.path.join(subfolder_path, item)
  171. print(f"Found Sagittal folder: {sagittal_path}")
  172. # Create destination directory
  173. dest_dir = os.path.join(destination_base, patient_folder)
  174. os.makedirs(dest_dir, exist_ok=True)
  175. # Copy all files from Sagittal folder
  176. for file in os.listdir(sagittal_path):
  177. src_file = os.path.join(sagittal_path, file)
  178. if os.path.isfile(src_file):
  179. shutil.copy2(src_file, os.path.join(dest_dir, file))
  180. print(f"✅ Copied to {dest_dir}")
  181. # %% [markdown]
  182. # labeling data
  183. # %%
  184. import pandas as pd
  185. import xml.etree.ElementTree as ET
  186. # %%
  187. # root_dir = r"D:\AISSLab\Code\3D CNN\datasets\DatasetV0.21 Final"
  188. root_dir = r"D:\Submitted Matrial (conference&journal)\Sagittal Data Artical\V0.47 Dataset analysis\DatasetV0.47 Final\DatasetV0.47"
  189. df= pd.DataFrame(columns = ["patient_ID","filename","level","name", "xmin","ymin","xmax","ymax" ,"width","height"])
  190. for patient_ in os.listdir(root_dir):
  191. patient_folder = os.path.join(root_dir, patient_)
  192. for sag in os.listdir(patient_folder):
  193. if sag =="Sagittal":
  194. sagittal_folder = os.path.join(patient_folder, sag)
  195. for XML in os.listdir(sagittal_folder):
  196. if XML.endswith("xml"):
  197. xml_path = os.path.join(sagittal_folder, XML)
  198. # print(patient_)
  199. # print(XML)
  200. # Load the XML file
  201. tree = ET.parse(xml_path) # Replace with the path to your XML file
  202. root = tree.getroot()
  203. # Extract global information
  204. filename = root.find('filename').text
  205. width = int(root.find('size/width').text)
  206. height = int(root.find('size/height').text)
  207. # Extract all objects
  208. data = []
  209. for obj in root.findall('object'):
  210. level = obj.find('level').text
  211. name = obj.find('name').text
  212. bbox = obj.find('bndbox')
  213. xmin = int(bbox.find('xmin').text)
  214. ymin = int(bbox.find('ymin').text)
  215. xmax = int(bbox.find('xmax').text)
  216. ymax = int(bbox.find('ymax').text)
  217. new_row = {
  218. "patient_ID":patient_,
  219. 'filename': XML.replace(".xml" , ""),
  220. 'level': level,
  221. 'name': name,
  222. 'xmin': xmin,
  223. 'ymin': ymin,
  224. 'xmax': xmax,
  225. 'ymax': ymax,
  226. 'width': width,
  227. 'height': height
  228. }
  229. df.loc[len(df)] = new_row
  230. # %%
  231. df.to_csv("label.csv" , index=False)
  232. # %%
  233. df
  234. # %%
  235. # df= pd.DataFrame(columns = ["patient_ID","level","name", "xmin","ymin","xmax","ymax" ,"width","height"])
  236. # %%
  237. # # Define a new row as a dictionary
  238. # new_row = {
  239. # 'filename': 'IM000004.png',
  240. # 'level': 'L3-L4',
  241. # 'name': 'LFS3',
  242. # 'xmin': 250,
  243. # 'ymin': 300,
  244. # 'xmax': 310,
  245. # 'ymax': 360,
  246. # 'width': 576,
  247. # 'height': 576
  248. # }
  249. # # Add it to the DataFrame
  250. # df.loc[len(df)] = new_row
  251. # # Show the updated DataFrame
  252. # print(df)
  253. # %% [markdown]
  254. # ### labeling
  255. # %%
  256. # old without consider the repetation of boxes
  257. # import pandas as pd
  258. # import json
  259. # import os
  260. # from collections import defaultdict
  261. # # Load dataframe
  262. # df = pd.read_csv("label.csv", sep=",")
  263. # # Normalize center
  264. # def compute_center(row):
  265. # x_center = (row["xmin"] + row["xmax"]) / 2 / row["width"]
  266. # y_center = (row["ymin"] + row["ymax"]) / 2 / row["height"]
  267. # return x_center, y_center
  268. # # Track z count
  269. # z_tracker = defaultdict(lambda: defaultdict(lambda: defaultdict(int)))
  270. # output_dir = r"D:\AISSLab\Code\3D CNN\datasets\label"
  271. # os.makedirs(output_dir, exist_ok=True)
  272. # patient_jsons = {}
  273. # i = 0
  274. # for patient_id, group in df.groupby("patient_ID"):
  275. # result = {
  276. # "L1-L2": {"left": None, "right": None},
  277. # "L2-L3": {"left": None, "right": None},
  278. # "L3-L4": {"left": None, "right": None},
  279. # "L4-L5": {"left": None, "right": None},
  280. # "L5-S1": {"left": None, "right": None},
  281. # }
  282. # repetation = []
  283. # for _, row in group.iterrows():
  284. # level = row["level"]
  285. # side = "left" if row["name"].startswith("LFS") else "right"
  286. # x, y = compute_center(row)
  287. # index_slice = row["filename"]
  288. # z= index_slice.replace("IM0000" , "")
  289. # if z[0] =="0" :
  290. # try:
  291. # z=int(z.replace("0",""))
  292. # except:
  293. # pass
  294. # else:
  295. # try:
  296. # z=int(z)
  297. # except:
  298. # pass
  299. # z = int(z) / 18
  300. # result[level][side] = [round(x, 4), round(y, 4), round(z, 4)]
  301. # patient_jsons[patient_id] = result
  302. # # Save per patient
  303. # file_path = os.path.join(output_dir, f"{patient_id}.json")
  304. # with open(file_path, "w") as f:
  305. # json.dump(result, f, indent=2)
  306. # %%
  307. # with consideration repetation
  308. import pandas as pd
  309. import json
  310. import os
  311. from collections import defaultdict
  312. from collections import Counter
  313. # Load dataframe
  314. df = pd.read_csv("label.csv", sep=",")
  315. # Normalize center
  316. def compute_center(row):
  317. x_center = (row["xmin"] + row["xmax"]) / 2 / row["width"]
  318. y_center = (row["ymin"] + row["ymax"]) / 2 / row["height"]
  319. return x_center, y_center
  320. # Track z count
  321. z_tracker = defaultdict(lambda: defaultdict(lambda: defaultdict(int)))
  322. output_dir = r"labelv1"
  323. os.makedirs(output_dir, exist_ok=True)
  324. patient_jsons = {}
  325. i = 0
  326. for patient_id, group in df.groupby("patient_ID"):
  327. result = {
  328. "L1-L2": {"left": None, "right": None},
  329. "L2-L3": {"left": None, "right": None},
  330. "L3-L4": {"left": None, "right": None},
  331. "L4-L5": {"left": None, "right": None},
  332. "L5-S1": {"left": None, "right": None},
  333. }
  334. repetation = []
  335. for _, row in group.iterrows():
  336. try:
  337. level = row["level"]
  338. side = "left" if row["name"].startswith("LFS") else "right"
  339. x, y = compute_center(row)
  340. index_slice = row["filename"]
  341. z= index_slice.replace("IM0000" , "")
  342. if z[0] =="0" :
  343. try:
  344. z=int(z.replace("0",""))
  345. except:
  346. pass
  347. else:
  348. try:
  349. z=int(z)
  350. except:
  351. pass
  352. z = int(z) / 18
  353. repetation.append([level, side ,index_slice, x, y , z])
  354. key_pairs = [(item[0], item[1]) for item in repetation]
  355. # Count repetitions
  356. counts = Counter(key_pairs)
  357. # Print repeated pairs
  358. for pair, count in counts.items():
  359. if count > 1:
  360. target = pair
  361. indices = [i for i, item in enumerate(repetation) if item[0] == target[0] and item[1] == target[1]]
  362. # print(repetation)
  363. repetation_times_1 = repetation[indices[0]][2]
  364. repetation_times_2 = repetation[indices[1]][2]
  365. count_1 = sum(1 for row in repetation if repetation_times_1 in row)
  366. count_2 = sum(1 for row in repetation if repetation_times_2 in row)
  367. if count_1 > count_2 :
  368. "delete list of two "
  369. del repetation[indices[1]]
  370. else:
  371. "delete repetation one "
  372. del repetation[indices[0]]
  373. for level, side, _, x, y, z in repetation:
  374. if level in result and side in result[level]:
  375. result[level][side] = (round(x,4), round(y,4),round( z, 4) )
  376. except:
  377. pass
  378. # Save per patient
  379. file_path = os.path.join(output_dir, f"{patient_id}.json")
  380. with open(file_path, "w") as f:
  381. json.dump(result, f, indent=2)

position_of_slices.ipynb at commit 4a8c597, no license · at the source

Overview

Authors: Osamah F. Abdulmahmod1, Mugahed A. Al-antari1, Hyunwook Kwon1, Afnan Habib1, Mukhlis Raza1, Metin Kaplan2, Bilal Ertuğrul2, İsmail Akçin2, Ertan Bütün3, Yeong Hyeon Gu1
  1. Department of Artificial Intelligence and Data Science, College of AI Convergence, Daeyang AI Center, Sejong University,Seoul, 05006 Korea
  2. Department of Neurosurgery, Faculty of Medicine, Fırat University,Elazığ, Turkey
  3. Department of Computer Engineering, Faculty of Engineering, Fırat University,Elazığ, Turkey
Institutions: Sejong University (South Korea); Fırat University (Türkiye)
Journal: Scientific data, volume 13, issue 1, article 809
Dates: received 10 December 2025; accepted 26 March 2026; published online 9 April 2026
Type: Data paper · Language: English
License: CC BY-NC-ND
Identifiers: DOI 10.1038/s41597-026-07138-x · PMID 41957051 · PMCID PMC13222877 · OpenAlex W7152403336
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: structural MRI / diffusion (modality), human (organism), methods / tools (subfield)
MeSH: Lumbar Vertebrae*, Magnetic Resonance Imaging*, Spinal Stenosis*, Artificial Intelligence, Humans (* major topic)
Journal subjects: Data Descriptor
Topic: Medical Imaging and Analysis (Biomedical Engineering, Engineering), according to OpenAlex
Funding: National Research Foundation of Korea (NRF) grant funded by the Korean government (MSIT) (RS-2023-00256517); TUBITAK (The Scientific and Technological Research Council of Turkey) (123N325); by Institute for Information & Communications Technology Planning & Evaluation (IITP) grant funded by the Korea government (MSIT) (RS-2025-25441838)
Citations: cited by 2 papers (Europe PMC); 51 references in the paper

Abstract

The abstract is not reproduced here: the paper's license (CC BY-NC-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.

Repository

Its files are read in the Code ↔ Paper reader above, with 7 matches between paragraphs and lines of code.

AISSLab2025/LSS-MRI-AISSLab-Dataset

License: none: the authors keep all their rights
State: the link answers, verified on 29 September 2026
Evidence: files inventoried
Commit: 4a8c5972fbb81be86e038723c57f941e6efb8f92, 19 May 2026
Languages: Jupyter (7), Python (1)
Size: 16 files, 8 scripts
Software Heritage: not archived
Found in: “Code availability”
Holds: README, 7 notebooks
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (7 files), OpenCV (6 files), PyTorch (6 files), pydicom (5 files), Matplotlib (4 files), scikit-learn (4 files), pandas (1 file), Pillow (1 file)
Availability: 1 check, the latest on 29 September 2026: the link answers
  • 29 September 2026: the link answers
9 files

Code availability statement

The paper has a code availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

Read it in the paper: doi.org/10.1038/s41597-026-07138-x.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 8 scripts, each with its path and the digest of its content;
  • 7 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

Datasets cited

Data availability statement

The paper has a data availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

Read it in the paper: doi.org/10.1038/s41597-026-07138-x.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 1, 29 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 10 authors, 5 MeSH terms, 3 funders, 44 references.

Cite

This paper

Abdulmahmod, O. F., Al-antari, M. A., Kwon, H., Habib, A., Raza, M., Kaplan, M., Ertuğrul, B., Akçin, İ., Bütün, E., & Gu, Y. H. (2026). Medical Spine Sagittal MRI Dataset for Segmentation and Foraminal Stenosis detection. Scientific data, 13(1), 809. https://doi.org/10.1038/s41597-026-07138-x

BibTeX

@article{abdulmahmod2026medical,
author = {Abdulmahmod, Osamah F. and Al-antari, Mugahed A. and Kwon, Hyunwook and Habib, Afnan and Raza, Mukhlis and Kaplan, Metin and Ertuğrul, Bilal and Akçin, İsmail and Bütün, Ertan and Gu, Yeong Hyeon},
title = {{Medical Spine Sagittal MRI Dataset for Segmentation and Foraminal Stenosis detection}},
journal = {Scientific data},
year = {2026},
month = apr,
volume = {13},
number = {1},
pages = {809},
publisher = {Nature Publishing Group},
issn = {2052-4463},
doi = {10.1038/s41597-026-07138-x},
url = {https://doi.org/10.1038/s41597-026-07138-x},
pmid = {41957051},
pmcid = {PMC13222877}
}

RIS

TY - JOUR
AU - Abdulmahmod, Osamah F.
AU - Al-antari, Mugahed A.
AU - Kwon, Hyunwook
AU - Habib, Afnan
AU - Raza, Mukhlis
AU - Kaplan, Metin
AU - Ertuğrul, Bilal
AU - Akçin, İsmail
AU - Bütün, Ertan
AU - Gu, Yeong Hyeon
TI - Medical Spine Sagittal MRI Dataset for Segmentation and Foraminal Stenosis detection
T2 - Scientific data
J2 - Sci Data
PY - 2026
DA - 2026/04/09
VL - 13
IS - 1
SP - 809
SN - 2052-4463
PB - Nature Publishing Group
DO - 10.1038/s41597-026-07138-x
UR - https://doi.org/10.1038/s41597-026-07138-x
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s41597-026-07138-x",
"type": "article-journal",
"title": "Medical Spine Sagittal MRI Dataset for Segmentation and Foraminal Stenosis detection",
"container-title": "Scientific data",
"author": [
{
"family": "Abdulmahmod",
"given": "Osamah F."
},
{
"family": "Al-antari",
"given": "Mugahed A."
},
{
"family": "Kwon",
"given": "Hyunwook"
},
{
"family": "Habib",
"given": "Afnan"
},
{
"family": "Raza",
"given": "Mukhlis"
},
{
"family": "Kaplan",
"given": "Metin"
},
{
"family": "Ertuğrul",
"given": "Bilal"
},
{
"family": "Akçin",
"given": "İsmail"
},
{
"family": "Bütün",
"given": "Ertan"
},
{
"family": "Gu",
"given": "Yeong Hyeon"
}
],
"container-title-short": "Sci Data",
"volume": "13",
"issue": "1",
"page": "809",
"DOI": "10.1038/s41597-026-07138-x",
"PMID": "41957051",
"PMCID": "PMC13222877",
"ISSN": "2052-4463",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s41597-026-07138-x",
"language": "en",
"issued": {
"date-parts": [
[
2026,
4,
9
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.3389/frai.2026.1771088 [code]
Few-shot deployment of pretrained MRI transformers in brain imaging tasks.
Journal: Frontiers in artificial intelligence
In common: pydicom, OpenCV, Pillow, 5 other tools, methods / tools, structural MRI / diffusion
[2] doi:10.1038/s42003-026-10957-8 [code]
Brain defence by the extracellular matrix protein Cochlin.
Journal: Communications biology
In common: pydicom, OpenCV, Pillow, 5 other tools
[3] doi:10.1111/joa.70203 [code]
Two-step workflow integrating automatic registration and manual refinement for the accurate alignment of serial histological sections in 3D reconstruction.
Journal: Journal of anatomy
In common: pydicom, OpenCV, Pillow, 4 other tools, methods / tools
[4] doi:10.1186/s12880-026-02481-2 [code]
Deep learning-based neuroanatomical profiling reveals population-specific brain changes in multiple sclerosis: a large-scale Middle Eastern study.
Journal: BMC medical imaging
In common: pydicom, OpenCV, Pillow, 4 other tools, structural MRI / diffusion
[5] doi:10.1371/journal.pcbi.1014555 [code]
Body surface potential driven personalisation of electrophysiological digital twins in hypertrophic cardiomyopathy.
Journal: PLoS computational biology
In common: pydicom, Pillow, PyTorch, 4 other tools, structural MRI / diffusion
[6] doi:10.1186/s13244-026-02296-3 [code]
A pre-trained foundation model framework for multiplanar MRI classification of extramural vascular invasion and mesorectal fascia invasion in rectal cancer.
Journal: Insights into imaging
In common: pydicom, OpenCV, PyTorch, 4 other tools, structural MRI / diffusion
[7] doi:10.21037/qims-2026-0792 [code]
An nnU-Net-based framework with adaptive feature representation for 3D brain tumor segmentation.
Journal: Quantitative imaging in medicine and surgery
In common: OpenCV, PyTorch, scikit-learn, 3 other tools, methods / tools, structural MRI / diffusion, 1 reference
[8] doi:10.1364/boe.600665 [code]
NeuroSeg-MF: robust neuron segmentation in two-photon Ca&lt;sup&gt;2+&lt;/sup&gt; imaging using multi-feature fusion and detection-guided SAM.
Journal: Biomedical optics express
In common: OpenCV, Pillow, PyTorch, 3 other tools, methods / tools, 1 reference
[9] doi:10.1038/s41597-026-07184-5 [code]
A Multiple Sclerosis MRI Dataset with Tri-Mask Annotations for Lesion Segmentation.
Journal: Scientific data
In common: pydicom, OpenCV, scikit-learn, 3 other tools, methods / tools, structural MRI / diffusion
[10] doi:10.1371/journal.pone.0351405 [code]
Unimodal vs. multimodal deep learning for non-invasive MGMT promoter methylation prediction in glioblastoma: A systematic evaluation on the BraTS 2021 dataset.
Journal: PloS one
In common: OpenCV, PyTorch, scikit-learn, 2 other tools, methods / tools, structural MRI / diffusion, 1 reference

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.