GDCM图像数据不正确

时间:2015-08-10 13:10:04

标签: c# dicom gdcm

我正在使用gdcm(nuget gdcm-sharp 2.4.4)库从* .dcm文件中获取图像和患者数据。一切都很好用光度解释MONOCHROME2的文件,但后来我得到了一些MONOCHROME1的文件,其中约30%有一个奇怪的错误:图像在对角线“切片”,我找不到原因。 样本链接:incorrect imagecorrect image

每行像素都有行号的偏移...容易纠正,但我不知道哪个文件需要更正。

问题是:如何判断需要更正的文件,dcm标签是否相同,.dcm文件中唯一不同的是图像尺寸和像素数据...

还有一件事......任何其他软件我试图查看这些图像正确渲染它们。

显示已完成内容的一些代码

        $bookRes = $mdb2->query(("SELECT * FROM book WHERE (".join(' OR ', $sqlParams).") $categorySQL ORDER BY title"), $sqlValues);
        while ($row = $bookRes->fetchRow()) {
            $row['type'] = 'book';
            $booksPossibles[] = $row;
        }

1 个答案:

答案 0 :(得分:1)

只要查看您提供的好与坏图像: 好的是1290 x 1249而坏的是1195 x 1193

由于我使用了Windows位图已经有一段时间了,但我几乎可以肯定它们是逐行填充的(不确定它是2字节,4字节(最可能)还是任何对齐),但是给出了例如,99%肯定发生了什么。

而不是整个缓冲区的单个Marshal.Copy,你需要逐行(只是我的伪代码):

Foreach row:
   Marshal.Copy(buff + row_number * DicomImageRowLength, 0, wb.BackBuffer + row_number * wb.BackBufferStride, DicomImageRowLength);

如果Marshal.Copy需要将buff作为第一个参数:

Foreach row:
   Marshal.Copy(buff, row_number * DicomImageRowLength, wb.BackBuffer + row_number * wb.BackBufferStride, DicomImageRowLength);

如果你为每个案例逐行复制,希望这适用于所有图像......

我认为你可以通过查看wb.BackBuffer.Size并将它与两种情况下的wb.PixelWidth,wb.PixelHeight和wb.BackBufferStride进行比较来验证这种情况。

相关问题