Congratulation. Great work. It is such an ancient but important standard.
I just spent around one year writing Wolfpacs, a dicom load balancer in pure Erlang. (In my spare time).
Question: what is your take on the headers that are "undecided"? For example,the headers that have either signed short (ss) or unsigned short (us) value representation. Most of the parsing is "stateless" but a few headers require "rules". "If previous headers X is Y then VR=OW". I wished they could have made the standard better in that regard.
Thanks for the kind words! I will definitely check out wolfpacs.
As for your question: I've run into a couple scenarios that require "lookback" into the parsed Dataset to parse correctly. For example, parsing Native PixelData correctly requires looking back for the Rows Element, Cols element, BitsAllocated element, etc in order to correctly parse the NativePixel data. The futzy thing is that these context "elements" need to come from the current Sequence (if parsing within a sequence). So, I do most of my parsing of sequences recursively, with each recursive frame holding pointers to the already parsed elements in this sequence (it's a stack essentially for nested sequences).
Not sure if that answers your question? For most generic elements though, as a parsing library I try to parse it generically and make the value payload available to the caller in case they need to apply any special logic to interpreting it. Though if you have a specific usecase that needs something that is missing here, please let me know or open an issue :).
Unrelated: I’m trying to locate or acquire some X-ray or mri scans showing the progression or regression of various diseases( cancer etc) or even broken bones healing. But they need to be of a single patient for the purpose of comparing image sets. Any pointers on where this sort of anonymous data might be?
are there publicly available datasets of dicom images?
my fathers a retired radiologists and ive wondered if making an app that could display images would potentially stave off any cognitive decline in the future.
Medical imaging, like everything medical, nuclear, and military, has somewhat high barriers to entry due to legal requirements, eg getting sued b/c of the proverbial amputation of the wrong leg due to flipped display. Also, from my limited experience in the field, software for radiology workflows and archival, viewing workstations etc. are often expected as part of a deal for the imaging devices (X ray, MRT, etc.) themselves rather than as separate products.
Any idea how one could anonymize their dicom images? I have a disk of a CT Scan of my skull laying around but my medical information seem to be strongly linked to it (opening it in an online viewer displays my name, id, etc.) If it wasn't for that fact, I'd love to be able to upload it somewhere and help science.
I wrote a DICOM parser in Go for the Kaggle competition in 2017, and it was such a pain. It probably only worked for that sample so I never released it but this looks great. Thanks for sharing!
I use MIPAV[1] which can run on Linux (or any OS with a new enough Java Runtime Environment). I don’t have a lot of experience with other DICOM viewers and have somewhat limited use cases for it, but it seems to have a good number of features.
It’s completely free, but accessing the download (or the source) requires (free) registration.[2] Filling out the form should take you straight to the download links (i.e. you should not have to wait for a manual approval to download).
Ginkgo CADx evolved quickly for a while some years ago (while it was partly funded by the Spanish government and developed by a private company), but that project and company closed. The code was released as open source and it gets some commits every once in a while by volunteers.
It has a weird UX/UI, but it might be enough for you.
[+] [-] raphexion_|5 years ago|reply
I just spent around one year writing Wolfpacs, a dicom load balancer in pure Erlang. (In my spare time).
Question: what is your take on the headers that are "undecided"? For example,the headers that have either signed short (ss) or unsigned short (us) value representation. Most of the parsing is "stateless" but a few headers require "rules". "If previous headers X is Y then VR=OW". I wished they could have made the standard better in that regard.
[+] [-] suyashkumar|5 years ago|reply
As for your question: I've run into a couple scenarios that require "lookback" into the parsed Dataset to parse correctly. For example, parsing Native PixelData correctly requires looking back for the Rows Element, Cols element, BitsAllocated element, etc in order to correctly parse the NativePixel data. The futzy thing is that these context "elements" need to come from the current Sequence (if parsing within a sequence). So, I do most of my parsing of sequences recursively, with each recursive frame holding pointers to the already parsed elements in this sequence (it's a stack essentially for nested sequences).
Not sure if that answers your question? For most generic elements though, as a parsing library I try to parse it generically and make the value payload available to the caller in case they need to apply any special logic to interpreting it. Though if you have a specific usecase that needs something that is missing here, please let me know or open an issue :).
[+] [-] tecleandor|5 years ago|reply
Usually, for something like that, I would use Orthanc plus a bit of Python or Lua scafolding. What advantages does WolfPACS provides?
[+] [-] social_quotient|5 years ago|reply
[+] [-] danielheath|5 years ago|reply
[+] [-] suyashkumar|5 years ago|reply
[+] [-] FL33TW00D|5 years ago|reply
[1] https://github.com/rordenlab/dcm2niix
[+] [-] sleepy_keita|5 years ago|reply
[+] [-] thakoppno|5 years ago|reply
my fathers a retired radiologists and ive wondered if making an app that could display images would potentially stave off any cognitive decline in the future.
thank you
[+] [-] suyashkumar|5 years ago|reply
I've found The Cancer Imaging Archive to be very useful in this regard: https://www.cancerimagingarchive.net/ (some are also already preloaded into Google Cloud buckets: https://cloud.google.com/healthcare/docs/resources/public-da...
[+] [-] tannhaeuser|5 years ago|reply
[+] [-] viraptor|5 years ago|reply
[+] [-] Raphmedia|5 years ago|reply
[+] [-] VikingCoder|5 years ago|reply
https://www.postdicom.com/en/blog/top-25-free-dicom-viewers
This one always impressed me:
https://horosproject.org/
[+] [-] cridenour|5 years ago|reply
[+] [-] paulhart|5 years ago|reply
[+] [-] bombastry|5 years ago|reply
It’s completely free, but accessing the download (or the source) requires (free) registration.[2] Filling out the form should take you straight to the download links (i.e. you should not have to wait for a manual approval to download).
[1] https://mipav.cit.nih.gov/ [2] https://mipav.cit.nih.gov/clickwrap.php
[+] [-] tecleandor|5 years ago|reply
It has a weird UX/UI, but it might be enough for you.
Also, it's packaged on most distributions.
https://github.com/gerddie/ginkgocadx
[+] [-] jimis|5 years ago|reply
http://www.nongnu.org/aeskulap/
Unfortunately it seems it's no longer available in Fedora repositories.
[+] [-] unknown|5 years ago|reply
[deleted]