Loading IDC converted Visible Human DICOM images into Slicer

@apodolski I am sorry for the delay in responding.

In short, and unfortunately, it is indeed the case that a significant portion of the CT/MR images in the nlm_visible_human_project collection is not loadable in 3D Slicer due to the issues that reconstruction of the corresponding DICOM series into 3D volumes.

Thank you for raising this issue. We did not test 3d reconstruction for this dataset prior to its release, and some issues went unnoticed.

If you are interested in specifics, most of the problematic series are MR, and cannot be reconstructed due to the SpacingBetweenSlices tag set to 0 (for those interested, and perhaps even more for my own records, at the bottom of this post you will find the SQL query that selects the series affected by this issue).

Some of the CT series (specifically, 1.3.6.1.4.1.5962.1.3.1174.2.1672334394.26545 and 1.3.6.1.4.1.5962.1.3.1174.5.1672334394.26545) have other issues (AcquisitionNumber set to varying values within the series, missing slices and possibly inconsistent orientation).

We are investigating this issue and will try to remedy it for the next IDC release v19. I will try to remember to update this thread when we have a resolution.

Thank you again for reaching out with your report!


The query below will select all of the series from the nlm_visible_human_project collection that contain more than 1 slice and have SpacingBetweenSlices set to 0.

WITH
  slices_counted AS (
  SELECT
    SeriesInstanceUID,
    COUNT(DISTINCT(SOPInstanceUID)) AS num_slices
  FROM
    `bigquery-public-data.idc_current.dicom_all`
  WHERE
    collection_id = "nlm_visible_human_project"
    AND Modality IN ("MR",
      "CT")
  GROUP BY
    SeriesInstanceUID
  HAVING
    num_slices > 1 )
SELECT
  DISTINCT(Modality),
  PatientID,
  SeriesNumber,
  SeriesDescription,
  StudyInstanceUID,
  SeriesInstanceUID
FROM
  `bigquery-public-data.idc_current.idc_v18`
WHERE
  collection_id = "nlm_visible_human_project"
  AND SAFE_CAST(SpacingBetweenSlices AS float64) = 0
  AND SeriesInstanceUID IN (
  SELECT
    SeriesInstanceUID
  FROM
    slices_counted)
ORDER BY
  SAFE_CAST(SeriesNumber AS INT) ASC