如何将两张图片拼成一张图片
How to fit two images into one image
我正在做一个自己融合两个DICOM图像的项目。
图片 1 (168x168)
当图像2(512x512)的图像合并时,两个图像根本不匹配。
我认为合并脚本没有问题,但是
如果您认为合并代码有问题,可以提出要求。
图片 2 (512x512)
图片 1 (168x168)
放大完成图片1 (168x168) => 图片1 (512x512)图片
融合结果
图片的红色部分应该与灰色部分相匹配。
仔细看图,可以看到比例略小,上下左右不完全吻合。
问题(我猜的)
从168变为512时,小数点相乘,小点像素值丢失
由于512x512图片1没有固定在中心,如果我加大比例不给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
谢谢你的 nucleaR
我做
- ImageOrientationPatient 值是裁剪位置的 XYZ 值
- PixelSpacing 这是这个体素的数据值。一个像素的实际大小可以由此计算出来
- 在调整图片大小之前,由于pt坐标比较大,所以需要从pt坐标中裁剪出对应的像素点。如何计算裁剪这个像素很重要
- 如果裁切像素,则必须裁切168,因为它将以512像素为基础。
Value=pixelSpacingPT* 168 - pixelSpacingCT *512
cutPixel=Value/pixelSpacingPT;
要裁剪的像素现在是 20 像素宽
我发现它的高度是 20 像素。
我正在做一个自己融合两个DICOM图像的项目。
图片 1 (168x168) 当图像2(512x512)的图像合并时,两个图像根本不匹配。
我认为合并脚本没有问题,但是 如果您认为合并代码有问题,可以提出要求。
图片 2 (512x512)
图片 1 (168x168)
放大完成图片1 (168x168) => 图片1 (512x512)图片
融合结果
图片的红色部分应该与灰色部分相匹配。
仔细看图,可以看到比例略小,上下左右不完全吻合。
问题(我猜的)
从168变为512时,小数点相乘,小点像素值丢失
由于512x512图片1没有固定在中心,如果我加大比例不给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
谢谢你的 nucleaR
我做
- ImageOrientationPatient 值是裁剪位置的 XYZ 值
- PixelSpacing 这是这个体素的数据值。一个像素的实际大小可以由此计算出来
- 在调整图片大小之前,由于pt坐标比较大,所以需要从pt坐标中裁剪出对应的像素点。如何计算裁剪这个像素很重要
- 如果裁切像素,则必须裁切168,因为它将以512像素为基础。
Value=pixelSpacingPT* 168 - pixelSpacingCT *512
cutPixel=Value/pixelSpacingPT;
要裁剪的像素现在是 20 像素宽 我发现它的高度是 20 像素。