用于像素数据的javascript和HTML5算法中的图像缩放导致粗糙图像?

问题描述 投票:1回答:1

我正在尝试使用Cornerstone DICOM解析器(https://github.com/cornerstonejs/dicomParser)使用javascript和HTML5画布提取用于CT扫描的pixeldata。我需要能够减小所产生的像素数据的大小。使用hermite-resize算法:https://github.com/viliusle/Hermite-resize

请参阅我的以下概念证明,其中显示了上腹部的轴向切片:http://castlemountain.dk/dicomParser/index2.html

如您所见,生成了两种类型的压缩图像(图像2和图像3),其中显然图像2比图像3更粗糙(特别是在观察肋骨时)。我使用相同的压缩算法但是当从绘制未压缩的像素数据(图像1)获取像素数据时,图像质量对于图像3更好,我似乎无法弄清楚为什么会这样。 HTML5画布相关?

示例如下:

首先,我提取512x512像素CT图像的CT像素数据,随后将其转换为具有CT窗口/水平的0-255灰度值(方法convertToGreylevel)。然后,使用此灰度像素值数组为HMLT5画布生成imageData对象(imgData),并将其显示为未压缩的图像(图像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);

用于从绘制到画布的第一个512x512图像中获取imageData。提取画布中的pixeldata并用于生成pixeldata数组,该数组使用以下符号进行压缩:

var outputData = resample_hermite(inputData, 512, 512,Math.round(512/compression2), Math.round(512/compression2));

这个得到的像素数据阵列(256x256像素)用于生成HTML5图像对象,如图所示(图3):

ctx.putImageData(img2, 512, Math.round(512/compression2));

图像2肯定比压缩图像3更粗糙(参见白色肋骨)。任何人都可以指向我的方向为什么?

最好的祝福

javascript html5 image-processing html5-canvas
1个回答
0
投票

看起来你正在使用旧的Hermite-resize lib版本,你有“0.5”的操作,但原始的lib没有任何类似的东西。

修复resample_hermite函数(基本上删除0.5,但我建议使用github的最新代码)后,结果要好得多。

© www.soinside.com 2019 - 2024. All rights reserved.