Es ist eine Umsetzung dieserfractal image compression Algorithmusveröffentlicht in IEEE während meiner College-Tage
Die Anwendung nutzt die Delaunay inkrementelle Triangulation Bibliothek, die auch in derAntrag auf Morphing
High-Level-Algorithmus:
- Kompression:
- Die Fractal-Kompression konzentriert sich auf das Speichern von Beziehungen zwischen Bildregionen und nicht auf die tatsächlichen Pixelwerte, insbesondere zwischen Dreiecken in diesem Fall.
- Das Bild ist in ein dreieckiges Gitter unterteilt, das aus mehreren Dreiecken besteht und eine dreieckige Domäne bildet.
- Das Bild ist in einen neuen Satz von Triangulationen mit größeren Dreiecken für das Codebook unterteilt.
- Die Triangulationen sind dynamisch, und der Split- und Merge-Algorithmus wird basierend auf der Varianz der Dreieckspixel angewendet.
- Sobald die Triangulation für das Codebook ermittelt ist, werden die repräsentativsten 2^n Dreiecke ausgewählt, um das Codebook zu bilden. Der Wert von n beeinflusst die Kompressionszeit signifikant, während er einen geringen Einfluss auf das Kompressionsverhältnis und die erreichte Qualität hat.
- Für jedes Domänendreieck wird das optimale Mapping mit einem Dreieck aus dem Codebook unter Verwendung eines minimalen mittleren Quadratfehlers (MSE)-Kriteriums gesucht.
- Das optimale Mapping zwischen Dreiecken wird durch Kombinationen von:
- Permutationen der Eckpunkte (6 Möglichkeiten)
- Bestimmung eines Kompensationsbetrags für den Mittelwert
- Die Suche nach einem Skalierungsfaktor zwischen 0 und 1, der auf die Abweichung vom Mittelwert angewendet wird. Dieser Skalierungsfaktor sollte zwischen 0 und 1 bleiben, um Divergenzen während des iterativen Dekompressionsvorgangs zu vermeiden.
Darüber hinaus sollten diese Parameter mit einer begrenzten Anzahl von Bits quantifiziert werden, um sicherzustellen, dass sowohl die Kompressionszeit als auch das Verhältnis angemessen und in Übereinstimmung mit der gewünschten Qualität sind.
- Die gespeicherten Informationen in der komprimierten Datei für jeden Kanal:
- Die Informationen, um die beiden Triangulationen zu reproduzieren:
- Dreiecke, die sich in jeder Iteration teilen
- Vertices, die infolge der Zusammenführung entfernt wurden (nach Abschluss der Split-Iterationen)
- Die Auswahl der 2^n Dreiecke des Codebooks
- Das optimale Mapping jedes Domänendreiecks:
- Welches Codebook-Dreieck es verwendet, um zu kartieren (n Bits)
- Die optimale Vertex-Permutation (6 Kombinationen, 3 Bit)
- Offset (die Autoren weisen darauf hin, dass der Offset effektiv mit 6 Bit dargestellt wird)
- Skala (die Autoren weisen darauf hin, dass die Skala mit 6 Bit effektiv dargestellt wird)
- Dekompression (für jeden Kanal):
- Die Dreiecke der beiden Triangulationen werden erhalten.
- Die Codebook Dreiecke werden erhalten.
- Dieser Prozess wird bis zum Erreichen der Konvergenz wiederholt:
- Das Mapping aller Domänendreiecke zu ihren optimalen Korrespondenzen mit den Codebook-Dreiecken
Nachdem ich einen Master-Abschluss in Künstlicher Intelligenz erworben habe, stelle ich mir vor, wie man durch die Anwendung von K-Medoiden die wichtigsten Dreiecke für das Codebook ableitet.
Ich bin mir nicht sicher, ob die Innovation den Algorithmus verbessern oder behindern wird, aber es erspart mir, dass ich ihn selbst programmieren muss, was anfangs kompliziert schien.
Die Bildverarbeitung ist in Kanäle unterteilt, typischerweise RGB.
Es nutzt Multiprocessing, mit einem Thread, der jedem Kanal gewidmet ist.
Mit der Version v1.1 wurde ein mit dem ImageIO-Standard kompatibler Reader hinzugefügt.
Daher können Sie ein komprimiertes Bild (.dfc) mit der Anwendung einfach öffnen, indem Sie:
BufferedImage image = ImageIO.read("image.dfc");