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:
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?
źródło
Odpowiedzi:
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:
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:
Również coś z dużą ilością kolorów. Może spójrz na rzeczywiste fraktale zamiast fraktalnego hałasu. Może fraktal Mondrian ? :)
źródło
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:
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.
źródło
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.
źródło
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.
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.
źródło
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:
Być może lepszym sposobem na zbudowanie takiego obrazu byłaby praca bezpośrednio w dziedzinie częstotliwości, a zatem:
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.
źródło
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.
źródło
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.
Oglądane z daleka:
źródło
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.
źródło
Oto inne podejście, które zyskuje szum RGB Browna (4096 x 4096 GIF).
źródło
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ą !!!.
źródło