Comments (3)
Fantastic, thank you for raising this and posting some sample files! Will see if I can investigate a little this weekend or later next week, and let me know if you have a chance to investigate in the meantime. It might be nice to also try the rewritten parser on this set of files as well. I think we should also consider adding in more robust debug instrumentation throughout the parser, both the current one and the rewritten one (will open a feature request for that)
from dicom.
I have done some quick investigation, and I think I see what the issue is.
It looks like the PixelData tag (7FE0,0010)
can appear multiple times in a Dataset, in particular when it is part of an Icon Image Sequence.
In this case, when we parse that native pixel data, we must make use of tags that have appeared earlier (like Rows
, BitsAllocated
, etc). However, if we encounter the PixelData tag within an Icon Image Sequence, we need to fetch these tags from within the current sequence instead of from the global dataset. If we fetch them from the global dataset, we end up grabbing the values for the actual PixelData and not the icon!
Will look into a mitigation for this shortly. Will also keep this in mind for the rewrite. This only seems to be an issue for the native pixel data, which AFAIK is the main thing that requires looking back at the dataset to parse (encapsulated pixel data does not require "looking back").
from dicom.
You can see the WIP draft PR #79 that should quick fix this, and appears to work for the provided DICOMs (thanks again for those). There is one odd thing that I'd like to check out before merging, and maybe refactor to avoid some temporary copies either now or in a follow up PR.
from dicom.
Related Issues (20)
- File with dicom seg throws an error - writing dicom file: unsupported BitsPerSample value
- Converting DICOM to Image results into "blacked" image HOT 4
- using dicom.Parse function ,unexpected EOF HOT 1
- Write element with sequence item or nested sequence HOT 2
- The reason why the converted DICOM displays as blank after converting from RAW format might be attributed to the following factors: HOT 1
- Rewrite & Update README
- Remove Mocks
- Refactor internal-only packages into internal/
- Refactor PixelDataInfo API
- Remove dicomio.Reader interface in favor of dicomio.Reader direct struct
- Consider deprecating top level bytesLimit in Parse() API in favor of always parsing until EOF.
- Write API: When using WriteElement API, ensure proper transfer syntax is used to encode the data (Write() works fine)
- Support deflate transfer syntax writes
- Add write benchmarks
- Consider Parse API refactor HOT 1
- Improve support for non-compliant DICOM and edge cases HOT 8
- write: option to override default missing transfer syntax in dicom (mostly useful for testing, since users could just update the uid in the dataset)
- For missing Transfer Syntax UID fallback, should we also try reading with a deflated syntax?
- Error when parsing with Little Endian Explicit transfer syntax HOT 2
- Support for RGB for pixeldata HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dicom.