Я пытаюсь использовать синтаксический анализатор Cornerstone DICOM (https://github.com/cornerstonejs/dicomParser) для извлечения пиксельных данных для КТ-сканирования с использованием javascript и HTML5 canvas. Мне нужно иметь возможность уменьшить размер получающихся пиксельных данных. Используетсяалгоритм изменения размера Эрмита: https://github.com/viliusle/Hermite-resize
Пожалуйста, ознакомьтесь с моим следующим доказательством концепции, показывающей осевой срез верхней части живота: http://castlemountain.dk/dicomParser/index2.html
Как вы можете видеть два типа сжатых изображенийсоздаются (изображение 2 и изображение 3), где очевидно, что изображение 2 является более грубым, чем изображение 3 (особенно при взгляде на ребра). Я использую тот же алгоритм сжатия, но при получении пиксельных данных при рисовании несжатых пиксельных данных (изображение 1)) тогда качество изображения лучше для изображения 3, и я не могу понять, почему это так. HTML5 относится к холсту?
Пример таков:
Сначала я извлекаюПиксельные данные CT для изображения CT 512x512 px, которое впоследствии преобразуется в 0-255 значений шкалы серого с помощью окна / уровня CT (метод convertToGreyleVel).Этот массив значений пикселей в градациях серого затем используется для создания объекта imageData (imgData) для холста HMLT5, и это отображается в виде несжатого изображения (Изображение 1):
ctx.putImageData(imgData,0,0);
Следующая функция
pixelData2 = resample_hermite(pixelData[slices], 512, 512,
Math.round(512/compression2), Math.round(512/compression2));
Используется для генерации сжатых пиксельных данных (256x256 пикселей), которые используются для генерации объекта imageData, который показан (изображение 2):
ctx.putImageData(imgData2,512,0);
Затем
var imgInput = ctx.getImageData(0, 0, 512, 512);
Используется для получения imageData из первого изображения 512x512, нарисованного на холсте.Пиксельные данные из холста извлекаются и используются для генерации массива пиксельных данных, которые сжимаются с помощью:
var outputData = resample_hermite(inputData, 512, 512,Math.round(512/compression2), Math.round(512/compression2));
Этот результирующий массив пиксельных данных (256x256 пикселей) используется для генерации объекта изображения HMTL5, который показан (Изображение3):
ctx.putImageData(img2, 512, Math.round(512/compression2));
Изображение 2 определенно более грубое (см. Белые ребра), чем сжатое изображение 3. Кто-нибудь может указать мне направление, почему это так?
С наилучшими пожеланиями