Andere Antwortende gehen davon aus, dass Sie sich mit dem Rasterbild eines Diagramms befassen. Heutzutage ist es jedoch empfehlenswert, Diagramme in Vektorform zu veröffentlichen. In diesem Fall können Sie eine viel höhere Genauigkeit der wiederhergestellten Daten erzielen und sogar den Wiederherstellungsfehler abschätzen, wenn Sie direkt mit dem Code des Vektordiagramms arbeiten, ohne ihn in ein Rasterbild umzuwandeln.
Da die Artikel online als PDF-Dateien veröffentlicht werden, gehe ich davon aus, dass Sie über eine PDF-Datei verfügen, die ein Vektordiagramm mit Daten enthält, die Sie wiederherstellen möchten (in numerischer Form), und den eingeführten Wiederherstellungsfehler zu schätzen.
Zunächst einmal ist PDF ein Vektorformat, das im Grunde genommen aus Text besteht (das von einem Texteditor gelesen werden kann). Das Problem ist, dass es (und fast immer) komprimierte Datenströme enthalten kann, die dekomprimiert werden müssen, um von einem Texteditor gelesen zu werden. Diese komprimierten Datenströme enthalten normalerweise die Informationen, die wir benötigen.
Es gibt verschiedene Möglichkeiten, Datenströme zu dekomprimieren, um PDF-Dateien in Textdokumente mit lesbarem PDF-Code zu konvertieren. Der wahrscheinlich einfachste Weg ist die Verwendung des kostenlosen QPDF-Dienstprogramms mit der --stream-data=uncompress
Option :
qpdf infile.pdf --stream-data=uncompress -- outfile.pdf
Einige andere Möglichkeiten werden hier und hier beschrieben .
Die erzeugte Datei outfile.pdf kann mit einem Texteditor geöffnet werden. Jetzt benötigen Sie PDF Reference Manual 1.7, um zu verstehen, was Sie sehen. In diesem Moment keine Panik! Sie müssen nur wenige Operatoren kennen, die in "TABELLE 4.9 Pfadkonstruktionsoperatoren" auf den Seiten 226 - 227 beschrieben sind. Die wichtigsten Operatoren sind (die erste Spalte enthält die Koordinatenspezifikation für einen Operator, die zweite enthält den Operator und die dritte den Operatornamen) ):
x y m moveto
x y l lineto
x y width height re rectangle
h closepath
In den meisten Fällen reicht es aus, diese vier Operatoren zu kennen, um die Daten wiederherzustellen.
Jetzt müssen Sie die Datei outfile.pdf als Text in ein Programm importieren, in dem Sie die Daten bearbeiten können. Ich werde zeigen, wie es mit Mathematica geht .
Datei importieren:
pdfCode = Import["outfile.pdf", "Text"];
Nun nehme ich den einfachsten Fall an: Der Graph enthält eine Linie, die aus vielen Zweipunktsegmenten besteht. In diesem Fall wird jedes Segment der Zeile folgendermaßen codiert:
268.79999 408.92975 m
272.39999 408.92975 l
Alle diese Segmente aus dem PDF-Code extrahieren:
lines = StringCases[pdfCode,
StartOfLine ~~ x1 : NumberString ~~ " " ~~ y1 : NumberString ~~ " m\n" ~~
x2 : NumberString ~~ " " ~~ y2 : NumberString ~~ " l\n"
:> ToExpression@{{x1, y1}, {x2, y2}}];
Visualisierung:
Graphics[{Line[lines]}]
Sie erhalten so etwas (das Papier, mit dem ich arbeite, enthält vier Grafiken):
Jeweils zwei benachbarte Segmente teilen sich einen Punkt. In diesem Fall können Sie also die Sequenzen benachbarter Segmente in Pfade umwandeln:
paths = Split[lines, #1[[2]] == #2[[1]] &];
Jetzt können Sie alle Pfade separat visualisieren:
Graphics[{Line /@ paths}]
In dieser Abbildung können Sie den gewünschten Pfad auswählen (durch Doppelklicken), die Grafikauswahl kopieren und als neue Grafik einfügen Graphics
. Um es rückwärts in eine Liste von Punkten umzuwandeln, nehmen Sie das Element {1, 1, 1}
. Jetzt haben wir die Punkte nicht im Koordinatensystem der Grafik, sondern im Koordinatensystem der PDF-Datei. Wir müssen eine Beziehung zwischen ihnen herstellen.
Aus dem obigen Diagramm wählen Sie die Häkchen mit der Hand aus (halten Sie die Maustaste Shift
für die Mehrfachauswahl gedrückt), kopieren sie dann und fügen sie als neu ein Graphics
. So können Sie Koordinaten horizontaler Hilfsstriche extrahieren:
Überprüfen Sie nun die Unterschiede zwischen den Ticks:
Differences[reHorTicks]
An diesen Unterschieden können Sie erkennen, wie genau die Ticks in der PDF-Datei positioniert sind. Es gibt eine Schätzung des Fehlers, der durch Konvertieren der ursprünglichen Datenpunkte in ein in der PDF-Datei enthaltenes Vektordiagramm eingeführt wird. Wenn es merkliche Fehler bei der Positionierung von Ticks gibt, können Sie den Fehler reduzieren, indem Sie die Koordinaten von Ticks an ein lineares Modell anpassen. Diese lineare Funktion kann jetzt verwendet werden, um die ursprünglichen Koordinaten von Punkten des Pfades (dh im Koordinatensystem des Diagramms) abzurufen.