探索了Heike对我的previous question about anamorphic transformations的出色回答之后,我最终希望看到一张完全由内而外的图像。

这个想法是,与其像变形拉纸一样,不如通过变形变换来拉伸图像,您实际上可以将纸“内翻”。内部的“像素”将被拉出到边缘(严重变形/拉伸),而外部的像素将向内向中心挤压(严重收缩)。

我无法说明它,但是尝试描述它的另一种方式是在这张图片中:



因此,像素的红色越多,它们越变换到边缘(反之亦然)。

我尝试了FindGeometricTransform,但似乎没有取得成功。



用谷歌搜索并不是一件容易的事,而且我还没有在Mathematica中找到任何线索,表明这种破坏性转换是可能的。有点像是2.5D重投影。

你怎么看?可能吗?

编辑

因此,感谢您的出色回答,我现在可以正确说明我的问题:

这是莱昂纳多(Leonardo)著名的Anom Asil,这是对可怜的丽莎(Lisa)进行由内而外的变换()的结果:



这是布拉格Orloj:



不久将有实际用途。

谢谢!

最佳答案

也许是这样的:

f[x_, y_] := {x, y} (1/Norm@{x, y} - 1);
GraphicsGrid[{{
       p = Rasterize[Graphics[ {Black, Disk[{0, 0}, 5],
                                Red,   Disk[{0, 0}, 3],
                                Blue,  Disk[{0, 0}, 2]}]],
       ImageTransformation[p, f[#[[1]], #[[2]]] &,
                           DataRange -> {{-1, 1}, {-1, 1}}]}},
       Frame -> All]




编辑

使用Heike的f函数是双射的,并且它本身是反函数:

f[x_, y_] := {x, y} (1/Norm[{x, y}, Infinity] - 1);
g[x_]:=ImageTransformation[x, f[#[[1]], #[[2]]] &,DataRange ->{{-1, 1}, {-1, 1}}]

GraphicsGrid[{{i, g@i, g@g@i}}, Frame -> All]




编辑

设置:

f[x_, y_, t_] := {x, y} ((1/Norm[{x, y}, Infinity] - 1 ) t + (1 - t));

09-06 15:45