【问题标题】:How to Speed up Window Leveling (Brightness,contrast)如何加快窗户调平(亮度、对比度)
【发布时间】:2014-03-13 07:53:06
【问题描述】:
  pixelArr = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11..]  
    if (pixelArr != null)
            {
                for (var i = 0, n = pixelArr.length; i < n; i++)
                {
                    pix = pixelArr[i];
                    pix = ApplyWL(pix, imagewc, imageww);
                    pix = lutArr[pix];

                    // var red = (pix & 0x00ff0000) >> 16;
                    v = i * 4;
                    imagedata[v] = pix & 0xff;
                    imagedata[v + 1] = (pix >>> 8) & 0xff;
                    imagedata[v + 2] = (pix >>> 16) & 0xff;
                    imagedata[v + 3] = 255;
                }
                //  offscreenCtx.imageSmoothingEnabled = true;
                offscreenCtx.putImageData(g, 0, 0);
            }
function ApplyWL(value, _valwindowCenter, _valwindowWidth)
        {
            Recalculate(_valwindowCenter, _valwindowWidth);
            if (value <= _windowStart)
                value = _minimumOutputValue;
            else if (value > _windowEnd)
                value = _maximumOutputValue;
            else
            {
                value = Math.round((((value - _windowCenterMin05) / _windowWidthMin1) + 0.5) * 255.0);
            }
            return value;
        }

        var _minimumOutputValue = 0;
        var _maximumOutputValue = 255;
        function Recalculate(_valwindowCenter, _valwindowWidth)
        {
            if (!_valid)
            {
                _windowCenterMin05 = _valwindowCenter - 0.5;
                _windowWidthMin1 = _valwindowWidth - 1;
                _windowWidthDiv2 = _windowWidthMin1 / 2;
                _windowStart = (_windowCenterMin05 - _windowWidthDiv2);
                _windowEnd = (_windowCenterMin05 + _windowWidthDiv2);
                _valid = true;
            }
        }


Width<input id="text1" type="text" />
    center<input id="text2" type="text" />
    <input id="Button1" type="button" value="Apply" onclick="ApplyWLCust();" />
    </br> time required<input id="text3" type="text" />
    <canvas style="height: 500px; width: 500px; display1: none; background-color: black;
                border: 1px solid red;" id="offscreenCanvas">

我已在 Canvas Medical 图像 (CR) 上应用窗口调平。 这样我就从 C# 组件中获得了一个像素数组。 点击按钮我有调用函数 ApplyWLCust(); 在此功能中,所有过程都完成了,结果完美。 对于窗户平整使用位移 而位移大约需要 585 毫秒。 我必须减少这个时间我该怎么办 任何解决方案 请提出建议。

【问题讨论】:

  • 首先不要使用 jQuery 来迭代循环,而是使用普通的 for()。第二:使用类型化数组而不是数组。
  • 你将如何用一些代码来详细说明
  • 当您想要执行像素级操作时,您应该考虑将 WebGL 与像素着色器一起使用。这样你就可以使用硬件加速了。
  • 您已经尝试减少浪费在 recalcuate() 方法上的时间,但即便如此,它也不应该在内部循环中。窗口/级别不会更改每个像素,因此将该代码移出内部循环。代码的更大问题是浮点值的使用(可能默认为 double 甚至更慢)和对 math.round() 的缓慢调用。将数学改为整数并减少内部循环中不必要的代码。
  • 您正在尝试重新计算用于处理像素的 for 循环内的窗口边界。您尝试通过添加一个名为“valid”的布尔值来减少浪费的时间。此代码不应在该循环内。输入代码后计算一次值。对“重新计算”的调用不应在主循环内;调用一个方法并测试一个布尔值是在不必要地浪费时间。

标签: javascript json html5-canvas pixels dicom


【解决方案1】:

我会考虑并行执行。它至少应该将执行时间缩短一半。

查看这个库:http://adambom.github.io/parallel.js/


我假设你有很大的数组。 给每个并行执行数组和索引 fromto。 例如:

  • ParallelExecution1 将处理从 0 到 100 的元素
  • ParallelExecution2 将处理从 101 到 200 的元素
  • ParallelExecution3 将处理从 201 到 300 的元素
  • ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 2021-11-24
    相关资源
    最近更新 更多