zwei Vektorbilder vergleichen

8

Ich möchte zwei Vektorbilder (sagen wir SVG) vergleichen und sehen, wie nahe sie sind. Grundsätzlich möchte ich die Richtigkeit eines Verfolgungsalgorithmus testen, der Rasterbilder in Vektorformat umwandelt.

Die Art, wie ich diesen Algorithmus testen möchte, ist:

- Nehmen Sie einige Vektorbilder auf.

- Richten Sie das Vektorbild auf png.

-Feed den obigen png zum Verfolgungsalgorithmus.

- Vergleiche die Ausgabe des Ablaufverfolgungsprogramms (welches SVG ist) mit der ursprünglichen.

Obwohl ich weiß, dass es für Rasterbilder wie RMSE (in imagemagick) einige Metriken gibt, bin ich nicht vertraut, wenn es einige Standardmetriken für Vektorformate gibt. Ich kann mir einige einfache wie die Anzahl der Bögen, Linien, Kurven usw. vorstellen. Aber diese können die Abweichung in Geometrie und Farben nicht erkennen. Könnte jemand eine gute Standardmetrik oder eine andere Herangehensweise an dieses Problem vorschlagen?

    
Aarkan 24.09.2011, 17:17
quelle

1 Antwort

4

Ich kenne keine Standardmetriken dafür, aber ich habe einen Zeiger, von dem ich hoffe, dass er hilfreich sein wird.

Das Batik-Projekt verwendet eine Reihe von Werkzeugen, um zu testen, dass seine Darstellung von SVG-Dokumenten nicht zu stark von einer Reihe von Referenzbildern abweicht. Mein Verständnis ist, dass es das SVG im Wesentlichen rasterisiert und ein pixelbasiertes diff der zwei Bilder durchführt, um zu sehen, wie sie sich unterscheiden. Es sollte schlau genug sein, unvermeidbare Unterschiede zu übersehen, die zum Beispiel auf subtile Unterschiede im Antialiasing zurückzuführen sind.

Sie können mehr darüber lesen (besonders den Abschnitt SVGRenderingAccuracyTest) unter: Ссылка .

Das bedeutet natürlich, dass Sie Rastervergleiche und keine Vektorvergleiche durchführen. Vektorvergleiche werden in Ihrem Fall teuflisch schwierig, weil völlig unterschiedliche Kurven extrem ähnliche Rendering-Ergebnisse liefern können - etwas, von dem ich annehme, dass es in Ordnung ist. Darüber hinaus kann die Eingabe eine Form haben, die hinter einer anderen versteckt ist, so dass die Ausgabe möglicherweise nicht erraten kann, worum es sich handelt. Die Ausgabe wird daher als völlig falsch angezeigt, obwohl sie ein pixelgenaues äquivalentes Rendering erzeugen kann.

Wenn Sie jedoch Vektorvergleiche durchführen möchten (vielleicht sind Ihre Daten so eingeschränkt, dass dies realisierbar ist), können Sie zuerst beide SVGs normalisieren (alle Formen in Pfade konvertieren, alle Metadaten entfernen, Vererbung von alle Eigenschaften und normalisieren ihre Werte, normalisieren Pfaddaten, um immer dasselbe Formular zu verwenden usw.) und verwenden dies für zwei Zwecke: Erstens, um die diffs in der normalisierten Baumstruktur zu betrachten. Das sollte dir schon einige nützliche Informationen geben. Zweitens, wenn Sie sich mutig fühlen, messen Sie die Oberfläche der Differenz zwischen einzelnen Kurven. Ich würde jedoch zweimal darüber nachdenken, sich auf Letzteres einzulassen, weil es wahrscheinlich viele falsche Negative liefert.

    
Robin Berjon 05.10.2011, 12:54
quelle

Tags und Links