dcmjs 0.19.4 → 0.19.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/dcmjs.es.js +106 -90
- package/build/dcmjs.es.js.map +1 -1
- package/build/dcmjs.js +106 -90
- package/build/dcmjs.js.map +1 -1
- package/package.json +1 -1
- package/test/arrayItem.json +351 -0
- package/test/test_data.js +10 -0
package/README.md
CHANGED
|
@@ -36,7 +36,7 @@ _Parts of DICOM that dcmjs will focus on:_
|
|
|
36
36
|
|
|
37
37
|
_Parts of DICOM that dcmjs *will not* focus on:_
|
|
38
38
|
|
|
39
|
-
- DIMSE (legacy networking like C-FIND, C-MOVE, etc). See the [
|
|
39
|
+
- DIMSE (legacy networking like C-STORE, C-FIND, C-MOVE, etc). See the [dcmjs-dimse project](https://github.com/PantelisGeorgiadis/dcmjs-dimse) for that.
|
|
40
40
|
- Physical Media (optical disks). See [this FAQ](https://www.dclunie.com/medical-image-faq/html/index.html) if you need to work with those.
|
|
41
41
|
|
|
42
42
|
# Usage
|
package/build/dcmjs.es.js
CHANGED
|
@@ -2642,6 +2642,13 @@ function () {
|
|
|
2642
2642
|
value: function isPixelDataTag() {
|
|
2643
2643
|
return this.is(0x7fe00010);
|
|
2644
2644
|
}
|
|
2645
|
+
}, {
|
|
2646
|
+
key: "isPrivateCreator",
|
|
2647
|
+
value: function isPrivateCreator() {
|
|
2648
|
+
var group = this.group();
|
|
2649
|
+
var element = this.element();
|
|
2650
|
+
return group % 2 === 1 && element < 0x100 && element > 0x00;
|
|
2651
|
+
}
|
|
2645
2652
|
}, {
|
|
2646
2653
|
key: "write",
|
|
2647
2654
|
value: function write(stream, vrType, values, syntax, writeOptions) {
|
|
@@ -2746,7 +2753,8 @@ var addAccessors = function addAccessors(dest, src) {
|
|
|
2746
2753
|
},
|
|
2747
2754
|
set: function set(v) {
|
|
2748
2755
|
src[key] = v;
|
|
2749
|
-
}
|
|
2756
|
+
},
|
|
2757
|
+
configurable: true
|
|
2750
2758
|
});
|
|
2751
2759
|
});
|
|
2752
2760
|
};
|
|
@@ -2910,6 +2918,7 @@ function () {
|
|
|
2910
2918
|
var sqZero = naturalDataset[naturalName][0];
|
|
2911
2919
|
|
|
2912
2920
|
if (sqZero && _typeof(sqZero) === "object" && !sqZero.length) {
|
|
2921
|
+
naturalDataset[naturalName] = _toConsumableArray(naturalDataset[naturalName]);
|
|
2913
2922
|
addAccessors(naturalDataset[naturalName], sqZero);
|
|
2914
2923
|
} else {
|
|
2915
2924
|
naturalDataset[naturalName] = sqZero;
|
|
@@ -3271,6 +3280,8 @@ function () {
|
|
|
3271
3280
|
vrType = "OW";
|
|
3272
3281
|
} else if (vrType == "xs") {
|
|
3273
3282
|
vrType = "US";
|
|
3283
|
+
} else if (tag.isPrivateCreator()) {
|
|
3284
|
+
vrType = "LO";
|
|
3274
3285
|
} else {
|
|
3275
3286
|
vrType = "UN";
|
|
3276
3287
|
}
|
|
@@ -12417,33 +12428,45 @@ function generateToolState$1(imageIds, arrayBuffer, metadataProvider) {
|
|
|
12417
12428
|
}
|
|
12418
12429
|
/**
|
|
12419
12430
|
* Find the reference frame of the segmentation frame in the source data.
|
|
12420
|
-
*
|
|
12431
|
+
*
|
|
12432
|
+
* @param {Object} multiframe dicom metadata
|
|
12433
|
+
* @param {Int} frameSegment frame dicom index
|
|
12434
|
+
* @param {String[]} imageIds A list of imageIds.
|
|
12435
|
+
* @param {Object} metadataProvider A Cornerstone metadataProvider to query
|
|
12436
|
+
* metadata from imageIds.
|
|
12437
|
+
* @param {Float} tolerance The tolerance parameter
|
|
12438
|
+
*
|
|
12439
|
+
* @returns {String} Returns the imageId
|
|
12421
12440
|
*/
|
|
12422
12441
|
|
|
12423
12442
|
|
|
12424
|
-
function findReferenceSourceImageId(
|
|
12425
|
-
var
|
|
12443
|
+
function findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadataProvider, tolerance) {
|
|
12444
|
+
var FrameOfReferenceUID = multiframe.FrameOfReferenceUID,
|
|
12445
|
+
PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
|
|
12446
|
+
SourceImageSequence = multiframe.SourceImageSequence,
|
|
12447
|
+
ReferencedSeriesSequence = multiframe.ReferencedSeriesSequence;
|
|
12448
|
+
var PerFrameFunctionalGroup = PerFrameFunctionalGroupsSequence[frameSegment];
|
|
12449
|
+
var imageId = undefined;
|
|
12426
12450
|
|
|
12427
|
-
if (
|
|
12428
|
-
|
|
12429
|
-
|
|
12430
|
-
|
|
12431
|
-
|
|
12432
|
-
* that have each a frame with the same ImagePositionPatient of PlanePositionSequence).
|
|
12433
|
-
*/
|
|
12434
|
-
if (PerFrameFunctionalGroups.PlanePositionSequence !== undefined && PerFrameFunctionalGroups.PlanePositionSequence[0] !== undefined && PerFrameFunctionalGroups.PlanePositionSequence[0].ImagePositionPatient !== undefined) {
|
|
12435
|
-
for (var _i5 = 0; _i5 < imageIds.length; ++_i5) {
|
|
12436
|
-
var sourceImageMetadata = cornerstone.metaData.get("instance", imageIds[_i5]);
|
|
12451
|
+
if (ReferencedSeriesSequence) {
|
|
12452
|
+
var referencedSeriesSequence = Array.isArray(ReferencedSeriesSequence) ? ReferencedSeriesSequence[0] : ReferencedSeriesSequence;
|
|
12453
|
+
var ReferencedSeriesInstanceUID = referencedSeriesSequence.SeriesInstanceUID;
|
|
12454
|
+
imageId = getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, tolerance);
|
|
12455
|
+
}
|
|
12437
12456
|
|
|
12438
|
-
|
|
12439
|
-
|
|
12440
|
-
}
|
|
12457
|
+
if (imageId === undefined) {
|
|
12458
|
+
var sourceImageSequence;
|
|
12441
12459
|
|
|
12442
|
-
|
|
12443
|
-
|
|
12444
|
-
|
|
12445
|
-
|
|
12460
|
+
if (SourceImageSequence) {
|
|
12461
|
+
sourceImageSequence = multiframe.SourceImageSequence[frameSegment];
|
|
12462
|
+
} else if (PerFrameFunctionalGroup.DerivationImageSequence) {
|
|
12463
|
+
var DerivationImageSequence = PerFrameFunctionalGroup.DerivationImageSequence;
|
|
12464
|
+
DerivationImageSequence = Array.isArray(DerivationImageSequence) ? DerivationImageSequence[0] : DerivationImageSequence;
|
|
12465
|
+
sourceImageSequence = DerivationImageSequence.SourceImageSequence;
|
|
12466
|
+
sourceImageSequence = Array.isArray(sourceImageSequence) ? sourceImageSequence[0] : sourceImageSequence;
|
|
12446
12467
|
}
|
|
12468
|
+
|
|
12469
|
+
imageId = getImageIdOfSourceImagebySourceImageSequence(sourceImageSequence, imageIds, metadataProvider);
|
|
12447
12470
|
}
|
|
12448
12471
|
|
|
12449
12472
|
return imageId;
|
|
@@ -12486,20 +12509,7 @@ function checkSEGsOverlapping(pixelData, multiframe, imageIds, validOrientations
|
|
|
12486
12509
|
return "continue";
|
|
12487
12510
|
}
|
|
12488
12511
|
|
|
12489
|
-
var
|
|
12490
|
-
|
|
12491
|
-
if (multiframe.SourceImageSequence) {
|
|
12492
|
-
SourceImageSequence = multiframe.SourceImageSequence[frameSegment];
|
|
12493
|
-
} else {
|
|
12494
|
-
SourceImageSequence = PerFrameFunctionalGroups.DerivationImageSequence.SourceImageSequence;
|
|
12495
|
-
}
|
|
12496
|
-
|
|
12497
|
-
if (!SourceImageSequence) {
|
|
12498
|
-
console.warn("Source Image Sequence information missing: individual SEG frames are out of plane, this is not yet supported, skipping this frame.");
|
|
12499
|
-
return "continue";
|
|
12500
|
-
}
|
|
12501
|
-
|
|
12502
|
-
var imageId = findReferenceSourceImageId(SourceImageSequence, imageIds, metadataProvider, PerFrameFunctionalGroups, multiframe.FrameOfReferenceUID, tolerance);
|
|
12512
|
+
var imageId = findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadataProvider, tolerance);
|
|
12503
12513
|
|
|
12504
12514
|
if (!imageId) {
|
|
12505
12515
|
console.warn("Image not present in stack, can't import frame : " + i + ".");
|
|
@@ -12540,8 +12550,8 @@ function checkSEGsOverlapping(pixelData, multiframe, imageIds, validOrientations
|
|
|
12540
12550
|
|
|
12541
12551
|
var temp2DArray = new Uint16Array(sliceLength).fill(0);
|
|
12542
12552
|
|
|
12543
|
-
for (var
|
|
12544
|
-
var _frameSegment = role[
|
|
12553
|
+
for (var _i5 = 0; _i5 < role.length; ++_i5) {
|
|
12554
|
+
var _frameSegment = role[_i5];
|
|
12545
12555
|
var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[_frameSegment];
|
|
12546
12556
|
var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
|
|
12547
12557
|
var pixelDataI2D = ndarray(new Uint8Array(pixelData.buffer, _frameSegment * sliceLength, sliceLength), [Rows, Columns]);
|
|
@@ -12610,44 +12620,32 @@ function insertOverlappingPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray,
|
|
|
12610
12620
|
var numberOfSegs = multiframe.SegmentSequence.length;
|
|
12611
12621
|
|
|
12612
12622
|
for (var segmentIndexToProcess = 1; segmentIndexToProcess <= numberOfSegs; ++segmentIndexToProcess) {
|
|
12613
|
-
var _loop4 = function _loop4(groupsLen,
|
|
12614
|
-
var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[
|
|
12615
|
-
var segmentIndex = getSegmentIndex(multiframe,
|
|
12623
|
+
var _loop4 = function _loop4(groupsLen, _i7) {
|
|
12624
|
+
var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[_i7];
|
|
12625
|
+
var segmentIndex = getSegmentIndex(multiframe, _i7);
|
|
12616
12626
|
|
|
12617
12627
|
if (segmentIndex === undefined) {
|
|
12618
12628
|
throw new Error("Could not retrieve the segment index. Aborting segmentation loading.");
|
|
12619
12629
|
}
|
|
12620
12630
|
|
|
12621
12631
|
if (segmentIndex !== segmentIndexToProcess) {
|
|
12622
|
-
|
|
12632
|
+
_i6 = _i7;
|
|
12623
12633
|
return "continue";
|
|
12624
12634
|
}
|
|
12625
12635
|
|
|
12626
12636
|
var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
|
|
12627
|
-
var pixelDataI2D = ndarray(new Uint8Array(pixelData.buffer,
|
|
12637
|
+
var pixelDataI2D = ndarray(new Uint8Array(pixelData.buffer, _i7 * sliceLength, sliceLength), [Rows, Columns]);
|
|
12628
12638
|
var alignedPixelDataI = alignPixelDataWithSourceData$1(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);
|
|
12629
12639
|
|
|
12630
12640
|
if (!alignedPixelDataI) {
|
|
12631
12641
|
throw new Error("Individual SEG frames are out of plane with respect to the first SEG frame. " + "This is not yet supported. Aborting segmentation loading.");
|
|
12632
12642
|
}
|
|
12633
12643
|
|
|
12634
|
-
var
|
|
12635
|
-
|
|
12636
|
-
if (multiframe.SourceImageSequence) {
|
|
12637
|
-
SourceImageSequence = multiframe.SourceImageSequence[_i8];
|
|
12638
|
-
} else {
|
|
12639
|
-
SourceImageSequence = PerFrameFunctionalGroups.DerivationImageSequence.SourceImageSequence;
|
|
12640
|
-
}
|
|
12641
|
-
|
|
12642
|
-
if (!SourceImageSequence) {
|
|
12643
|
-
throw new Error("Source Image Sequence information missing: individual SEG frames are out of plane. " + "This is not yet supported. Aborting segmentation loading.");
|
|
12644
|
-
}
|
|
12645
|
-
|
|
12646
|
-
var imageId = findReferenceSourceImageId(SourceImageSequence, imageIds, metadataProvider, PerFrameFunctionalGroups, multiframe.FrameOfReferenceUID, tolerance);
|
|
12644
|
+
var imageId = findReferenceSourceImageId(multiframe, _i7, imageIds, metadataProvider, tolerance);
|
|
12647
12645
|
|
|
12648
12646
|
if (!imageId) {
|
|
12649
|
-
console.warn("Image not present in stack, can't import frame : " +
|
|
12650
|
-
|
|
12647
|
+
console.warn("Image not present in stack, can't import frame : " + _i7 + ".");
|
|
12648
|
+
_i6 = _i7;
|
|
12651
12649
|
return "continue";
|
|
12652
12650
|
}
|
|
12653
12651
|
|
|
@@ -12679,7 +12677,7 @@ function insertOverlappingPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray,
|
|
|
12679
12677
|
|
|
12680
12678
|
tempBuffer = labelmapBufferArray[m].slice(0);
|
|
12681
12679
|
tempSegmentsOnFrame = lodash_clonedeep(segmentsOnFrameArray[m]);
|
|
12682
|
-
|
|
12680
|
+
_i7 = 0;
|
|
12683
12681
|
break;
|
|
12684
12682
|
} else {
|
|
12685
12683
|
labelmap2DView[j] = segmentIndex;
|
|
@@ -12702,11 +12700,11 @@ function insertOverlappingPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray,
|
|
|
12702
12700
|
segmentsOnFrame[imageIdIndex].push(segmentIndex);
|
|
12703
12701
|
}
|
|
12704
12702
|
|
|
12705
|
-
|
|
12703
|
+
_i6 = _i7;
|
|
12706
12704
|
};
|
|
12707
12705
|
|
|
12708
|
-
for (var
|
|
12709
|
-
var _ret2 = _loop4(groupsLen,
|
|
12706
|
+
for (var _i6 = 0, groupsLen = PerFrameFunctionalGroupsSequence.length; _i6 < groupsLen; ++_i6) {
|
|
12707
|
+
var _ret2 = _loop4(groupsLen, _i6);
|
|
12710
12708
|
|
|
12711
12709
|
if (_ret2 === "continue") continue;
|
|
12712
12710
|
}
|
|
@@ -12735,38 +12733,26 @@ function insertPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBu
|
|
|
12735
12733
|
var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
|
|
12736
12734
|
var sliceLength = Columns * Rows;
|
|
12737
12735
|
|
|
12738
|
-
var _loop5 = function _loop5(groupsLen,
|
|
12739
|
-
var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[
|
|
12736
|
+
var _loop5 = function _loop5(groupsLen, _i8) {
|
|
12737
|
+
var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[_i8];
|
|
12740
12738
|
var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
|
|
12741
|
-
var pixelDataI2D = ndarray(new Uint8Array(pixelData.buffer,
|
|
12739
|
+
var pixelDataI2D = ndarray(new Uint8Array(pixelData.buffer, _i8 * sliceLength, sliceLength), [Rows, Columns]);
|
|
12742
12740
|
var alignedPixelDataI = alignPixelDataWithSourceData$1(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);
|
|
12743
12741
|
|
|
12744
12742
|
if (!alignedPixelDataI) {
|
|
12745
12743
|
throw new Error("Individual SEG frames are out of plane with respect to the first SEG frame. " + "This is not yet supported. Aborting segmentation loading.");
|
|
12746
12744
|
}
|
|
12747
12745
|
|
|
12748
|
-
var segmentIndex = getSegmentIndex(multiframe,
|
|
12746
|
+
var segmentIndex = getSegmentIndex(multiframe, _i8);
|
|
12749
12747
|
|
|
12750
12748
|
if (segmentIndex === undefined) {
|
|
12751
12749
|
throw new Error("Could not retrieve the segment index. Aborting segmentation loading.");
|
|
12752
12750
|
}
|
|
12753
12751
|
|
|
12754
|
-
var
|
|
12755
|
-
|
|
12756
|
-
if (multiframe.SourceImageSequence) {
|
|
12757
|
-
SourceImageSequence = multiframe.SourceImageSequence[_i9];
|
|
12758
|
-
} else {
|
|
12759
|
-
SourceImageSequence = PerFrameFunctionalGroups.DerivationImageSequence.SourceImageSequence;
|
|
12760
|
-
}
|
|
12761
|
-
|
|
12762
|
-
if (!SourceImageSequence) {
|
|
12763
|
-
throw new Error("Source Image Sequence information missing: individual SEG frames are out of plane. " + "This is not yet supported. Aborting segmentation loading.");
|
|
12764
|
-
}
|
|
12765
|
-
|
|
12766
|
-
var imageId = findReferenceSourceImageId(SourceImageSequence, imageIds, metadataProvider, PerFrameFunctionalGroups, multiframe.FrameOfReferenceUID, tolerance);
|
|
12752
|
+
var imageId = findReferenceSourceImageId(multiframe, _i8, imageIds, metadataProvider, tolerance);
|
|
12767
12753
|
|
|
12768
12754
|
if (!imageId) {
|
|
12769
|
-
console.warn("Image not present in stack, can't import frame : " +
|
|
12755
|
+
console.warn("Image not present in stack, can't import frame : " + _i8 + ".");
|
|
12770
12756
|
return "continue";
|
|
12771
12757
|
}
|
|
12772
12758
|
|
|
@@ -12802,8 +12788,8 @@ function insertPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBu
|
|
|
12802
12788
|
}
|
|
12803
12789
|
};
|
|
12804
12790
|
|
|
12805
|
-
for (var
|
|
12806
|
-
var _ret3 = _loop5(groupsLen,
|
|
12791
|
+
for (var _i8 = 0, groupsLen = PerFrameFunctionalGroupsSequence.length; _i8 < groupsLen; ++_i8) {
|
|
12792
|
+
var _ret3 = _loop5(groupsLen, _i8);
|
|
12807
12793
|
|
|
12808
12794
|
if (_ret3 === "continue") continue;
|
|
12809
12795
|
}
|
|
@@ -12888,21 +12874,51 @@ function unpackPixelData$1(multiframe) {
|
|
|
12888
12874
|
return pixelData;
|
|
12889
12875
|
}
|
|
12890
12876
|
/**
|
|
12891
|
-
*
|
|
12877
|
+
* getImageIdOfSourceImagebySourceImageSequence - Returns the Cornerstone imageId of the source image.
|
|
12892
12878
|
*
|
|
12893
|
-
* @param {Object}
|
|
12894
|
-
* @param {String[]} imageIds
|
|
12895
|
-
* @param {Object}
|
|
12896
|
-
*
|
|
12897
|
-
* @return {String}
|
|
12879
|
+
* @param {Object} SourceImageSequence Sequence describing the source image.
|
|
12880
|
+
* @param {String[]} imageIds A list of imageIds.
|
|
12881
|
+
* @param {Object} metadataProvider A Cornerstone metadataProvider to query
|
|
12882
|
+
* metadata from imageIds.
|
|
12883
|
+
* @return {String} The corresponding imageId.
|
|
12898
12884
|
*/
|
|
12899
12885
|
|
|
12900
12886
|
|
|
12901
|
-
function
|
|
12887
|
+
function getImageIdOfSourceImagebySourceImageSequence(SourceImageSequence, imageIds, metadataProvider) {
|
|
12902
12888
|
var ReferencedSOPInstanceUID = SourceImageSequence.ReferencedSOPInstanceUID,
|
|
12903
12889
|
ReferencedFrameNumber = SourceImageSequence.ReferencedFrameNumber;
|
|
12904
12890
|
return ReferencedFrameNumber ? getImageIdOfReferencedFrame$1(ReferencedSOPInstanceUID, ReferencedFrameNumber, imageIds, metadataProvider) : getImageIdOfReferencedSingleFramedSOPInstance$1(ReferencedSOPInstanceUID, imageIds, metadataProvider);
|
|
12905
12891
|
}
|
|
12892
|
+
/**
|
|
12893
|
+
* getImageIdOfSourceImagebyGeometry - Returns the Cornerstone imageId of the source image.
|
|
12894
|
+
*
|
|
12895
|
+
* @param {String} ReferencedSeriesInstanceUID Referenced series of the source image.
|
|
12896
|
+
* @param {String} FrameOfReferenceUID Frame of reference.
|
|
12897
|
+
* @param {Object} PerFrameFunctionalGroup Sequence describing segmentation reference attributes per frame.
|
|
12898
|
+
* @param {String[]} imageIds A list of imageIds.
|
|
12899
|
+
* @param {Float} tolerance The tolerance parameter
|
|
12900
|
+
*
|
|
12901
|
+
* @return {String} The corresponding imageId.
|
|
12902
|
+
*/
|
|
12903
|
+
|
|
12904
|
+
|
|
12905
|
+
function getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, tolerance) {
|
|
12906
|
+
if (ReferencedSeriesInstanceUID === undefined || PerFrameFunctionalGroup.PlanePositionSequence === undefined || PerFrameFunctionalGroup.PlanePositionSequence[0] === undefined || PerFrameFunctionalGroup.PlanePositionSequence[0].ImagePositionPatient === undefined) {
|
|
12907
|
+
return undefined;
|
|
12908
|
+
}
|
|
12909
|
+
|
|
12910
|
+
for (var imageIdsIndexc = 0; imageIdsIndexc < imageIds.length; ++imageIdsIndexc) {
|
|
12911
|
+
var sourceImageMetadata = cornerstone.metaData.get("instance", imageIds[imageIdsIndexc]);
|
|
12912
|
+
|
|
12913
|
+
if (sourceImageMetadata === undefined || sourceImageMetadata.ImagePositionPatient === undefined || sourceImageMetadata.FrameOfReferenceUID !== FrameOfReferenceUID || sourceImageMetadata.SeriesInstanceUID !== ReferencedSeriesInstanceUID) {
|
|
12914
|
+
continue;
|
|
12915
|
+
}
|
|
12916
|
+
|
|
12917
|
+
if (compareArrays(PerFrameFunctionalGroup.PlanePositionSequence[0].ImagePositionPatient, sourceImageMetadata.ImagePositionPatient, tolerance)) {
|
|
12918
|
+
return imageIds[imageIdsIndexc];
|
|
12919
|
+
}
|
|
12920
|
+
}
|
|
12921
|
+
}
|
|
12906
12922
|
/**
|
|
12907
12923
|
* getImageIdOfReferencedSingleFramedSOPInstance - Returns the imageId
|
|
12908
12924
|
* corresponding to the specified sopInstanceUid for single-frame images.
|
|
@@ -13037,8 +13053,8 @@ function compareArrays(array1, array2, tolerance) {
|
|
|
13037
13053
|
return false;
|
|
13038
13054
|
}
|
|
13039
13055
|
|
|
13040
|
-
for (var
|
|
13041
|
-
if (!nearlyEqual(array1[
|
|
13056
|
+
for (var _i9 = 0; _i9 < array1.length; ++_i9) {
|
|
13057
|
+
if (!nearlyEqual(array1[_i9], array2[_i9], tolerance)) {
|
|
13042
13058
|
return false;
|
|
13043
13059
|
}
|
|
13044
13060
|
}
|