探索了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));