将多边形几何变换为更高分辨率的图像

时间:2018-05-16 09:29:44

标签: matlab polygon transformation spatial roi

我正在尝试从低分辨率图像(256x256)正确调整ROI(感兴趣区域)并将其重新定位到更高分辨率的图像(512x512)。还应该提到的是,两个图像覆盖不同的视野 - 低分辨率图像和高分辨率图像分别具有330mm×330mm和180mm×180mm的FoV。

我能得到的是:

  • 256x256和512x512图像中的物理参考点(以mm为单位),即refpoint_lowres =( - 164.424,-194.462)和refpoint_highres =( - 94.3052,-110.923)。参考点位于它们各自图像中的左上像素(1,1)中。
  • 256x256图像中ROI的像素坐标(名为pxX和pxY)。这些坐标相对于较低分辨率图像的参考点定位,refpoint_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.));

1 个答案:

答案 0 :(得分:1)

因此,相对于低分辨率图像,您的坐标为pxXpxY。您可以将这些坐标转换为真实坐标:

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引入了polyshape对象类型,您可以intersect

bbox = polyshape([0 0 180 180] - 94.3052, [180 0 0 180] - 110.923);
poly = polyshape(pxX_rw, pxY_rw);
poly = intersect([poly bbox]);
pxX_rw = poly.Vertices(:,1);
pxY_rw = poly.Vertices(:,2);

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