Hallo, ich suche eine leistungsfähige Library (C/C++) welche Bilddaten (VGA-Auflösung, grayscale) in weniger als 5ms pro Bild komprimieren kann. Kann mir hier jemand einen Tip geben? Kann auch verlustbehaftete Kompression sein, allerdings sollte die Kompression dem Originalbild wenig Rauschen zufügen. (zB.: ähnlich JPEG mit hoher Qualitätseinstellung) (Hintergrund: ich muss mehrere tausend Bilder im RAM zur Weiterverarbeitung halten, da wäre eine Kompression sinnvoll. Allerdings habe ich ein relativ enges Zeitfenster.)
Auf einem 1 Mhz 286er oder wie? Also ohne Angabe der Rahmenbedingungen ist die angabe "weniger als 5ms" arg unbrauchbar. Hast du den schon verschiedene Standardverfahren ausprobiert? Das begrenzende wird eher die I/O Performance sein, wieso überhaupt alles manuell im RAM halten und nicht vieleicht über MemoryMapped File oder sowas?
1. Du hast nicht gesagt auf welcher Maschine es laufen soll. So kann keiner sagen ob der Algorhitmus es in 5ms schaft. Es wird sich aber auch keiner die mühe machen es extra für Dich aus zuprobieren. 2. Als Faustformel kann man sagen: Je stärke die Kompression, desto länger dauert sie! Also Welche Kompression brauchst du? Ansonsten ist http://de.wikipedia.org/wiki/Bildkompression immer ein guter einstieg in eine Thematik.
Auch wichtig: Was ist auf den Bildern drauf? Je nach Bildtyp kann ein ziemlich simples Run Length Encoding schon Wunder wirken (viele gleichartige Pixel hintereinander).
http://www.imagemagick.org/script/index.php http://www.libpng.org/pub/png/ http://www.boutell.com/gd/
So hab mich mal angemeldet. Danke für eure Antworten. Die Image Magick-Library sieht vielversprechend aus! Also der Rechner ist ein "normaler" Desktop PC (3.0GHz DualCore,4GB RAM,sehr gute GraKa, Win32). Die I/O Leistung ist mehr als ausreichend. (Anbindung der Kamera über GigabitEthernet)Ein unkomprimiertes Bild capturen (nicht speichern!) dauert weniger als 1ms. Sorry das diese Angaben noch fehlten.. Die Bilder sind Graustufenaufnahmen von bewegten Objekten (max. 200fps). RLE ist da kein guter Ansatz. Die Bilder sind zwar meistens wenig verrauscht haben allerdings kaum Bereiche in denen RLE greift. Was ich bisher versucht habe: Speichern als JPG,TIFF,PNG in einen Stream. JPG und PNG sind zu langsam.TIFF ist zwar schnell aber gar nicht/kaum komprimiert. Dann hab ich noch verschiedene allgemeine Kompressionsalgorithmen probiert: Huffman - ausreichend schnell, Kompressionsrate nicht so toll fastLZ,quickLZ - auch ausreichend schnell, Kompressionsrate nicht so toll ich werd mal die ImageMagick-Library probieren.
> ... sehr gute GraKa ...
Das wär doch ein Ansatz, wenn du die Bilder schnell genug in die Karte
kriegst, die komprimiert dir das nebenbei weg, ohne ins Schwitzen zu
kommen.
Evtl. lassen sich sogar fertige Texturkompressions-Funktionen aus
DirectX verwenden.
für Graustufen Bilder eignet sich der Intel-Indeo (Ligos) Codec sehr gut. Der wandelt die Bilder auch nicht in 24Bit RGB um wie es einige andere Codecs machen. Der Indeo 5.1 hat eine 'Quickcompress' Option mit der die Umwandlung sehr schnell geht. Auch wenn er für Motion gedacht ist kann man damit gut einzelne Bilder komprimieren. Nervig ist nur dieser Lizenzkrieg, für XP sollte die Liz. vom mitinstallierten nicht mehr gelten aber MS hat den doch nachliefern müssen weil der auch von vielen Spielen genutzt wurde. Ob er jetzt ab Vista noch drin ist weiss ich nicht. Intel hatte den Codec an Ligos abgegeben und es gab ein Setup von Ligos um den nachträglich zu instalieren. Und die 'Quick Compress' war wichtig wenn die SW 24x7h läuft, ohne Quick ist der Codec nach einigen Stunden abgestürzt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.