private static LutValueRange SyncMinMaxValues(IComposableLut[] luts, int bitsStored, bool isSigned) { var range = new LutValueRange(); luts[0].MinInputValue = range.MinInputValue = DicomPixelData.GetMinPixelValue(bitsStored, isSigned); luts[0].MaxInputValue = range.MaxInputValue = DicomPixelData.GetMaxPixelValue(bitsStored, isSigned); var lutCount = luts.Length; for (var j = 1; j < lutCount; ++j) { luts[j].MinInputValue = luts[j - 1].MinOutputValue; luts[j].MaxInputValue = luts[j - 1].MaxOutputValue; } range.MinOutputValue = (int)Math.Round(luts[lutCount - 1].MinOutputValue); range.MaxOutputValue = (int)Math.Round(luts[lutCount - 1].MaxOutputValue); return(range); }
private static LutValueRange SyncMinMaxValues(IComposableLut[] luts, int bitsStored, bool isSigned) { var range = new LutValueRange(); luts[0].MinInputValue = range.MinInputValue = DicomPixelData.GetMinPixelValue(bitsStored, isSigned); luts[0].MaxInputValue = range.MaxInputValue = DicomPixelData.GetMaxPixelValue(bitsStored, isSigned); var lutCount = luts.Length; for (var j = 1; j < lutCount; ++j) { luts[j].MinInputValue = luts[j - 1].MinOutputValue; luts[j].MaxInputValue = luts[j - 1].MaxOutputValue; } range.MinOutputValue = (int) Math.Round(luts[lutCount - 1].MinOutputValue); range.MaxOutputValue = (int) Math.Round(luts[lutCount - 1].MaxOutputValue); return range; }
private static void AssertComposedLut(IComposableLut[] luts, ComposedLut composedLut, LutValueRange lutRange) { Assert.AreEqual(lutRange.MinInputValue, composedLut.MinInputValue, "MinInputValue"); Assert.AreEqual(lutRange.MaxInputValue, composedLut.MaxInputValue, "MaxInputValue"); Assert.AreEqual(lutRange.MinOutputValue, composedLut.MinOutputValue, "MinOutputValue"); Assert.AreEqual(lutRange.MaxOutputValue, composedLut.MaxOutputValue, "MaxOutputValue"); var data = composedLut.Data; Assert.IsNotNull(data, "Data"); var lutCount = luts.Length; for (var i = -65536; i < 65535; ++i) { double value = i; for (var j = 0; j < lutCount; ++j) value = luts[j][value]; var expectedValue = (int) Math.Round(value); Assert.AreEqual(expectedValue, composedLut[i], "LUT @{0}", i); if (i >= lutRange.MinInputValue && i <= lutRange.MaxInputValue) { Assert.AreEqual(expectedValue, data[i - lutRange.MinInputValue], "Data @{0} (Value {1})", i - lutRange.MinInputValue, i); } } }
private static void AssertComposedLut(IComposableLut[] luts, ComposedLut composedLut, LutValueRange lutRange) { Assert.AreEqual(lutRange.MinInputValue, composedLut.MinInputValue, "MinInputValue"); Assert.AreEqual(lutRange.MaxInputValue, composedLut.MaxInputValue, "MaxInputValue"); Assert.AreEqual(lutRange.MinOutputValue, composedLut.MinOutputValue, "MinOutputValue"); Assert.AreEqual(lutRange.MaxOutputValue, composedLut.MaxOutputValue, "MaxOutputValue"); var data = composedLut.Data; Assert.IsNotNull(data, "Data"); var lutCount = luts.Length; for (var i = -65536; i < 65535; ++i) { double value = i; for (var j = 0; j < lutCount; ++j) { value = luts[j][value]; } var expectedValue = (int)Math.Round(value); Assert.AreEqual(expectedValue, composedLut[i], "LUT @{0}", i); if (i >= lutRange.MinInputValue && i <= lutRange.MaxInputValue) { Assert.AreEqual(expectedValue, data[i - lutRange.MinInputValue], "Data @{0} (Value {1})", i - lutRange.MinInputValue, i); } } }