【问题标题】:How to fit two images into one image如何将两张图片合并为一张图片
【发布时间】:2022-01-19 09:01:45
【问题描述】:

我正在做一个自己融合两个 DICOM 图像的项目。

图片 1 (168x168) Image 2 (512x512) 的图片合并后,两张图片完全不匹配。

我认为合并脚本没有问题,但是 如果您认为合并代码有问题,您可以索取。

图片 2 (512x512)

图片 1 (168x168)

升迁完成 图片 1 (168x168) => 图片 1 (512x512)图片

融合结果

图片的红色部分应与灰色部分匹配。

如果仔细看图片,可以看到比例略小,上下左右不完全匹配。

问题(我猜)

  1. 从168变为512时,小数点相乘,小点的像素值丢失。

  2. 由于 512x512 Image 1 没有固定在中心,如果我增加 scale 并且不给 padding 值,它将不适合。

这是调整大小的代码

public static Bitmap resizeImage(Bitmap image, int width, int height)
        {
            var destinationRect = new Rectangle(0, 0, width, height);
            var destinationImage = new Bitmap(width, height);

            destinationImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

            using (var graphics = Graphics.FromImage(destinationImage))
            {
                graphics.CompositingMode = CompositingMode.SourceCopy;
                graphics.CompositingQuality = CompositingQuality.HighQuality;

                using (var wrapMode = new ImageAttributes())
                {
                    wrapMode.SetWrapMode(WrapMode.TileFlipXY);
                    graphics.DrawImage(image, destinationRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
                }
            }

            return destinationImage;
        }

图片 2

图片 1

【问题讨论】:

  • 我现在的计划是获取整个像素的中点或以编程方式指定一个矩形后,我正在考虑根据指定矩形的中点增加比例值。但我无法弄清楚如何在代码中实现它......
  • 您有理由相信图像应该完全匹配吗?如果图像是用不同的机器或在不同的时间拍摄的,那么人的位置不太可能完全相同。
  • @JonasH 这几张图我是从同一台机器上拉出来的 其实照片的位置 Location 可能有mm的差异,但是这样的误差是可以接受的
  • 我是唯一一个只能在帖子中看到一张图片的人吗?该问题涉及多个图像;向我们展示所有图像(输入和输出)是不是很明智?
  • 您确定图像具有相同的视野吗? IE。体素(0,0)确实与体素(0,0)匹配,体素(167,167)与(体素511,511)匹配吗?如果有,您应该检查相应的 DICOM 数据。例如,典型的 PET 体素为 4x4 mm^2,总 FoV 为 672x672mm,CT 体素可以为 0.76x0.76 mm^2,总 FoV 为 389x389mm。您应该根据体素大小进行匹配,而不是根据图像分辨率。

标签: c# image image-processing imaging medical-imaging


【解决方案1】:

谢谢你的nucleaR

我做

  1. ImageOrientationPatient 值是裁剪位置的 XYZ 值
  2. PixelSpacing 这是此体素的数据值。一个像素的实际大小可以由此计算出来。
  1. 在调整图像大小之前,由于 PT 坐标较大,因此必须从 pt 坐标中切割出相应的像素。如何计算裁剪这个像素很重要
  2. 如果剪切像素,则必须剪切 168,因为它将基于 512 像素。
Value=pixelSpacingPT* 168 - pixelSpacingCT *512  

cutPixel=Value/pixelSpacingPT;

要裁剪的像素现在是 20 像素宽 我发现它的高度是 20 像素。

【讨论】:

    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2016-03-31
    • 2017-09-18
    • 1970-01-01
    相关资源
    最近更新 更多