Matlab 多边形到高分辨率图像的几何变换

Matlab 多边形到高分辨率图像的几何变换,matlab,polygon,transformation,spatial,roi,Matlab,Polygon,Transformation,Spatial,Roi,我正在尝试将感兴趣区域(ROI)从低分辨率图像(256x256)正确调整大小并重新定位到高分辨率图像(512x512)。还应该提到的是,这两幅图像覆盖了不同的视野——低分辨率图像和高分辨率图像的视场分别为330mm x 330mm和180mm x 180mm 我可以支配的是: 256x256和512x512图像中的物理参考点(单位:mm),即参考点低分辨率=(-164.424,-194.462)和参考点高分辨率=(-94.3052,-110.923)。参考点位于其各自图像中的左上像素(1,1)

我正在尝试将感兴趣区域(ROI)从低分辨率图像(256x256)正确调整大小并重新定位到高分辨率图像(512x512)。还应该提到的是,这两幅图像覆盖了不同的视野——低分辨率图像和高分辨率图像的视场分别为330mm x 330mm和180mm x 180mm

我可以支配的是:

  • 256x256和512x512图像中的物理参考点(单位:mm),即参考点低分辨率=(-164.424,-194.462)和参考点高分辨率=(-94.3052,-110.923)。参考点位于其各自图像中的左上像素(1,1)中
  • 256x256图像中ROI的像素坐标(命名为pxX和pxY)。这些坐标相对于低分辨率图像的参考点定位,参考点_lowres=(-164.424,-194.462)
  • 256x256和512x512图像的像素间距,分别为0.7757像素/毫米和2.8444像素/毫米
如何重新缩放和重新定位ROI(二进制遮罩)以纠正512x512图像中的像素位置?非常感谢

尝试

% This gives correctly placed and scaled binary array in the 256x256 image 
mask_lowres = double(poly2mask(pxX, pxY, 256., 256.));
% Compute translational shift in pixel
mmShift = refpoint_lowres - refpoint_highres;
pxShift = abs(mmShift./pixspacing_highres)
% This produces a binary array that is only positioned correctly in the 
% 512x512 image, but it is not upscaled correctly...(?) 
mask_highres = double(poly2mask(pxX + pxShift(1), pxY + pxShift(2), 512., 
512.));

因此,相对于低分辨率图像,坐标是以像素为单位的
pxX
,和
pxY
。可以将这些坐标转换为真实坐标:

pxX_rw = pxX / 0.7757 - 164.424;
pxY_rw = pxY / 0.7757 - 194.462;
pxX_hr = (pxX_rw - 94.3052) * 2.8444;
pxY_hr = (pxY_rw - 110.923) * 2.8444;
接下来,可以将这些坐标转换为高分辨率坐标:

pxX_rw = pxX / 0.7757 - 164.424;
pxY_rw = pxY / 0.7757 - 194.462;
pxX_hr = (pxX_rw - 94.3052) * 2.8444;
pxY_hr = (pxY_rw - 110.923) * 2.8444;
由于原始坐标适合低分辨率图像,但高分辨率图像(在物理坐标中)比低分辨率图像小,因此这些新坐标可能不适合高分辨率图像。如果是这种情况,则裁剪多边形是一项非常重要的工作,它不能通过简单地将顶点移动到视野内来完成。MATLAB R2017b介绍了对象类型,您可以:


如果您有早期版本的MATLAB,最简单的解决方案可能是将视野放大以绘制多边形,然后将生成的图像裁剪到正确的大小。但这确实需要一些适当的计算才能正确。

您还需要进行缩放<代码>+pxShift移动坐标。现在将它们乘以一个比例因子,该比例因子可以解释像素间距的差异。我尝试将
pxX
pxY
与比例因子1.2891/0.3516=3.4666相乘,但随后超出了矩阵尺寸512x512。