Масштабирование изображений в JavaScript и алгоритм HTML5 для пиксельных данных приводит к грубым изображениям? - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь использовать синтаксический анализатор 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. Кто-нибудь может указать мне направление, почему это так?

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 01 марта 2019

Похоже, вы используете старую версию библиотеки Hermite-resize, у вас есть операции с "0.5", но оригинальная библиотека не имеет ничего похожего.

После исправления функции resample_hermite (в основном удаление 0.5, но я рекомендуюиспользуя последний код из github), результаты намного лучше.

...