Repository navigation
Commit 12b54f7
committed
fix(dicom): match the volume buffer to the decoded pixel values
The volume buffer's element type was derived from the first instance's
stored range put through its rescale, floored and ceiled to integers. ITK
applies the rescale while decoding and picks the output type from it: an
integral slope and intercept keep an integer type, anything fractional
produces float64. A fractional rescale whose endpoints landed on integers
got an integer buffer, and every fraction was dropped on write. An integral
range past 32 bits threw at allocation. A later instance decoding outside
the first instance's type wrote through TypedArray.set with no error,
wrapping every value the type cannot hold.
Allocate for the union of every instance's declared range, choosing
Float64Array whenever the slope or intercept is fractional or the range is
not a safe 32-bit integer range, and the narrowest integer type otherwise.
Ordinary CT and MR allocation is unchanged. An instance whose tags give no
finite range is left out of the union and judged on its decoded values.
Check each chunk after it decodes and before it is written. Its actual
range must fit the buffer's element type, and float output bound for an
integer buffer must be whole numbers. Both rejections name the file, the
values it decoded to, and the buffer it has to fit. Only decoder output
that disagrees with the tags can fail these checks.
Reproduced with a public DSC perfusion series whose slope is
112067.85375182 over 16-bit unsigned storage.1 parent f482c6d commit 12b54f7
7 files changed
Lines changed: 888 additions & 59 deletions
File tree
- src
- core/streaming
- __tests__
- utils
- __tests__
- tests/specs
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
9 | 13 | | |
10 | | - | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
11 | 20 | | |
12 | 21 | | |
13 | 22 | | |
| |||
71 | 80 | | |
72 | 81 | | |
73 | 82 | | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
74 | 99 | | |
75 | 100 | | |
76 | 101 | | |
77 | 102 | | |
| 103 | + | |
| 104 | + | |
78 | 105 | | |
79 | 106 | | |
80 | 107 | | |
| |||
85 | 112 | | |
86 | 113 | | |
87 | 114 | | |
88 | | - | |
| 115 | + | |
89 | 116 | | |
90 | 117 | | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
91 | 121 | | |
92 | 122 | | |
93 | 123 | | |
| |||
179 | 209 | | |
180 | 210 | | |
181 | 211 | | |
182 | | - | |
| 212 | + | |
183 | 213 | | |
184 | 214 | | |
185 | 215 | | |
| |||
385 | 415 | | |
386 | 416 | | |
387 | 417 | | |
388 | | - | |
389 | | - | |
390 | | - | |
391 | | - | |
392 | | - | |
| 418 | + | |
| 419 | + | |
393 | 420 | | |
394 | 421 | | |
395 | 422 | | |
| |||
405 | 432 | | |
406 | 433 | | |
407 | 434 | | |
| 435 | + | |
408 | 436 | | |
409 | 437 | | |
410 | | - | |
411 | 438 | | |
412 | | - | |
413 | | - | |
414 | | - | |
| 439 | + | |
| 440 | + | |
415 | 441 | | |
416 | 442 | | |
417 | 443 | | |
| |||
420 | 446 | | |
421 | 447 | | |
422 | 448 | | |
423 | | - | |
| 449 | + | |
424 | 450 | | |
425 | 451 | | |
426 | 452 | | |
| |||
431 | 457 | | |
432 | 458 | | |
433 | 459 | | |
434 | | - | |
| 460 | + | |
435 | 461 | | |
436 | 462 | | |
437 | 463 | | |
438 | 464 | | |
439 | | - | |
440 | | - | |
441 | | - | |
442 | | - | |
443 | | - | |
444 | | - | |
445 | | - | |
446 | | - | |
447 | 465 | | |
448 | | - | |
| 466 | + | |
449 | 467 | | |
450 | 468 | | |
451 | 469 | | |
452 | | - | |
| 470 | + | |
453 | 471 | | |
454 | 472 | | |
| 473 | + | |
455 | 474 | | |
456 | | - | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
457 | 502 | | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
458 | 510 | | |
459 | 511 | | |
460 | 512 | | |
461 | | - | |
| 513 | + | |
462 | 514 | | |
463 | 515 | | |
464 | 516 | | |
| |||
0 commit comments