图像叠加生成器 - 如何注释每个叠加框中心的子图像?(原始图像旁边的标题图)

图像叠加生成器 - 如何注释每个叠加框中心的子图像?(原始图像旁边的标题图)

LaTeX 覆盖生成器是一款出色的工具,可以以 LaTeX 标题方式注释图像的子图像。它自称为“Visual Overlay Generator v0.0.1”,因为它可以创建可视化叠加层:叠加在原始图像上的图表。

相同的 LaTeX 覆盖生成器是用户 f2cx 的回答致 OP我应该如何添加带注释的图像?

然而,我正在寻找一种不同的方法来注释图像的子图像。那就是:

  • 它们不必是 Tex-sense 中的“标题”:它们可以是纯文本。
  • 应将“可视化叠加生成器”中的可视化叠加层添加到原始图像的右侧(参见左右为了更好地理解,下面示例图中的布局...或者它们可以是上下有时,当处理“宽”图像时)。
  • 标题文字应添加在视觉覆盖层内,而不是原始图像下方。

我们以下图(包含子图)为例(不同的子图用不同的颜色表示,仅作为示例):

带有子图像的图像

然后,下面就是我想要的结果(原始图像在左侧以及注释图在右侧,其中可以通过 Tex 在注释图中的每个框的中心添加标题):

左侧为图片,右侧为带标题的注释图

虽然我个人认为它无助于提高标题图的清晰度,但以下可以作为它的一个可选变体,其中右边还以原始图像作为背景(不透明度为±20%):

以原始图像为背景的变体,具有低不透明度

我不知道在 Tex 中如何优雅地实现这一点。也许可以借助 GUI(例如矢量图像创建器,例如 GIMP、Inkscape、Adobe Illustrator 等)来实现(加快)?然后可以在这样的软件中轻松跟踪“覆盖”注释图,然后可以将该图导出为 SVG。不幸的是,我不知道如何使用 Tex 注释(写实际注释)不同的“对象”(读作:代表图中子图像的矩形),例如在每个“对象”(读作:矩形)的中心。

有什么建议(坚持使用 Tex 来实现结果,或者如果不行:避免使用它)或可行的解决方案吗?我需要这个过程来创建许多(超过 100 个)图像。

答案1

因此,从LaTeX 覆盖生成器可以按以下方式使用并进行最低限度的改变:

  • \node at (#4)应替换为\node at ($ (#1)!.5!(#2) $),这会将标签放置在矩形的中间(而不是采用可选的第 4 个参数);

  • 为了使上一步工作,需要包括\usetikzlibrary{calc}以下内容\usepackage{tikz}

  • {white}{white}{black}{black}可以改为{white}{none}{none}{black}删除带黑色边框的白色圆圈;

  • [anchor=south west,inner sep=0] (image)可以更改为[anchor=south west,inner sep=0,opacity=0.2] (image)使背景图像具有 20% 的不透明度;

  • 假设您有一个使用默认“代码”生成的覆盖矩形{A},则可以将其更改为{the caption you'd like to give to the sub-image}

假设我们要使用以下代码,通过以下方式生成LaTeX 覆盖生成器(我刚刚删除了注释行以及\caption{...}& \label{fig:teaser}):

\documentclass{article}

\usepackage{graphicx}

\usepackage{tikz}

\newcommand*\annotatedFigureBoxCustom[8]{\draw[#5,thick,rounded corners] (#1) rectangle (#2);\node at (#4) [fill=#6,thick,shape=circle,draw=#7,inner sep=2pt,font=\sffamily,text=#8] {\textbf{#3}};}

\newcommand*\annotatedFigureBox[4]{\annotatedFigureBoxCustom{#1}{#2}{#3}{#4}{white}{white}{black}{black}}
\newcommand*\annotatedFigureText[4]{\node[draw=none, anchor=south west, text=#2, inner sep=0, text width=#3\linewidth,font=\sffamily] at (#1){#4};}
\newenvironment {annotatedFigure}[1]{\centering\begin{tikzpicture}
\node[anchor=south west,inner sep=0] (image) at (0,0) { #1};\begin{scope}[x={(image.south east)},y={(image.north west)}]}{\end{scope}\end{tikzpicture}}

\begin{document}

\begin{figure}[h!t]

\begin{annotatedFigure}
    {\includegraphics[width=1.0\linewidth]{qUq7A.jpg}}
    \annotatedFigureBox{0.1113,0.5114}{0.625,0.7951}{A}{0.1113,0.5114}
\end{annotatedFigure}

\end{figure}

\end{document}

[width=1.0\linewidth]然后,我们对其进行调整(按照上面描述的步骤),以实现(我通过更改为使图像变小[width=0.5\linewidth]):

\documentclass{article}

\usepackage{graphicx}

\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand*\annotatedFigureBoxCustom[8]{\draw[#5,thick,rounded corners] (#1) rectangle (#2);\node at ($ (#1)!.5!(#2) $)[fill=#6,thick,shape=circle,draw=#7,inner sep=2pt,font=\sffamily,text=#8] {\textbf{#3}};}

\newcommand*\annotatedFigureBox[4]{\annotatedFigureBoxCustom{#1}{#2}{#3}{#4}{white}{none}{none}{black}}
\newcommand*\annotatedFigureText[4]{\node[draw=none, anchor=south west, text=#2, inner sep=0, text width=#3\linewidth,font=\sffamily] at (#1){#4};}
\newenvironment {annotatedFigure}[1]{\centering\begin{tikzpicture}
\node[anchor=south west,inner sep=0,opacity=0.2] (image) at (0,0) { #1};\begin{scope}[x={(image.south east)},y={(image.north west)}]}{\end{scope}\end{tikzpicture}}

\begin{document}

\begin{figure}[h!t]

\begin{annotatedFigure}
    {\includegraphics[width=1.0\linewidth]{qUq7A.jpg}}
    \annotatedFigureBox{0.1113,0.5114}{0.625,0.7951}{the caption you'd like to give to the sub-image}{0.1113,0.5114}
\end{annotatedFigure}

\end{figure}

\end{document}

这样会产生类似的东西(如果不想要背景图像,可以更改opacity=0.2opacity=0,并且根据下面的发现,您可能需要将圆角矩形的颜色从 更改{white}为 例如{red}):

屏幕截图 1

完成后,可以将所有内容放在一个小页面中,以便有 2 个并排的图形,使用(取自用户 Matthew Leingang 的回答在 OP 中两个并排的身影):

\begin{figure}
\begin{minipage}{0.5\textwidth}
% here should come all the code for the original image (left side)
\end{minipage}
\begin{minipage}{0.5\textwidth}
% here should come all the code for the "overlay-image" (right side)
\end{minipage}
\end{figure}

[width=0.5\linewidth]按照上面的工作流程这样做,可以得到(我从这里回到了[width=1\linewidth]):

\documentclass{article}

\usepackage{graphicx}

\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand*\annotatedFigureBoxCustom[8]{\draw[#5,thick,rounded corners] (#1) rectangle (#2);\node at ($ (#1)!.5!(#2) $)[fill=#6,thick,shape=circle,draw=#7,inner sep=2pt,font=\sffamily,text=#8] {\textbf{#3}};}

\newcommand*\annotatedFigureBox[4]{\annotatedFigureBoxCustom{#1}{#2}{#3}{#4}{white}{none}{none}{black}}
\newcommand*\annotatedFigureText[4]{\node[draw=none, anchor=south west, text=#2, inner sep=0, text width=#3\linewidth,font=\sffamily] at (#1){#4};}
\newenvironment {annotatedFigure}[1]{\centering\begin{tikzpicture}
\node[anchor=south west,inner sep=0,opacity=0.2] (image) at (0,0) { #1};\begin{scope}[x={(image.south east)},y={(image.north west)}]}{\end{scope}\end{tikzpicture}}

\begin{document}

\begin{figure}[h!t]

\begin{minipage}{0.5\textwidth}
\includegraphics[width=1\linewidth]{qUq7A.jpg}
\end{minipage}
\begin{minipage}{0.5\textwidth}
\begin{annotatedFigure}
    {\includegraphics[width=1\linewidth]{qUq7A.jpg}}
    \annotatedFigureBox{0.1113,0.5114}{0.625,0.7951}{the caption you'd like to give to the sub-image}{0.1113,0.5114}
\end{annotatedFigure}
\end{minipage}

\end{figure}

\end{document}

不幸的是,(由于长度{the caption you'd like to give to the sub-image}不适合右侧图像)右侧图像被推了一些;正如在输出中看到的那样:

屏幕截图 2

也许可以通过限制的宽度来解决这个问题{the caption you'd like to give to the sub-image},这样它就会自动换行(和/或减小其字体大小,例如当在某个较大的字体大小的矩形内不再可能换行时)?

限制字幕最大宽度的一种方法是, text width=30mm在 eg 之后引入 eg text=#8,但这会限制所有字幕的宽度。要限制每个字幕的宽度,例如可以将某个字幕放在\begin{minipage}{0.75\textwidth}...内\end{minipage}

如果您想对矩形进行旋转,则需要同时移动文本和矩形。这可以使用xshift和来完成yshift。可以调整从 生成的代码LaTeX 覆盖生成器因此,为了满足您的需求:

\newcommand*\annotatedFigureBox[6]{\draw[orange,thick,rounded corners,rotate=#4, xshift=(#5), yshift=(#6)] (#1) rectangle (#2);\node at ($ (#1)!.5!(#2) $)[text=white] {\small{#3}};}
\newenvironment{annotatedFigure}[1]{\centering\begin{tikzpicture}
\node[anchor=south west,opacity=0.3] (image) at (0,0) { #1};\begin{scope}[x={(image.south east)},y={(image.north west)}]}{\end{scope}\end{tikzpicture}}

然后,可以将矩形的坐标作为任何标题框(\annotatedFigureBox)的前 2 个参数复制到以下前 2 个参数中:

\annotatedFigureBox{x1-copy-from-generator,y1-copy-from-generator}{x2-copy-from-generator,y2-copy-from-generator}{the caption you'd like to give to the sub-image}{0}{0}{0}%bl

最后两个参数分别是xshiftyshift,之前的一个参数(第 4 个参数)是矩形的旋转。

xshift然而,手动使用和的需要yshift并不那么优雅,而且很难猜测矩形的大小和位置LaTeX 覆盖生成器,如果您之后需要旋转它。因此,最好使用另一个生成器,您可以从中检索点的坐标,以绘制矩形或多边形(连接点)。

相关内容