我试图理解Mathematica中的一些代码,但不熟悉它的语法。我好像不能把我的脑子绕到逻辑上来。在
anamorph3[img_, angle_: 270 Degree, imgWidth_: 512] :=
Module[{data, f, matrix, dim, rOuter, rInner = 1.},
dim = ImageDimensions[img];
rOuter = rInner (1 + angle #2/#1 & @@ dim);
data = Table[
ListInterpolation[#[[All, All, i]],
{{rOuter, rInner}, {-angle/2, angle/2}}], {i, 3}] &@ImageData[img];
f[i_, j_] := If[Abs[j] <= angle/2 && rInner <= i <= rOuter,
Through[data[i, j]], {1., 1., 1.}];
Image@Table[f[Sqrt[i^2 + j^2], ArcTan[i, -j]],
{i, -rOuter, rOuter, 2 rOuter/(imgWidth - 1)},
{j, -rOuter, rOuter, 2 rOuter/(imgWidth - 1)}]]
关于这个代码的更多细节可以在这里找到
How to make ImageTransformation produce an anamorphic version of image。在
如果有人能为此编写伪代码/python代码,那就太好了。在
我想结果会是这样的:
这里
ImageDimensions
返回图像的尺寸,ImageData
返回一个三维矩阵,其中每个像素的每个颜色通道的颜色数据都标准化为0-1,并且ListInterpolate
创建一个函数,在指定的x和y坐标范围内的一组数字之间进行插值。Image
获取3D矩阵并将其转换为RGB图像。在相关问题 更多 >
编程相关推荐