Xtk: не удается отобразить карту меток

#javascript #webgl #xtk #medical

#javascript #webgl #xtk #Медицина

Вопрос:

Я немного изменил демонстрацию # 11, чтобы загружать свои изображения вместо демонстрационных.

Я могу нормально загрузить свое МРТ-изображение, см. Демонстрацию. Это также работает, если я загружаю свою карту меток в качестве основного тома.

 window.onload = function() {
    // create and initialize a 3D renderer
    var r = new X.renderer3D();
    r.init();

    // create a X.volume
    var volume = new X.volume();

    // Attach the single-file dicom in .NRRD format
    // this works with gzip/gz/raw encoded NRRD files but XTK also supports other
    // formats like MGH/MGZ
    volume.file = '1123_N3.nii.gz';

    // we also attach a label map to show segmentations on a slice-by-slice base
    // volume.labelmap.file = '1123_seg.nii.gz';

    // add the volume
    r.add(volume);

    // the onShowtime method gets executed after all files were fully loaded and just before the first rendering attempt
    r.onShowtime = function() {
        //
        // The GUI panel
        //
        // (we need to create this during onShowtime(..) since we do not know the
        // volume dimensions before the loading was completed)
        var gui = new dat.GUI();

        // the following configures the gui for interacting with the X.volume
        var volumegui = gui.addFolder('Volume');

        // now we can configure controllers which switch between slicing and volume rendering
        var vrController = volumegui.add(volume, 'volumeRendering');

        // configure the volume rendering opacity
        var opacityController = volumegui.add(volume, 'opacity', 0, 1).listen();

        // and the threshold in the min..max range
        var lowerThresholdController = volumegui.add(volume, 'lowerThreshold', volume.min, volume.max);
        var upperThresholdController = volumegui.add(volume, 'upperThreshold', volume.min, volume.max);

        // the indexX,Y,Z are the currently displayed slice indices in the range [0 - (dimensions-1)]
        var sliceXController = volumegui.add(volume, 'indexX', 0, volume.range[0] - 1);
        var sliceYController = volumegui.add(volume, 'indexY', 0, volume.range[1] - 1);
        var sliceZController = volumegui.add(volume, 'indexZ', 0, volume.range[2] - 1);
        volumegui.open();

        // and this configures the gui for interacting with the label map overlay
        var labelmapgui = gui.addFolder('Label Map');
        var labelMapVisibleController = labelmapgui.add(volume.labelmap, 'visible');
        var labelMapOpacityController = labelmapgui.add(volume.labelmap, 'opacity', 0, 1);
        labelmapgui.open();

    };

    // adjust the camera position a little bit, just for visualization purposes
    r.camera.position = [120, 80, 160];

    // showtime! this triggers the loading of the volume and executes r.onShowtime() once done
    r.render();
};
  

Однако, если я добавлю карту меток в свой том volume.labelmap.file = '1123_seg.nii.gz'; , загрузка завершится неудачно, и том никогда не отображается, см. Сломанную демонстрацию. Единственная ошибка в консоли заключается в следующем:

Ошибка типа: например, c[0].c[Math.floor(…)] не определено

Есть идеи относительно того, что может быть не так? Как я должен отлаживать такие ошибки?

Комментарии:

1. Я получаю сообщение об ошибке: Uncaught TypeError: Cannot read property 'C' of undefined в консоли.

2. Приведенные вами ссылки не работают для меня (страницы никогда не загружаются)

3. @Fresh: demo.html работает, но вам нужно набраться терпения, потому что вы загружаете 3D-том с моего сервера. На моем компьютере он загружается примерно за десять секунд, но если вы живете далеко, я полагаю, это может занять больше времени.

4. Я получаю то же самое, что и @reCAPTCHA

5. Вы тестировали это с какими-либо другими файлами? В данный момент я тоже играю с этим материалом, и некоторые файлы, похоже, просто не загружаются, в то время как другие загружаются отлично. К сожалению, не разобрался с шаблоном…

Ответ №1:

Библиотеки Javascript, подобные этой, обычно уменьшаются для готовых к производству версий. Отладить сокращенный код javascript практически невозможно, но вы можете увидеть одно из имен методов в стеке вызовов .parse , что сразу указывает на то, что у него возникла проблема с анализом вашего файла labelmap .

Большинство библиотек javascript также будут включать версию -debug, которая не уменьшена. Кажется, я не могу найти ее для xtk, но вот процесс создания отладочной версии для себя:

  1. Клонировать последний проект xtk:

    git clone https://github.com/xtk/X.git

  2. Обновить закрытие Google (источник не включен):

    клон cd X / lib /
    git https://github.com/google/closure-library
    закрытие mv-библиотеки google-закрытие-библиотека

  3. Я создал demo.html файл в каталоге X, но вы, вероятно, можете поместить его куда угодно и настроить следующим образом:

    <script src="lib/google-closure-library/closure/goog/base.js"></script>
    <script src="xtk-deps.js"></script>
    <script>
    goog.require("X");
    goog.require("X.renderer3D");
    </script>

    <script type="text/javascript" src="demo.js"></script>

Теперь вы можете отлаживать, и вы должны увидеть свою ошибку:

 Uncaught TypeError: Cannot read property '_texture' of undefined parser.js:1205
X.parser.reslice parser.js:1205
X.parserNII.parse parserNII.js:258
(anonymous function)
  

Отсюда вы должны быть в состоянии выследить вашу проблему. Похоже, текстура отсутствует.