Объединение AMI.js с объемной визуализацией XTK

В настоящее время я работаю над дипломной работой по отображению медицинских данных 3D в браузере. Поэтому я пишу приложение, которое может отображать изображения и сетки DICOM.

Насколько я вижу, объемный рендеринг DICOM лучше работает с XTK, чем с ami.js на данный момент. 3D-рендеринг в ami.js DICOM оказался не очень полезным (только макс. 12 кадров в секунду). Я попытался визуализировать DICOM так же, как в примере с объемным рендерингом в уроке 6.

Итак, мой вопрос:
Как я могу объединить две платформы, чтобы я мог использовать трехмерную визуализацию объема XTK для DICOM, но все другие функции из ami.js?
Или как мне использовать громкость рендеринга ami.js, чтобы получилось нормально?

1 ответ

Решение

Изменить: улучшение, предложенное в (2), было реализовано и доступно по адресу https://fnndsc.github.io/ami/

AMI и XTK используют разные методы для объемного рендеринга:

AMI поддерживает:

  • Raycasting
  • MIP

XTK поддерживает:

  • Texture основе

Я бы порекомендовал использовать только 1 фреймворк, в зависимости от ваших потребностей.

Вы видели объемный рендеринг для AMI: https://fnndsc.github.io/ami/

Многие методы могут быть использованы для повышения производительности:

  • (1) Сцена только для рендеринга при перемещении камеры
  • (2) Уменьшить соотношение пикселей при взаимодействии со сценой

Пример AMI VR реализует (1).

Для реализации (2):

Инициализируйте рендерер THREEJS с помощью setPixelRatio

threeD = document.getElementById('r3d');
renderer = new THREE.WebGLRenderer({
  alpha: true,
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(threeD.offsetWidth, threeD.offsetHeight);

Отредактируйте onStart() в одном месте:

// vrHelper.uniforms.uSteps.value = Math.floor(myStack.steps / 2);
// vrHelper.interpolation = 0;
renderer.setPixelRatio(.1 * window.devicePixelRatio);
renderer.setSize(threeD.offsetWidth, threeD.offsetHeight);

Редактировать onEnd () в 1 месте:

// vrHelper.uniforms.uSteps.value = myStack.steps;
// vrHelper.interpolation = myStack.interpolation;
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(threeD.offsetWidth, threeD.offsetHeight);

Редактировать onWheel() в 2 местах:

// vrHelper.uniforms.uSteps.value = Math.floor(myStack.steps / 2);
// vrHelper.interpolation = 0;
renderer.setPixelRatio(.1 * window.devicePixelRatio);
renderer.setSize(threeD.offsetWidth, threeD.offsetHeight);

а также

wheelTO = setTimeout(function() {
// vrHelper.uniforms.uSteps.value = myStack.steps;
// vrHelper.interpolation = myStack.interpolation;
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(threeD.offsetWidth, threeD.offsetHeight);

НТН,

Другие вопросы по тегам