2012-05-18 34 views
1

我使用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,) 

回答

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 
1

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

+0

这是一个很好的观点。注意这一点非常重要。 – Framester