Jaki jest najmniej kompresowalny JPG? (aparat fotograficzny, materiał, skala / kąt / oświetlenie mogą się różnić)


46

Próbuję zaprojektować materiał, który z punktu widzenia aparatu bardzo trudno jest skompresować za pomocą JPG, co powoduje powstanie dużych plików (lub prowadzi do niskiej jakości obrazu, jeśli rozmiar pliku jest ustalony).

Musi działać, nawet jeśli materiał znajduje się daleko od aparatu lub jest obrócony (powiedzmy, że skala może wynosić od 1x do 10x).

Hałas jest całkiem dobry (trudny do skompresowania), ale staje się szary, gdy patrzy się z daleka, i staje się łatwy do skompresowania. Dobrym wzorem byłby rodzaj fraktala , wyglądającego podobnie we wszystkich skalach.
Liście są lepsze (liście, maleńkie gałęzie, małe gałęzie, duże gałęzie), ale używa zbyt mało kolorów.

Oto pierwsza próba: Najbardziej nieściśliwy

Jestem pewien, że jest więcej optymalnych wzorów.
Może teselacje sześciokątne lub trójkątne działałyby lepiej.

JPG korzysta z przestrzeni kolorów Y ′ Cb Cr , myślę, że Cb Cr można wygenerować w podobny sposób, ale myślę, że lepiej nie używać równomiernie pełnego zakresu Y '(jasność), ponieważ kamera nasyca jasne lub ciemne obszary ( oświetlenie nigdy nie jest idealne).

PYTANIE: Jaki jest optymalny wzór tkaniny dla tego problemu?


1
Będę musiał pilnować tego pytania ... jeśli uda się uzyskać ciekawą odpowiedź, mogę przewidzieć zamówienie na tkaninę na stronie www.spoonflower.com (lub podobnej usłudze) i naprawdę ciężko spojrzeć na koszulę do dodania do mojej kolekcji ;-)
RBerteig

Ciekawym projektem konkursowym na wzór może być: 1) Zrób zdjęcie takiego wzoru w wysokiej rozdzielczości 2) Obróć go, weź losową jego część (w losowej skali), trochę rozmycie, dodaj trochę szumu i mały losowy kolor odchylenie 3) Skompresuj go za pomocą JPG 4) Zobacz rozmiar pliku, oblicz mierniki dotyczące utraty jakości i oblicz „wynik” za pomocą tych mierników. 5) Powtórz wiele razy, aby uzyskać średni wynik tego wzoru 6) Powtórz z innymi wzorami i porównaj wyniki
Nicolas Raoul,

1
Ponieważ algorytmy stratne zawsze mogą kompresować więcej, wyrzucając więcej danych, wydaje się, że miałbyś więcej szczęścia w stosowaniu wzorców zależnych od szczegółów wysokiej częstotliwości. Na przykład cienkie linie. Innymi słowy, może dobrze kompresować, ale bardzo szybko obniża jakość. To zależy od tego, co chcesz osiągnąć. Pomyśl o odciskach palców - to klasyczny przypadek, w którym falki były wymagane do dobrej kompresji w stosunku do JPEG ze względu na potrzebę zachowania szczegółów.
Datageist

@datageist: Zdjęcie (surowe wyjście kamery) szmatki z liniami może być trudne do skompresowania, ale cofnij się, zrób kolejne zdjęcie: będzie zawierać tylko szare piksele, bardzo łatwe do skompresowania bez prawie żadnych strat. Wzorzec, którego szukam, musi dawać zdjęcia (surowe wyjście aparatu) trudne do skompresowania w szerokim zakresie skal.
Nicolas Raoul,

@NicolasRaoul Racja, rozumiem, mówię tylko, że wszystko można skompresować, jeśli wyrzucisz wystarczającą ilość informacji. Czy chcesz po prostu wzór, który wyróżnia się tym, że jest „trudny do skompresowania” (tj. Dla zabawy), czy też próbujesz aktywnie zniechęcać ludzi do próby kompresowania obrazów zawierających ten wzór?
Datageist

Odpowiedzi:


15

Hałas jest całkiem dobry (trudny do skompresowania), ale staje się szary, gdy patrzy się z daleka, i staje się łatwy do skompresowania. Dobrym wzorem byłby rodzaj fraktala, wyglądającego podobnie we wszystkich skalach.

Jest hałas fraktalny . Myślę, że hałas Browna jest fraktalny i wygląda tak samo, jak na niego przybliżasz. Wikipedia mówi o dodawaniu do siebie szumu Perlina w różnych skalach w celu wytworzenia szumu fraktalnego, który może być identyczny, nie jestem pewien:

Hałas fraktalny Perlina

Nie sądzę jednak, że byłoby to trudne do skompresowania. Hałas jest trudny do bezstratnej kompresji, ale JPEG jest stratny, więc po prostu wyrzuci szczegóły, zamiast się z tym zmagać. Nie jestem pewien, czy można zrobić coś „trudnego do kompresji JPEG”, ponieważ po prostu zignoruje wszystko, co jest zbyt trudne do skompresowania na tym poziomie jakości.

Lepiej byłoby coś z twardymi krawędziami w dowolnej skali, jak na przykład nieskończona płaszczyzna szachownicy:

nieskończona płaszczyzna szachownicy

Również coś z dużą ilością kolorów. Może spójrz na rzeczywiste fraktale zamiast fraktalnego hałasu. Może fraktal Mondrian ? :)

Fraktal Mondriana


1
Wielkie dzięki! Fraktalny hałas jest zdecydowanie tym, czego szukałem, ale w moich testach jest dobrze skompresowany, myślę, że mógłby użyć bardziej nagłego przejścia, zamiast gładkości podobnej do mapy cieplnej. Problem z szachownicą polega na tym, że wydajność będzie naprawdę zależeć od tego, która część materiału zostanie zrobiona na zdjęciu. Fraktal Mondriana jest świetny i jak dotąd najlepiej wypadł w moich testach. Może przydałoby się więcej kolorów i nieco inne parametry.
Nicolas Raoul,

@NicolasRaoul: Hmm .. Może dywan Sierpińskiego w kolorach ? To już powszechny wzór pikowania .
endolith

Teselacja trójkątów lub kwadratów Sierpińskiego może być naprawdę świetna!
Nicolas Raoul,

14

Gdybyśmy mówili o obrazach generowanych komputerowo, właściwym rozwiązaniem byłby hałas. Ale tutaj jest krok przechwytywania z kamery.

Fraktali bit jest bardzo ważne ze względu na skalę problemu niezmienności. Nie musi to jednak być naprawdę fraktal, jeśli weźmie się pod uwagę ograniczony zasięg odległości, na którym osoba będzie fotografowana. To znaczy, jeśli osoba nosząca materiał znajduje się w tle zdjęcia, i tak nie będzie to miało większego wpływu ...

Myślę, że najlepszym sposobem na oszukanie kodera JPEG byłoby posiadanie bloków o bardzo wysokich współczynnikach wysokiej częstotliwości, które przetrwałyby kwantyzację = wiele szczegółów i ostrych krawędzi; więc cała sekwencja współczynników musi być wyraźnie zapisana (zamiast EOB przy 15 współczynniku). Wzór szachownicy to dobry sposób na osiągnięcie tego. Jedynym minusem, jaki widzę, jest to, że niska rozdzielczość obiektywu + filtry antyaliasingu aparatu mają dużą szansę na rozmycie! Wszystko powinno się zdarzyć w obrębie bloków 8x8 (lub 16x16 bloków chrominancji), ponieważ JPEG nie robi wiele w skali makro. Musisz sprawić, aby Twoje klocki 8x8 były tak niechlujne, jak to możliwe, bez względu na to, jak zamazany będzie obiektyw.

Oto sugestia:

wzór niezmienny w skali, trudny do kompresji JPEG

Możesz się zastanawiać, co robią tutaj mniej kontrastujące bloki, ale pomagają zachować strefę kontrastu, gdy obiekt jest pomniejszony. Wyzwanie polega na tym, aby mieć coś o kontrastowym wzorze, bez względu na skalę oglądania.

Formalnie tego nie oceniłem. Najlepszym sposobem byłoby posiadanie skryptu, który wykonuje zdjęcie, stosuje tuzin kadrowania / zmiany rozmiaru / rozmycia z różnymi parametrami i pluje całkowity rozmiar plików JPEG.


Wielkie dzięki! Wygląda dość podobnie do mojej koncepcji obrazu w pytaniu, ale o wiele ładniej. Czy jest jakiś konkretny powód, dla którego „fraktalność” ma czynnik 4? Czy to jest lepsze niż czynnik 2?
Nicolas Raoul,

nie ma powodu, po prostu starałem się, aby wyglądał ładniej dzięki większej liczbie odcieni, więc zacząłem od kwadratu 4x4.
fenenety

Czy jest jakiś powód, aby wybrać kwadraty zamiast trójkątów? Próbuję teraz, trójkąty mają wiele ostrych krawędzi, co moim zdaniem jest dobrym pomysłem. Niska „fraktalność” może być osiągnięta dzięki podejściu hybrydowemu → trójkąt → romb → sześciokąt → trójkąt. Myślę, że niski współczynnik jest dobrą rzeczą, ponieważ zwiększa prawdopodobieństwo wykrycia przez aparat ostrych kształtów do granicy rozdzielczości.
Nicolas Raoul,

Kwadraty były najłatwiejszą do zakodowania. Nie jestem pewien, czy inne kształty mają lepszą „gęstość krawędzi” niż kwadraty.
pikenety

11

Istnieje różnica między wersją JPEG i kompresowalną transformacją.

Weźmy na przykład biały ziarnisty szum telewizora.

Ogólny szum biały rozkłada się maksymalnie na częstotliwość, a zatem nie ma lepszego przykładu niż szum biały, którego żadna technika kodowania w dziedzinie transformacji nie jest w stanie skompresować. Jeśli weźmiesz taki hałas i weź DCT (lub DFT, jeśli jest to wymagane), przekonamy się, że dziedzina częstotliwości ma również szeroki zasięg i wszystkie współczynniki będą miały znaczenie.

Jednak nadal nikt nie powstrzymuje cię przed agresywnością od kwantyzacji. W ten sposób nadal możesz odrzucić dużą ilość z regionów o wysokiej częstotliwości. Wynik będzie miał duży błąd średniej kwadratowej. Jednak percepcyjnie nadal byłby to hałas. Może to być mocno rozmyte.

Z drugiej strony, teraz rób zdjęcia tam, gdzie są ostre krawędzie.

Ostre krawędzie będą również rozprzestrzeniać się na wyższej częstotliwości (ale może być tak, że może być tylko trochę mniej niż w poprzednim przypadku). Jednak podczas próby skompresowania go i spadku wysokiej częstotliwości pojawią się poważne przeszkody wizualne. Wprowadzi rozmycie krawędzi, efekt dzwonienia itp. Podczas gdy rozpiętość pasma dla takich obrazów nie jest najwyższa z możliwych, w przypadku JPEG lub innej równoważnej kompresji, utrzymanie takich obrazów percepcyjnie równej jakości będzie trudne.

W przypadku stratnej kompresji, twarda i prosta zależy od tego, ile i jaki rodzaj zniekształceń jest tolerowany.


Powiedzmy, że moja tkanina to 10 ^ 8x10 ^ 8 tabeli losowych czarnych / białych pikseli. Aparat wykonuje zdjęcie materiału w rozdzielczości 10x10 pikseli. Statystycznie, czy ten obraz 10x10 nie ma wszystkich pikseli o bardzo podobnej szarości, dzięki czemu można go łatwo skompresować przy mniejszym zniekształceniu (dowolnego rodzaju) niż obraz mniej jednolity?
Nicolas Raoul,

10

Poniższa kompozycja pokazuje fraktalną strukturę wzoru. Każde następne zdjęcie jest wynikiem uśrednienia dla każdego bloku 2x2 pikseli poprzedniego. Całkowity charakter wzoru pozostaje taki sam, ale kontrast obrazu stopniowo maleje. Jak powiedziano wcześniej, obraz staje się szary, gdy pomniejszamy.

Skalowanie

Ale używając właściwości fraktali, moglibyśmy nałożyć na siebie kilka wzorów o różnej rozdzielczości, aby utrzymać kontrast obrazu, aby był stabilny w pożądanym zakresie. Poniżej znajduje się przykład 4-warstwowego wzoru (512x512 GIF). Ten wynik jest bardziej zbliżony do szumu Browna, a także trudny do kompresji JPEG.

4-warstwowa kombinacja


5

Domyślam się, że najgorszym kompresowalnym wzorem byłby biały szum (o jednolitym rozkładzie). Musi wyglądać głośno w różnych rozdzielczościach, aby można było tworzyć głośne obrazy w przestrzeni skali, a następnie składać je razem:

I=inNiGi

INiiGiiσ

Być może lepszym sposobem na zbudowanie takiego obrazu byłaby praca bezpośrednio w dziedzinie częstotliwości, a zatem:

  1. Utwórz obraz wypełniony białym szumem.
  2. Wykonaj na obrazie blok IDCT 8 x 8 (odwrotna dyskretna transformacja kosinusowa).

Wynik byłby najgorszym kompresowalnym wzorcem dla JPEG, ponieważ ma najwyższą entropię w domenie DCT. Ale nie jestem pewien, jak to będzie się zachowywać przy różnych rozdzielczościach.


5

IIRC, algorytm dekompresji JPEG jest określony, jednak dokładny algorytm kompresji nie jest. Różne algorytmy mogą tworzyć legalny plik JPEG. Musisz to przetestować na wybranych kompresorach obrazu.

Wszystko można skompresować w tej samej ilości za pomocą kompresora stratnego, takiego jak JPEG. Po prostu na dowolnym stałym poziomie kompresji jakość kompresji może się różnić (szum lub błąd w wyniku dekompresji wzrośnie) w zależności od obrazu. Chcesz więc czegoś, co doda maksimum hałasu do zdekompresowanego wyniku. W tym celu potrzebny jest maksymalny błąd przy usuwaniu współczynników makrobloku wysokiej częstotliwości i kwantyzacji dowolnych współczynników.

Co prawdopodobnie oznacza zmienne pikiety o wysokiej częstotliwości, a także zmienne skale szarości i kolorów, które zdarzają się między możliwymi poziomami kwantyzacji danej sprężarki przy danym ustawieniu.

Ponieważ chcesz, aby działało to w dowolnej odległości w dowolnym oświetleniu, musisz zmienić częstotliwość pikiet (być może fraktalna, a może po prostu rampowana z losową modulacją częstotliwości) oraz poziomy koloru i szarości (niespójnie, np. Zmieniać kolory i poziomy niezależnie). Wariancja odcieni będzie mniej zależała od odległości, więc te muszą zostać wybrane, aby były gorsze dla wybranego kwantyzatora. Średni rozmiar wzorów kolorów może być dwa razy większy niż wzorców luminancji, aby pasowały do ​​składu makrobloku YUV 4: 1: 1 (obszar).

Zaczynam od szeregu bardzo kolorowych wzorów mory w bardzo różnych skalach, nałożonych i / lub połączonych fraktalnie.


2

Pozwól, że podzielę się wzorem, który ma bardzo płaskie spektrum (jak biały szum). Tak więc ten wzór jest bardzo trudny do skompresowania za pomocą JPG. Poniższy przykładowy obraz jest powiększany 4 razy.

Sam wzorzec jest regularny, ale nieokresowy i może być łatwo wygenerowany przez algorytm deterministyczny. Ma także właściwość fraktalna.

Nieokresowy wzór z widmem quasi białego szumu

Oglądane z daleka: oryginał daleko


2

Losowy hałas rzeczywiście kompresuje się bardzo słabo. Możesz go wyprodukować w kolorze, generując niezależne wartości R, G, B.

Patrzenie z dystansu rzeczywiście usunie szum (poprzez filtrowanie dolnoprzepustowe) i można tego uniknąć, generując obrazy szumu w różnych rozdzielczościach, tj. Używając coraz większych pikseli i nakładając je.

Podczas dodawania obrazów stajesz przed problemem zakresu wartości, który rośnie wraz ze wzrostem liczby obrazów, pozwól N. Jeśli tylko je uśrednisz, amplituda szumu zmniejszy się jako 1 / N.

Jeśli wybierzesz nieskorelowany hałas jednolity, superpozycja spowoduje quasi-gaussowski rozkład o odchyleniu standardowym √N, więc zamiast dzielenia przez N, możesz podzielić przez √N (z odpowiednim ponownym centrowaniem), aby ograniczyć redukcję amplitudy.

Wreszcie, myślę, że lepiej pozwolić, aby wartości się zawijały, niż je nasycać, ponieważ nasycone wartości utworzą duże jednolite obszary.


2

Oto inne podejście, które zyskuje szum RGB Browna (4096 x 4096 GIF). Szum RGB Browna


0

Niesamowite pytanie! W koncepcji biały szum jest sygnałem, który nie zmienia się, gdy jest skalowany w czasie. W ten sam sposób fraktal nie zmienia się, gdy jest skalowany do rozmiaru. Proces kompresji stratnej zajmuje nie tylko najważniejsze spektrum (czas lub rozmiar), więc fraktale i szum pachną ciasteczkami. Dlatego powinieneś bawić się kolorami i wzorami swojej tkaniny. Muszą to być fraktale, a zachowanie fraktalne musi być losowo generowane na biało. Powinieneś dostać materiał, który na zdjęciu wygląda na czarny (w przestrzeni kolorów CMY), ale w prawdziwym świecie ma kolorowy wzór.

Powodzenia! , a jeśli otrzymasz odpowiedź, opublikuj ją !!!.


„Powinieneś dostać tkaninę, która na zdjęciu wygląda na czarną” <- Czy w takim przypadku nie byłby łatwo ściśliwy?
Nicolas Raoul,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.