使用meshgrid进行图像变换的边界条件

时间:2012-05-18 09:18:56

标签: image-processing numpy

我使用meshgrid转换了图像,但新坐标部分超出了原始图像的范围,导致转换失败。

首先我使用了剪辑

...
tX = numpy.clip(tX.astype(numpy.int),0,image.w)
tY = numpy.clip(tY.astype(numpy.int),0,image.h)
result image([tX,tY])

导致效果类似于“最近”的边界条件。

我希望所有外部像素都是黑色的。我以为我可以通过在meshgrid上使用布尔数组来实现这一点,但我不知道如何正确地将布尔数组应用于meshgrid。

tXbool = numpy.abs(tX) < image.w
tXbool.shape
(850, 1280)
tX[tXbool].shape
(193180,)

2 个答案:

答案 0 :(得分:1)

您应始终将逆变换应用于目标图像中的像素,并使用此变换查找源图像中的(插值)颜色/值。否则你最终会遇到漏洞和量化问题。这是一个参考,或在任何图像处理教科书中查找图像变换/扭曲:http://www.cs.clemson.edu/~dhouse/courses/405/notes/image-warps.pdf

答案 1 :(得分:0)

好的,那就是我最终如何做到的:

tXbool = (0 < tX) & (tX  < image.w )
tybool = (0 < tY) & (tY  < image.h )
outliers = tXbool & tybool

mask = where(outliers,1,0)
mask4channels = dstack([mask,mask,mask])
image = image*mask4channels