Trädvy Permalänk
Medlem
Plats
Västra götaland
Registrerad
Sep 2012

Komprimera >500Gpixel PNG

Hej

Behöver komprimera en PNG bild som ligger på ~550gigapixel förlustfritt. (Inte ens precisionsfel från flyttal helst.) Vilket program skulle ni köra? (Jag vill alltså helst ha den i PNG format senare också, men egentligen går väl andra format också bra om dem presterar bättre.)

Zopfli - Jag vill inte hinna dö innan det är klart...
Imagemagick - Mest lockande just nu. Den stödjer lagringsavlastning så det är inga problem med RAM.
pngtastic - Har använt dess API tidigare men har ingen aning hur prestandan är, det är trots allt en java implementation. Tvekar starkt på att det stödjer stora filer.

Verkar finnas en hel del olika program med olika algoritmer, speciellt deflate steget varierar en hel del. Komprimeringstiden är väl inte låst, men ~2 veckor på en fåkärnig maskin eller en vecka på en mångkärnig maskin känns rimligt. Har ni några erfarenheter över vad som kan vara lämpligt?

Bilden har förövrigt enbart en kanal med 8BPC och givetvis då även 8BPP.

Har ni några andra idéer på lämpliga algoritmer så kan jag implementera dem, men då får det även vara lönt arbetet.

Kan låta oavsiktligt aggressiv.
Citera eller @philipborg om du vill att jag ska läsa dina svar.

Trädvy Permalänk
Medlem
Plats
Skellefteå
Registrerad
Okt 2008

Har tyvärr inget förslag, men nyfikenheten är för stark: vad är det för en groteskt enorm bild det handlar om?

1800X, 1080 SLI, 4K

Trädvy Permalänk
Medlem
Plats
Västra götaland
Registrerad
Sep 2012
Skrivet av backfeed:

Har tyvärr inget förslag, men nyfikenheten är för stark: vad är det för en groteskt enorm bild det handlar om?

Höjddata, aka. heightmap, baserad till största delen på SRTMIMGM_V003. Med andra ord höjddata över större delar utav jorden.

Kan låta oavsiktligt aggressiv.
Citera eller @philipborg om du vill att jag ska läsa dina svar.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007
Skrivet av philipborg:

Höjddata, aka. heightmap, baserad till största delen på SRTMIMGM_V003. Med andra ord höjddata över större delar utav jorden.

Med förbehåll för att jag bara kan tillräckligt om komprimeringsalgoritmer för att vara farlig så bör man kunna utnyttja strukturen på datan rätt så effektivt. Höjddata kommer ju inte att skilja sig särskilt mycket från pixel till pixel, så man skulle kunna koda om datan så att man lagrar varje pixel som skillnaden mot föregående pixel. Majoriteten av alla pixlar bör då få ett relativt litet värde, vilket kan komprimeras effektivt med t.ex. Huffmankodning. Det är inte särskilt svårt att implementera själva, och flaskhalsen kommer troligtvis bli lagringsmediet.

Edit: Jag läste på lite om vad PNG använder för komprimering. PNG använder visst ungefär samma metod som jag precis beskrivit, fast med några fler och mer komplicerade steg. Så jag har precis uppfunnit en sämre version av PNG Min föreslagna metod skulle dock kunna vara snabbare och kanske lika bra för just höjddata, men den är nog inte värd att implementera om man har en bra PNG-kodare.

Trädvy Permalänk
Medlem
Plats
Västra götaland
Registrerad
Sep 2012
Skrivet av perost:

Med förbehåll för att jag bara kan tillräckligt om komprimeringsalgoritmer för att vara farlig så bör man kunna utnyttja strukturen på datan rätt så effektivt. Höjddata kommer ju inte att skilja sig särskilt mycket från pixel till pixel, så man skulle kunna koda om datan så att man lagrar varje pixel som skillnaden mot föregående pixel. Majoriteten av alla pixlar bör då få ett relativt litet värde, vilket kan komprimeras effektivt med t.ex. Huffmankodning. Det är inte särskilt svårt att implementera själva, och flaskhalsen kommer troligtvis bli lagringsmediet.

Edit: Jag läste på lite om vad PNG använder för komprimering. PNG använder visst ungefär samma metod som jag precis beskrivit, fast med några fler och mer komplicerade steg. Så jag har precis uppfunnit en sämre version av PNG Min föreslagna metod skulle dock kunna vara snabbare och kanske lika bra för just höjddata, men den är nog inte värd att implementera om man har en bra PNG-kodare.

Haha, det är just pga detta jag har PNG som primär kandidat. Jag har även funderat på att göra en modifierad PNG där jag byter ut deflate mot brotli. Problemet är det att brotli inte är helt moget ännu samt att det är rätt mycket arbete för en relativt liten vinst. Det skulle även krossa smidigheten som standardisering ger.

Kan låta oavsiktligt aggressiv.
Citera eller @philipborg om du vill att jag ska läsa dina svar.

Trädvy Permalänk
Medlem
Plats
Västra götaland
Registrerad
Sep 2012

Tror jag tar och gör ett tile system på flera PNG filer, tror det blir lättast så och random access tiderna blir markant mycket bättre.

Kan låta oavsiktligt aggressiv.
Citera eller @philipborg om du vill att jag ska läsa dina svar.