대부분의 동영상 압축 표준들은 하나의 프레임을 여러개의 작은 블럭들로 나눠서 압축을 수행합니다.

블럭들이 따로따로 압축되기 떄문에 그 부작용으로 이웃한 블럭의 경계가 어긋나 보이는 블럭화 현상이 발생하기도 하는데

이러한 블럭화 현상을 완화시켜주는 필터를 디블럭 필터(Deblocking Filter)라고 합니다.


H.264/AVC 표준의 In-Loop Deblocking Filter도 기본적인 개념은 디블럭 필터와 동일합니다.

압축에 의해 발생한 블럭화 현상을 완화시켜 주는 것이 목적입니다.

하지만 인코딩 또는 디코딩 과정의 내부에서 작동한다는 것이 여타 디블럭 필터와는 다른 점이죠.



예를 들어 아래와 같은 3장의 연속한 프레임을 각각 I, P, P 프레임으로 압축하는 상황을 가정해보면,


먼저 첫 번째 프레임을 I프레임으로 압축합니다.

I프레임참조프레임 없이 독립적으로 압축되는 프레임입니다. 이러한 압축 방식을 인트라 코딩이라고 하는데

다른 프레임들과 비교해서 그 차이값을 저장하는 것이 아니라 해당 프레임만을 가지고 압축하는 방식입니다.


다음으로 두 번째 프레임을 P프레임으로 압축해야 합니다.

P프레임은 앞서 압축된 I프레임을 참조해서 압축되는 프레임입니다. 이러한 압축 방식은 인터 코딩이라고 하는데

참조프레임인 I프레임과 압축하려는 프레임(두 번째 프레임)을 비교해서 그 차이값만 저장하는 방식입니다.

그런데 I프레임은 이미 압축된 상태이기 때문에 비교에 사용하려면 I프레임의 압축을 다시 풀어줘야겠죠.

따라서 아래와 같이 먼저 I프레임의 압축을 풀어 놓고, 두 번째 프레임과 비교해서 그 차이값을 P프레임으로 압축(저장)합니다.


여기까지가 In-Loop Deblocking Filter를 사용하지 않았을 때의 압축 과정입니다.


그런데 잘 살펴보면 P프레임은, 압축으로 인해 화질 열화(블럭화 현상)가 발생한 I프레임을 참조하고 있죠.

따라서 I프레임의 블럭화 현상이 심할수록 두 번째 프레임과 비교(참조)했을 때 그 차이값도 커지게 됩니다.

반대로 I프레임이 원본인 첫 번째 프레임과 비슷할수록(블럭화 현상이 적을수록) 차이값은 작아질 겁니다.

즉, 참조프레임인 I프레임의 블럭화 현상을 완화시켜주면 P프레임으로 압축하는 과정을 더 효율적으로 수행할 수 있다는 말이죠.


그래서 다음 그림과 같이 참조프레임(압축이 풀린 I프레임)에 디블럭 필터를 적용한 후에 비교(참조)하도록 만드는 것이

H.264/AVC 표준의 In-Loop Deblocking Filter입니다.


세 번째 프레임을 P프레임으로 압축하는 과정도 위와 비슷합니다.

P프레임(두 번째 프레임)의 압축을 풀고 -> 디블럭 필터를 적용한 다음 -> 비교(참조)해서 P프레임으로 압축하는 것이죠.



이처럼 In-Loop Deblocking Filter참조프레임에 디블럭 필터를 적용함으로써 인터 코딩시의 압축 효율을 높이는 기술입니다.

따라서 인코딩시 In-Loop Deblocking Filter가 사용된 영상은 디코딩 과정에서도 마찬가지로 In-Loop Deblocking Filter가 적용되어야합니다.

위 예시에서의 P프레임들에 저장된 데이터는 디블럭 필터가 적용된 I프레임 또는 P프레임을 참조한 것이기 때문에

해당 영상을 재생(디코딩)할 때에도 인코딩과 똑같은 과정을 거쳐야만 인코더가 원래 의도한 영상을 볼 수 있는 것이죠.





Posted by 김코덱