-
Notifications
You must be signed in to change notification settings - Fork 285
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(metadata): adding support for multiframe metadata in wadors and …
…wadouri (#582)
- Loading branch information
Showing
13 changed files
with
454 additions
and
55 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 3 additions & 0 deletions
3
packages/dicomImageLoader/src/imageLoader/isNMReconstructable.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
export default function isNMReconstructable(imageSubType) { | ||
return imageSubType === 'RECON TOMO' || imageSubType === 'RECON GATED TOMO'; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
84 changes: 84 additions & 0 deletions
84
packages/dicomImageLoader/src/imageLoader/wadors/metaData/NMHelpers.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
import getTagValue from '../getTagValue'; | ||
import getValue from './getValue'; | ||
import isNMReconstructable from '../../isNMReconstructable'; | ||
import getNumberValues from './getNumberValues'; | ||
|
||
function isNMModality(metaData) { | ||
const modality = getValue(metaData['00080060']); | ||
|
||
return modality.includes('NM'); | ||
} | ||
|
||
/** | ||
* Get a subpart of Image Type dicom tag defined by index | ||
* @param {*} metaData | ||
* @param {*} index 0 based index of the subtype | ||
*/ | ||
function getImageTypeSubItemFromMetadata(metaData, index) { | ||
const imageType = getTagValue(metaData['00080008'], false); | ||
|
||
if (imageType) { | ||
// const subTypes = imageType.split('\\'); | ||
|
||
// if (subTypes.length > index) { | ||
// return subTypes[index]; | ||
// } | ||
return imageType[index]; | ||
} | ||
|
||
return undefined; | ||
} | ||
/** | ||
* Extracts the orientation from NM multiframe metadata, if image type | ||
* equal to RECON TOMO or RECON GATED TOMO | ||
* @param {*} metaData | ||
* @returns | ||
*/ | ||
function extractOrientationFromNMMultiframeMetadata(metaData) { | ||
let imageOrientationPatient; | ||
const imageSubType = getImageTypeSubItemFromMetadata(metaData, 2); | ||
|
||
if (imageSubType && isNMReconstructable(imageSubType)) { | ||
const detectorInformationSequence = getTagValue(metaData['00540022']); | ||
|
||
if (detectorInformationSequence) { | ||
imageOrientationPatient = getNumberValues( | ||
detectorInformationSequence['00200037'], | ||
6 | ||
); | ||
} | ||
} | ||
|
||
return imageOrientationPatient; | ||
} | ||
|
||
/** | ||
* Extracts the position from NM multiframe dataset, if image type | ||
* equal to RECON TOMO or RECON GATED TOMO | ||
* @param {*} metaData | ||
* @returns | ||
*/ | ||
function extractPositionFromNMMultiframeMetadata(metaData) { | ||
let imagePositionPatient; | ||
const imageSubType = getImageTypeSubItemFromMetadata(metaData, 2); | ||
|
||
if (imageSubType && isNMReconstructable(imageSubType)) { | ||
const detectorInformationSequence = getTagValue(metaData['00540022']); | ||
|
||
if (detectorInformationSequence) { | ||
imagePositionPatient = getNumberValues( | ||
detectorInformationSequence['00200032'], | ||
3 | ||
); | ||
} | ||
} | ||
|
||
return imagePositionPatient; | ||
} | ||
|
||
export { | ||
extractOrientationFromNMMultiframeMetadata, | ||
extractPositionFromNMMultiframeMetadata, | ||
isNMModality, | ||
getImageTypeSubItemFromMetadata, | ||
}; |
49 changes: 49 additions & 0 deletions
49
packages/dicomImageLoader/src/imageLoader/wadors/metaData/extractPositioningFromMetadata.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
import getNumberValues from './getNumberValues'; | ||
import { | ||
extractOrientationFromNMMultiframeMetadata, | ||
extractPositionFromNMMultiframeMetadata, | ||
isNMModality, | ||
} from './NMHelpers'; | ||
|
||
/** | ||
* Extract orientation information from a metadata. It tries to get the orientation | ||
* from the Detector Information Sequence (for NM images) if image type equal | ||
* to RECON TOMO or RECON GATED TOMO | ||
* @param {*} metaData | ||
* @returns | ||
*/ | ||
function extractOrientationFromMetadata(metaData) { | ||
let imageOrientationPatient = getNumberValues(metaData['00200037'], 6); | ||
|
||
// If orientation not valid to this point, trying to get the orientation | ||
// from the Detector Information Sequence (for NM images) with image type | ||
// equal to RECON TOMO or RECON GATED TOMO | ||
|
||
if (!imageOrientationPatient && isNMModality(metaData)) { | ||
imageOrientationPatient = | ||
extractOrientationFromNMMultiframeMetadata(metaData); | ||
} | ||
|
||
return imageOrientationPatient; | ||
} | ||
|
||
/** | ||
* Extract position information from a metaData. It tries to get the position | ||
* from the Detector Information Sequence (for NM images) if image type equal | ||
* to RECON TOMO or RECON GATED TOMO | ||
* @param {*} metaData | ||
* @returns | ||
*/ | ||
function extractPositionFromMetadata(metaData) { | ||
let imagePositionPatient = getNumberValues(metaData['00200032'], 3); | ||
|
||
// If position not valid to this point, trying to get the position | ||
// from the Detector Information Sequence (for NM images) | ||
if (!imagePositionPatient && isNMModality(metaData)) { | ||
imagePositionPatient = extractPositionFromNMMultiframeMetadata(metaData); | ||
} | ||
|
||
return imagePositionPatient; | ||
} | ||
|
||
export { extractOrientationFromMetadata, extractPositionFromMetadata }; |
16 changes: 0 additions & 16 deletions
16
packages/dicomImageLoader/src/imageLoader/wadors/metaData/fixNMMetadata.ts
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.