본문 바로가기
NUKE

픽셀이 손상된 JPG 이미지, 퀄리티를 높이는 작은 편법

by 그놈궁댕이 2023. 5. 5.
반응형

픽셀이 손상된 JPG 이미지,  퀄리티를 높이는 작은 편법

 

 

***

* 이미지 프로세서에 대한 전문 지식은 부족하기 때문에, 잘못된 용어와 설명이 있을 수 있다.

* 컴퍼지터는 어쩔수없이 이미지가 압축된 소스를 사용하는 경우가 있는데, 이때 간단히 수정할 수 있는 방법을 정리 한다.

* jpg로 한정했지만, 만약 mov에 영상 손실이 많다면 활용할 수 있는 방법이다.

* 이번 설명에  가장 중요한 것은 colors space 노드를 활용해, 여러 공간으로 변환하고 그것을 활용할수 있다는 점이다.

* 퇴근하고 너무 늦은 시간에 정리하다보니, 내용과 글이 엉망이지만 생각을 정리한다는 점에서 뜻깊은 행동이라 생각한다.

 

 

 

 

 

 

 

 

 

1)  jpg가 문제가 되는 근본적 이유

영화 vfx 작업은 주로 (dpx & exr)을 기본으로 작업한다.

dpx와 exr은 이미지 손실이 적고, 고용량이기 때문에 작업하는데  큰 무리가 생기지 않는다.

 

 

 

 

exr  , dpx = 16비트 / 32비트
-> 밝기 정보를 '1~0' 을  넘는 값을 저장.
jpg = 8비트
-> 밝기 정보는 '1~0' 까지만 저장.

이미지를 jpg로 압축하는 순간 8비트로 바뀌며, 밝고 어두운 부분의 정보가 유실된다.

이렇게 손실된 정보는 되살릴 수 없다.

 

 

 

 

 

 

 

 

 

 

 

 

 

2) 영상에서 이미지를 압축하는 방법

 

(영상 & 이미지) 압축하는 방법 중엔 크로마 샘플링 방법이 있다.

 

 

 

 

쉽게 (444,422,411)이라는 용어가 있다.

인간이 컬러를 인지할때, 밝기에 민감하며, 컬러는 그다지 민감하지 않다.

이런 생물학적 특성을 이용해, 이미지를 압축할 때 밝기 정보를 제외하고, 컬러를 압축한다.

4 -> 모든 정보 저장 2 -> 절반만 저장

어떤 압축도 밝기는 무조건 압축하지 않는다.

결론적으로 말하면, 밝기 채널은 언제나 가장 정보가 많고, 보호된다는 뜻이다.

 

 

 

 

 

 

 

 

 

 

상황에 따라서 jpg로 만들어진 이미지를 합성하거나, 키잉을 해야 한다.

컴퍼지터는 jpg의 그레인과 노이즈를 제거한 뒤  합성을 한다.

모든 합성이 끝나면 그레인을 다시 적용한다.

 

jpg는 애초에 이미지 손실이 되어 있어, 그레인을 잘못 제거하면, 엣지가 검게 타거나 뭉개짐이 심할 수 있다.

이런 상황에서 사용할수 있는, 간단한 응용 방법이 있다.

 

이미지를 압축할때, 밝기 채널을 압축하지 않는다고 했다.

 

nuke는 밝기 채널을 지원하는 여러 색공간이 있다.

대표적으로 공간이 [HSV / HSL]  =  [색조 / 채도/ 밝기] 가 있지만, YCbCr 채널을 쓰는 이유는 영상을 압축하는 기본 방식이 YCbCr을 사용하기 때문이다. 그러므로 우리도 YCbCr 채널을 사용하는 게 여러모로 좋다고 생각한다.

 

 

 

 

 

 

 

 

 

 

 

nuke에서 jpg 이미지를 읽어오고, '컬러스페이스' 노드를 이용해 색공간을 YCbCr로 변경한다.

이렇게 컬러를 변경하고 나면, RGB 각각의 채널은 YCbCr 색공간으로 변경된다.

 

red 채널 -> 밝기 green 채널 -> Cb blue 채널 -> Cr

 

 

 

 

 

 

 

 

 

 

 

애초에 컬러를 이미지를 제대로 저장하려면, 4가지 정보를 각각 저장해야 했다.

Y R G B

 

문제는,  4가지 채널도 너무 많으니, 3가지 채널로 통합하며 이미지를 압축하기 시작했다는 점이다.

 

C 채널은 -> 싸이언 컬러를 말한다.

'Cb,Cr' 이름을 보면 알겠지만,  (blue , red) 2개의 채널은 저장하지만, green은 제외된다.

완전 그린이 아닌 엇비슷한 Cyan 채널을 blue와 red에 각각 섞어주고, green이 있는 것처럼 착시 현상을 유도하는 것이다.

 

 

그래서, YCbCr로 이미지를 변환하면 Cyan 톤이 기본으로 보인다.

목적은 완벽한 재현이 아니라, 효율적인 압축 방법에 있기 때문에 이런 방식이 사용된다.

최초의 TV나 디스플레이는 사양이 좋지 못했기 때문에 최대한 영상을 압축해야만 했다.

 

 

 

 

 

 

 

 

 

말은 거창했으나, 다시 정리하자면 이미지를 압축할 땐, 밝기 채널을 제외하고 압축한다.

즉, Cb,Cr 채널에 손상이 심하고, 계단 현상이 많이 생긴다.

 

red 채널 -> 밝기 green 채널 -> Cb blue 채널 -> Cr

 

nuke를 통해 YCbCr 채널을 각각 분리하고,  (Green / Blue) 채널에 blur를 적용하면, 이미지 압축으로 거칠게 생성된 픽셀을 부드럽게 처리할 수 있다.

 

 

 

 

blur 노드를 연결하고, red 채널만 끄고, 적용하면 깨진 픽셀이 중화되며, 이미지 퀄리티가 조금은 좋아 보인다.

이미지가 좋아 보일 때까지 blur 수치를 조금씩 조절한다.

 

 

모든 작업이 끝나면, 컬러스페이스 노드를 다시 연결하고 , YCbCr  컬러를 Linear 원본으로 변경한다.

 

 

 

 

jpg 이미지를 좋게 만드는  기본 원리

Colorspace
[Linear -> YCbCr]
Cb+Cr 채널 blur 적용 Colorspace
[ YCbCr -> Linear ]

 

 

 

 

 

손실이 심한 jpg를 키잉하면, 픽셀의 블록 형태로 키잉이 된다.

이럴 때, 간단하게 YCbCr로 변경하고, CbCr 채널에 블러를 적용하면 키잉이 좀 더 편해진다.

 

 

 

 

반응형

댓글