2012-05-16 18 views
6

Nie jestem biegły w żaden sposób z kompresją wideo, ale obecnie pracuję nad projektem, w którym kompresuję pozostałe obrazy za pomocą H.264Enkoder z korekcją ruchu bloku - jak radzić sobie z szumem blokowym w ramce odniesienia?

Moje pytanie jest bardziej ogólne w odniesieniu do koderów wideo. Jak rozumiem (jak wyjaśnia Wikipedia), koder z kompensacją ruchu bloku dzieli bieżącą ramkę na kilka bloków nie nakładających się, dla każdego bloku, który sprawdza w ramce odniesienia, z której pochodzi bieżący blok, następnie oblicza różnicę żądany blok i blok skompensowany ruchem, a następnie w jakiś sposób koduje to szczątkowe.

Wikipedia stwierdza: "Główną wadą kompensacji ruchu bloków jest to, że wprowadza nieciągłości na krawędziach bloków (blokujące artefakty) .Te artefakty pojawiają się w postaci ostrych poziomych i pionowych krawędzi, które są łatwo zauważane przez ludzkie oko i wytwarzają efekty dzwonienia (duże współczynniki w podpasmach wysokiej częstotliwości) w transformacji związanej z Fourierem, stosowane do kodowania transformacyjnego pozostałych ramek. "

A zatem, ponieważ ramka odniesienia zawiera już artefakty bloków (ponieważ została zakodowana), a następnie te artefakty bloków są przesunięte do bieżącego bloku i obliczana jest wartość rezydualna, a następnie wysokie częstotliwości tworzone przez artefakty bloków na granicach przesuniętego bloku również pojawi się jako nieciągłość w reszcie. A nieciągłości są na ogół szkodliwe dla kompresji.

Czy enkoder blokowy skompensowany ruchem w jakiś sposób radzi sobie z tymi artefaktami bloku przed kompresją reszty? ponieważ wie dokładnie, w jaki sposób przesunięto blok, wie, gdzie znajdują się granice bloków i może coś z nimi zrobić przed lub podczas kodowania resztek, usuwając/ignorując niepotrzebne wysokie częstotliwości w tym miejscu. Jeśli coś takiego jest wykonywane w kodeku, takim jak H.264, czy ktoś może wyjaśnić główny koncept tego, jak robi to koder, podać trochę terminologii i tak dalej? W jaki sposób enkoder radzi sobie z artefaktami bloków w ramce odniesienia?

+1

niesamowite pytanie ... dobrze włożyć! – Alex

Odpowiedz

0

@Mat: To jest dobre pytanie i prawdopodobnie otwarty obszar do badań w kodowaniu wideo. Krótka odpowiedź jest taka, że ​​zgodnie z moją wiedzą, kodery wideo obecnie nie robią nic, by poradzić sobie z wpływem artefaktów blokowych na estymację ruchu.

Możliwe jest, że w przypadku szybkiego ruchu w obszarach o niskiej szczegółowości, jeśli istnieją znaczące artefakty blokowe, wektory ruchu może czasami być wielokrotnością rozmiaru bloku :) czyli innymi słowy, estymacja ruchu wyszukuje bloki poprzednia klatka, a nie szczegóły oryginalnego obrazu. Jest to prawdopodobnie dość rzadkie; wymaga zarówno szybkiego ruchu, dość pozbawionego cech obszaru obrazu, jak i wyraźnie niewystarczającej szybkości transmisji bitów. Prawdopodobnie możesz skonstruować syntetyczne sekwencje wideo, które to demonstrują. Czy jest jakiś sposób, aby wiedza o granicach blokowych mogła pomóc, nie jest jasna; jeśli krawędzie bloków wprowadzają komponenty o wysokiej częstotliwości do resztek następnej klatki, to musimy wydać bity, aby skasować/poprawić te sztucznie wprowadzone elementy, czy wiemy, że pochodzą one z artefaktu blokowego, czy nie ... i nawet wtedy , wydawanie bitów na tym może być lepszą decyzją niż użycie innego obszaru odniesienia/wektora ruchu/typu bloku.

Jednak współczesne kodeki, takie jak H.264 i VP8, mają in-loop deblocking filter, innymi słowy dekodowana ramka jest odblokowywana przed użyciem jako odniesienie, co redukuje hałas bloku, a zatem prawdopodobnie minimalizuje efekt problemu, który masz poprawnie zidentyfikowane.

+0

@Mat: czy to odpowiada na twoje pytanie? Jeśli tak, pamiętaj, aby zaakceptować odpowiedź. Jeśli nie, daj mi znać, jeśli masz coś konkretnego, co mogę wyjaśnić. –