图像的几何反转(png、jpg、bmp)

图像的几何反转(png、jpg、bmp)

是否可以在 LaTeX 中根据给定的参考圆反转图像(格式为 png、jpg、bmp)?我们可以变换单个像素吗(例如使用复杂的变换,如莫比乌斯变换)?

数学逆变换是欧氏平面的几何变换。在坐标几何中,如果参考圆是单位圆,且 P(x,y) 不是原点,则 P(x,y) 的像为 P'(\frac{x}{x^2+y^2},\frac{y}{x^2+y^2})。在复平面中,如果参考圆是单位圆,且 z 不是原点,则其像为 z'=\overline{1/z}。

(PS 如何过滤距离原点较远的点的图像?)

答案1

为什么不呢?

\documentclass[border=9,tikz]{standalone}
\begin{document}

\pgfmathdeclarefunction{fx}{2}{\pgfmathparse{25*(#1/10+3)/((#1/10+3)^2+(#2/10+0)^2)}}
\pgfmathdeclarefunction{fy}{2}{\pgfmathparse{25*(#2/10+0)/((#1/10+3)^2+(#2/10+0)^2)}}
\pgfmathdeclarefunction{fxx}{2}{\pgfmathparse{fx(#1+1,#2)-fx(#1,#2)}}
\pgfmathdeclarefunction{fxy}{2}{\pgfmathparse{fy(#1+1,#2)-fy(#1,#2)}}
\pgfmathdeclarefunction{fyx}{2}{\pgfmathparse{fx(#1,#2+1)-fx(#1,#2)}}
\pgfmathdeclarefunction{fyy}{2}{\pgfmathparse{fy(#1,#2+1)-fy(#1,#2)}}

\tikz{
    \path(-6,-5)(13,5);
    \draw circle(.05)circle(5)
        (3,0)node{\includegraphics[width=2cm]{lenna.png}};
    \foreach\i in{-10,...,9}{
        \foreach\j in{-10,...,9}{
            \pgfmathsetmacro\aa{fxx(\i,\j)}
            \pgfmathsetmacro\ab{fxy(\i,\j)}
            \pgfmathsetmacro\ba{fyx(\i,\j)}
            \pgfmathsetmacro\bb{fyy(\i,\j)}
            \pgfmathsetmacro\xx{fx (\i,\j)}
            \pgfmathsetmacro\yy{fy (\i,\j)}
            \pgflowlevelobj{
                \pgfsettransformentries{\aa}{\ab}{\ba}{\bb}{\xx cm}{\yy cm}
            }{
                \fill[black!10](1,0)--(0,0)--(0,1);
                \clip(1,0)--(0,0)--(0,1)--cycle;
                \tikzset{shift={(-\i,-\j)}}
                \path(0,0)node{\includegraphics[width=20cm]{lenna.png}};
            }
            \pgfmathsetmacro\aa{fxx(\i  ,\j+1)}
            \pgfmathsetmacro\ab{fxy(\i  ,\j+1)}
            \pgfmathsetmacro\ba{fyx(\i+1,\j  )}
            \pgfmathsetmacro\bb{fyy(\i+1,\j  )}
            \pgfmathsetmacro\xx{fx (\i+1,\j+1)}
            \pgfmathsetmacro\yy{fy (\i+1,\j+1)}
            \pgflowlevelobj{
                \pgfsettransformentries{\aa}{\ab}{\ba}{\bb}{\xx cm}{\yy cm}
            }{
                \clip(0,0)--(-1,0)--(0,-1)--cycle;
                \tikzset{shift={(-\i-1,-\j-1)}}
                \path(0,0)node{\includegraphics[width=20cm]{lenna.png}};
            }
        }
    }
}

\end{document}

代码取自https://tex.stackexchange.com/a/332173/51022

相关内容