Kompresja bezstratna

0

Algorytm do kompresji i dekompresji bezstratnej. Najlepiej slowny ewentualnie napisany w asemblerze.
Oraz to samo w do kompresji stratnej.

Podziekowania z gory

0

Kompresji czego? Przy bezstratnej to bez znaczenia, ale przy stratnej to sprawa fundamentalna - zbuduj kompresor stratny i użyj dla plików *.exe.. nie bardzo :P

0

Chyba oczywiste ze mowei o plikach multimedialnych.

0

Oczywiste, ale nie mówisz o jakich: obraz, dźwięk, wideo?

Jak obraz do możesz poczytać o formacie BMP z kompresją bezstratną RLE (albo Huffmana) oraz JPG z kompresją stratną (transformatą kosinusoidalną - chyba tak się ona nazywa).

//nie tak ;) -> "dyskretna transformacja kosinusowa (DCT)" - M

0

do kompresji stratnej potrzebuje algorytmu do kompresji i dekompresji mp3 i innych formatow ale aktualnie skpumy sie na mp3.

Dzieki za zainteresowanie sie ta sprawa.

0

Czyli znasz jakis algorytm stratnej i bezstratnej kompresji [tu wystarczy mi RLE]?

0
Anonym napisał(a)

do kompresji stratnej potrzebuje algorytmu do kompresji i dekompresji mp3 i innych formatow ale aktualnie skpumy sie na mp3.

MP3 to metoda stratnej kompresji dzwięku, czyli pliki .mp3 są już skompresowane bardzo dobrze.

Mając dowolną metodę stratną masz już prawie gotową bezstratną.
Po prostu, obliczasz straty i dołączasz je do pliku skompresowanego,
później po dekompresji uzupełniasz straty i jest oryginał. :-)

// skompresuj w ten sposób plik wykonywalny - Ł

0

Jak chodzi o prównywanie dźwięku to ciekawszym i łatwiejszym może być Ogg Vorbis (stratny) vs. Ogg FLAC (bezstratny).

Do bezstratnej przy dźwięku nagrywanym (nie generowanym) metoda RLE za wiele nie da uzysku, ale Huffman lub ZIP już może.

0

Stratna ma posluzyc do kompresji i dekompresji mp3. Bezstratna do plikow skompresowanycha raczej spakowanych do jednego pliku [ typ pliku iso oraz innne typu obrazu]

0

napisz swoj wlasny jak czytalem z kogos wypowiedzi; powinienes rozumiec :C

0
at. napisał(a)

// skompresuj w ten sposób plik wykonywalny - Ł

Coś chyba ci się pokręciło, więc przypominam:
metoda bezstratna to taka, która zachowuje 100% informacji,
więc można nią kompresować wszystko.

0
at. napisał(a)
at. napisał(a)

// skompresuj w ten sposób plik wykonywalny - Ł

Coś chyba ci się pokręciło, więc przypominam:
metoda bezstratna to taka, która zachowuje 100% informacji,
więc można nią kompresować wszystko.

at. napisał(a)

Mając dowolną metodę stratną masz już prawie gotową bezstratną.
Po prostu, obliczasz straty i dołączasz je do pliku skompresowanego,
później po dekompresji uzupełniasz straty i jest oryginał. :-)

Źle mnie zrozumiałeś - to była ironiczna wypowiedź odnośnie kompresji bezstratnej robionej na bazie stratnej. Ciekaw jestem, jakie ratio kompresji by było po dołączeniu informacji o "stratach" :] Bo imho byś tylko rozdmuchał rozmiary pliku.

0
ŁF napisał(a)

Ciekaw jestem, jakie ratio kompresji by było po dołączeniu informacji o "stratach" :] Bo imho byś tylko rozdmuchał rozmiary pliku.

Weźmy jako przykład kompresję użytą w jpg - jest tu transformacja DCT - stratna, później idzie huffman.
Otrzymujemy lekko zaburzony obraz - kolory poszczególnych pikseli różnią się niewiele od oryginału,
zatem można je zapamiętać na kilku bitach (pewnie 2-3 bity).

Różnice te mają rozkład nierównomierny:
im większa tym mniejsze prawdopodob. wystąpienia (najwięcej jest zer),
kompresując to haffmanem (albo lepiej arytmetyczną) uzyskamy bardzo dobrą kompresję.

Zresztą ja tego nie wymyśliłem - zrobili to fachowcy od statystyki i rachunku prawdop.

0
at. napisał(a)
ŁF napisał(a)

Ciekaw jestem, jakie ratio kompresji by było po dołączeniu informacji o "stratach" :] Bo imho byś tylko rozdmuchał rozmiary pliku.

Weźmy jako przykład kompresję użytą w jpg - jest tu transformacja DCT - stratna, później idzie huffman.
Otrzymujemy lekko zaburzony obraz - kolory poszczególnych pikseli różnią się niewiele od oryginału,
zatem można je zapamiętać na kilku bitach (pewnie 2-3 bity).

Różnice te mają rozkład nierównomierny:
im większa tym mniejsze prawdopodob. wystąpienia (najwięcej jest zer),
kompresując to haffmanem (albo lepiej arytmetyczną) uzyskamy bardzo dobrą kompresję.

Zresztą ja tego nie wymyśliłem - zrobili to fachowcy od statystyki i rachunku prawdop.

Dla ŁF chodzi o to, że jak już skompresujesz wszystko ładnie stosując metodę stratną, to aby móc odtworzyć oryginał, z zachowaniem każdego szczegóły (czyli tak, jakbyś bezstratnie kompresował), to musisz dołączyć różnice.
Pomimo, że różnice nie będą mocno odbiegać wartościami od "zera", to ich kompresja wcale nie będzie tak piękna, aby suma danych z kompresji stratnej i bezstratnej była dużo mniejsza od kompresowanego tradycyjnie. Lepie już chyba wtedy zastosować tradycyjnie DPCM, tylko z odpowiednim modelowaniem danych. Wówczas zapisujesz prawie tylko te różnice, które dobrze sie kompresują.

0
Dryobates napisał(a)

Pomimo, że różnice nie będą mocno odbiegać wartościami od "zera", to ich kompresja wcale nie będzie tak piękna, aby suma danych z kompresji stratnej i bezstratnej była dużo mniejsza od kompresowanego tradycyjnie.

Można to łatwo sprawdzić:

  1. skanujemy zdjęcie - zapisujemy do bmp 24bpp (albo tiff lub coś tam bezstratnego - png, rle, itp.)
  2. zapisujemy to jako jpg - można tu pokombinować z kwantyzacją (gorsza jakość = lepsza kompresja)
  3. czytamy oryginał i ten jpg - robimy różnicę i pakujemy to jakimś rle, png, ...

Teraz można zobaczyć ile zajmują te dwa pliki: obrazek.jpg + różnice.png

Dryobates napisał(a)

Lepie już chyba wtedy zastosować tradycyjnie DPCM, tylko z odpowiednim modelowaniem danych. Wówczas zapisujesz prawie tylko te różnice, które dobrze sie kompresują.

Predykcja może jest dobra, ale szczerze mówiąc nigdy nie widziałem jej w akcji.
Chyba używają tego bezstratne jpg - takiego też nigdy nie spotkałem (pewnie dlatego,
że są zbyt wielkie... :-D ).

Prawdopodobnie lepiej użyć DCT i pominąć kwantyzację, wtedy straty nie występują
(mogą tu powstać przekłamania związane z obliczeniami na liczbach rzeczywistych,
ale to nie powinno powodować strat - błąd bezwzg. będzie mniejszy niż 0.5*2^-8)

0
at. napisał(a)

Predykcja może jest dobra, ale szczerze mówiąc nigdy nie widziałem jej w akcji. [..]

Poznaj rodzinę PAQ - najlepszysh na świecie kompresorów bezstratnych ogólnego przeznaczenia: PAQAR4 (swojego czasu rekordzista świata), PASqDa 4.1 (polskie dzieło), itd; http://en.wikipedia.org/wiki/PAQ. Mówimy o kompresji kosztem czasu/pamięci/wszystkiego - liczy się rozmiar. To właśnie są kompresory z mieszaniem kontekstowym oparte o algorytmy statystycznego przewidywania przez częściowe dopasowanie (PPM - Prediction by Partial Matching) http://pl.wikipedia.org/wiki/PPM_%28kompresja%29 .

Sorry za lekki of-topic, ale myślę, że w ramach tematu może to kogoś zainteresować. W dodatku ta rodzina kompresorów jest w pełni open-source.

1 użytkowników online, w tym zalogowanych: 0, gości: 1