Skalierung eines virtuellen Lineals (Maßstab) auf gleich große Bilder (für mehrere Bilder, 360° Produktfotografie)

Skalierung eines virtuellen Lineals (Maßstab) auf gleich große Bilder (für mehrere Bilder, 360° Produktfotografie)

Stellen Sie sich vor, Sie haben viele leicht unterschiedliche Bilder eines Objekts wie diesem, alle aus der gleichen Entfernung aufgenommen, wobei sich das Objekt nur um seinen Mittelpunkt dreht (deshalb ist das Fossil auf allen Bildern gleich groß):

Bildbeschreibung hier eingeben

Jetzt möchten Sie sicher auch ein virtuelles Lineal über beide Seiten des Fotos legen. Aber wie groß ist das Objekt?

Glücklicherweise haben Sie auch ein Bild mit einem echten Maß aufgenommen, das so aufgehängt war, dass es das Objekt in zwei Hälften teilte (aber daneben) … (auch aus genau derselben Entfernung, also mit dem gleich großen Objekt):

Bildbeschreibung hier eingeben

Jetzt möchten Sie ein virtuelles Lineal über alle Bilder legen, und zwar wie folgt:

Bildbeschreibung hier eingeben

Bitte beachten Sie, dass Sie zunächst alle Fotos gleichmäßig skalieren müssen (in LaTeX), bis Sie das Gefühl haben, dass sie alle groß genug sind (wie im GIF oben in diesem Beitrag).

Es wäre möglich, die Bilder wie folgt zu laden:

\foreach \i in {1,...,16}{
    \begin{figure}
\hspace{0cm}
\vspace{0cm}
\centerline{
\includegraphics[scale=0.1, angle=9,origin=c]{./SourcePictures/Fossil\i.jpg}
}
    \end{figure}
}

Sobald der Maßstab in Ordnung ist, müssen wir herausfinden, wie groß das Bild in Zentimetern ist. Um dann das virtuelle Lineal so anpassen zu können, dass der Maßstab richtig ist.

Für die oben abgebildete virtuelle Skala habe ich verwendet\fgruler{obenlinks}aber ich habe keine Möglichkeit gefunden, es zu skalieren. Ich habe gerade diesen Beitrag entdeckt:Achse, realer Maßstab, was beschreibt vielleicht einen besseren Weg? Oder sollten wir die Größe der Seiten anpassen, damit sie den tatsächlichen Zentimetern des Fotos entsprechen?

Irgendwelche Vorschläge, wie man hierfür einen übersichtlichen Arbeitsablauf erstellen kann?

In diesem Fall habe ich genommen:

  • 1 Bild mit Maß
  • 16 Bilder der Liegendrotation (Set 1)
  • 16 Bilder der Aufrechten Rotation (Set 2)

Bitte beachten Sie, dass entweder Set 1 oder Set 2 leicht vertikal verschoben sein müssen.

Hier ist ein Beispiel für ein Bild aus Set 1:

Bildbeschreibung hier eingeben

Hier ist ein Beispiel für ein Bild aus Set 2:

Bildbeschreibung hier eingeben

Antwort1

Ich vermute, Sie möchten so etwas oder Ähnliches:

Die folgende Lösung verwendet TikZ und TikZ-calc.

A.Im ersten Schritt habe ich das Bild in einen Knoten eingefügt.

B.Dann füge ich eine einfacheKoordinatensystem für diesen Knoten.

C.Mithilfe einer Scope-Umgebung kann ich dem Bild innerhalb des Koordinatensystems beliebige TikZ-Inhalte hinzufügen.

d1.Hinweis: Ich verwende cmHgI.jpghier den Startpost; für Benutzer, die ihn nicht haben, cmHgI.jpg
erscheintexample-image.jpg

d2. Der Trick besteht darin, die „Einheitslänge“ des gezeigten Lineals abzumessen cmHgI.jpgund sie für alle gezeichneten TikZ-Lineale zu verwenden.

€dit: Ich habe einen Schlüssel hinzugefügt\def\ShowHelps{1} % 1 'yes' 0 'no'

In einer Rohversion sieht das so aus: Bildbeschreibung hier eingeben

Ohne das Hilfsmittel:

Bildbeschreibung hier eingeben

\documentclass[a4paper, landscape]{article}
\usepackage[margin=2cm, showframe=false]{geometry} 
\usepackage{mwe} % Dummy images

\usepackage{tikz}
\usetikzlibrary{calc} 
\pgfkeys{/tikz/savevalue/.code 2 args={\global\edef#1{#2}}}

\def\ShowHelps{1} %    1 'yes'        0   'no'
\begin{document}
\centering\begin{tikzpicture}[font=\sffamily,
Help/.style={font=\Huge, red}
]
\node[anchor=south west,inner sep=0pt] (myimage) at (0,0) {    
\IfFileExists{cmHgI.jpg}
  {\includegraphics[scale=0.15]{cmHgI.jpg}}
    {\includegraphics[width=0.75\textwidth]{example-image.jpg}}
};
\begin{scope}[x={(myimage.south east)},y={(myimage.north west)}]
% Restrict the draw area
\clip (0,0) rectangle (1,1);
% Frame around image -  optional
\draw[] (0,0) rectangle (1,1); % optional
% CoSy inside node
\newcommand\ShowHelpCoSy{
  \draw[help lines,xstep=.1,ystep=.1] (0,0) grid (1,1);
  \foreach \x in {0,1,...,9} { \node[anchor=north] at (\x/10,0) {0.\x}; }
  \foreach \y in {0,1,...,9} { \node[anchor=east] at (0,\y/10) {0.\y}; }
}
\ifnum\ShowHelps=1 \ShowHelpCoSy \fi%
\ifnum\ShowHelps=1\fill[Help] (0.5,0.75) circle(3pt) node[above]{(0.5,0.75)};\fi% <-- Position Test

% Now the stuff:
\path[] (0.705,0.4) coordinate(U1) -- (0.705,0.519) coordinate(U2);
\ifnum\ShowHelps=1 \draw[Help] (U1) circle(2pt) node[label=left:U1]{} -- (U2) circle(2pt) node[label=left:U2]{};\fi % show unitlength line

\path let \p1=($(U2)-(U1)$) in 
\pgfextra{  \pgfmathsetlengthmacro{\unitlength}{veclen(\x1,\y1)}   }
[savevalue={\u}{\unitlength}];
\ifnum\ShowHelps=1 \node[Help] at (0.725,0.25) {unitlength U1U2 = \u}; \fi%<--- show unitlength
\ifnum\ShowHelps=1 \draw[blue, transform canvas={xshift=2mm}] (U1) -- +(0,\u);\fi  % Test

% Small Ruler
\draw[very thick] (0.3,0.35) coordinate(A) -- +(0,3*\u);
\foreach \n in {0,1,...,3}{%%
\draw[very thick] ([yshift=\n*\u]A) -- +(-3mm,0) node[left]{\n} 
\ifnum\n=0 node[anchor=west, right=3mm]{cm}\fi;
}%%
\foreach \n in {0.1,0.2,...,3}{%% 
\draw[] ([yshift=\n*\u]A) -- +(-1.5mm,0);
}%%

% Image Ruler y
\draw[very thick] (0,0) coordinate(B) -- +(0,10*\u);
\foreach \n in {0,1,...,10}{%%
\draw[very thick] ([yshift=\n*\u]B) -- +(3mm,0) node[right]{
\ifnum\n=0 \else \ifnum\n=1 \n\,cm \else \n \fi\fi}; 
}%%
\foreach \n in {0.1,0.2,...,10}{%% 
\draw[] ([yshift=\n*\u]B) -- +(1.5mm,0);
}%%

% Image Ruler x
\draw[very thick] (0,1) coordinate(C) -- (15*\u,1);
\foreach \n in {0,1,...,15}{%%
\pgfmathsetmacro\Color{\n<9 ? "black" : "white"}
\draw[very thick, \Color] ([xshift=\n*\u]C) -- +(0,-3mm) node[below, text=\Color, inner sep=1pt]{
\ifnum\n=0 \else \ifnum\n=1 \n\,cm \else \n \fi\fi}; 
}%%
\foreach \n in {0.1,0.2,...,15}{%% 
\pgfmathsetmacro\Color{\n<9 ? "black" : "white"}
\draw[\Color] ([xshift=\n*\u]C) -- +(0,-1.5mm);
}%%
\end{scope}
\end{tikzpicture}
\end{document}

Antwort2

Derzeit führe ich das Zoomen und Zuschneiden mit dem folgenden Code durch:

\documentclass{article}

\usepackage{geometry}
\geometry{paperwidth=10cm, paperheight=10cm, margin=0cm}
\usepackage{graphicx}
\usepackage{pgffor}
\pagenumbering{gobble}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand{\ScaleImages}{0.6}

\newcommand{\DisplaceHorizontallySetA}{-18cm}
\newcommand{\DisplaceVerticallySetA}{-1.03cm}

\newcommand{\DisplaceHorizontallySetB}{0.5cm}
\newcommand{\DisplaceVerticallySetB}{-4.5cm}

\newcommand{\DisplaceHorizontallySetC}{0.5cm}
\newcommand{\DisplaceVerticallySetC}{-3cm}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

\foreach \i in {0,...,0}{ %%%% First picture
    \begin{figure}
    \hspace{\DisplaceHorizontallySetA}
    \vspace{\DisplaceVerticallySetA}\\
    \centerline{    \hspace{\DisplaceHorizontallySetA}
    \includegraphics[scale=\ScaleImages, angle=0.7]{./Pictures/2020-08_Object-1_(51-208North_4-383South)_Picture-\i.jpg}
    }
    \end{figure}
}

\paperwidth=15cm

\foreach \i in {1,...,16}{ %%%% First rotation (picture 1 until 16)
    \begin{figure}
    \hspace{\DisplaceHorizontallySetB}
    \vspace{\DisplaceVerticallySetB}\\
    \centerline{
    \hspace{\DisplaceHorizontallySetB}
    \includegraphics[scale=\ScaleImages]{./Pictures/2020-08_Object-1_(51-208North_4-383South)_Picture-\i.jpg}
}
    \end{figure}
}

\foreach \i in {17,...,32}{ %%%% Second rotation (picture 17 until 32)
    \begin{figure}
    \hspace{\DisplaceHorizontallySetC}
    \vspace{\DisplaceVerticallySetC}\\
    \centerline{
    \hspace{\DisplaceHorizontallySetC}
    \includegraphics[scale=\ScaleImages]{./Pictures/2020-08_Object-1_(51-208North_4-383South)_Picture-\i.jpg}
}
    \end{figure}
}

\end{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Das Ergebnis ist eine PDF-Datei wie diese:

Bildbeschreibung hier eingeben

Ich verwende dann die folgende Terminalbefehlszeile, um diese in PNGs zu konvertieren:

convert -density 400 CropperXYZ.pdf CroppedXYZ.png

Da wir das erste Bild gut mit dem physischen Lineal ausgerichtet haben, können wir jetzt die tatsächliche Größe des Quadrats ermitteln.

Jetzt bleibt noch der Teil zum Überlagern virtueller Lineale.

verwandte Informationen