PSNR이란?

영상데이터나 음성데이터를 처리하는 과정에서 흔히 등장하는 것이 PSNR이라는 개념입니다.
PSNR을 비교한다는둥, PSNR이 얼마냐는둥의 표현이 여러군데에서 등장하는데,
PSNR이 무엇인지를 간단하게 소개하겠습니다.

PSNR은 SNR을 약간 변형해서 영상처리나 음성처리에서 사용하는 것입니다.

SNR은 Signal-to-noise의 약자로 신호와 잡음의 비율을 수치로 표현한 것입니다.
사용자 삽입 이미지

보통 SNR은 그대로 표현하기 보다는 log를 씌워서 dB 단위로 표현합니다.
사용자 삽입 이미지

이렇게 말이죠...


PSNR은 두 영상이나 음성의 차이를 숫자로 표현하는 것인데, 아래와 같은 식으로 표현됩니다.

사용자 삽입 이미지
여기서, MSE는 아래와 같습니다. 변수가 i, j 2개인 것은 영상처리를 기준으로 식을 썼기 때문에 가로, 세로를 표현하기 위해 2개입니다. 음성처리에서는 1개입니다.
(물론, 영상처리에서도 실제로는 1개를 사용합니다. 속도를 위해서요)
사용자 삽입 이미지

즉, MSE란 두 개의 같은 양의 데이터에 대해 동일한 위치에 대해 분산을 계산하는 것입니다.
(분산의 용도는 약간 다르지만, 수식적으로는 비슷합니다)

참고로, MSE는 Mean squared error의 약자인데, 우리말로 하면 "오차 제곱의 평균"이 됩니다. (역순으로 해석해야 하니까요)
그런데, 대부분의 책자에서 "평균 제곱 오차"라고 표현하고 있습니다.
해석이 되지 않는 표현을 억지로 쓰는 것은 양복에 갓을 쓰는 것과 같지 않을까요?

Signal power을 noise power로 나누는 것은 기존 SNR과 유사한데, 문제는 모든 영상을 대표하는 signal power가 없다는 것입니다.
그래서, 255의 제곱(65025)으로 signal power를 대신합니다.
물론, 255는 8비트 픽셀의 최고값이구요.
(당연히 16비트 픽셀이라면 65535의 제곱으로 계산해야 합니다)

두 영상이 완벽하게 동일하다면 분자인 MSE가 0이므로 PSNR은 무한대가 됩니다.

일반적으로 30dB가 넘으면 두 영상의 차이를 눈으로 구분하기 어렵다고 합니다.
그리고, 내용기반 탐색으로 두 영상을 비교할 때는 11dB 이상이면 꽤 유사도가 있는 영상이라고 하구요.

비디오 코덱에 대해 평가할 때도 압축률을 얼마로 했을 때 원본 동영상과의 PSNR을 비교해서 코덱의 우열을 비교합니다.

비디오 코덱에서 이 PSNR이 애매한 사안이 될 수 있습니다.
왜냐하면 PSNR이 크다고 반드시 화질이 좋은 것은 아니기 때문입니다.
화질이 좋다는 것은 주관적인 판단이 포함될 수 있기도 하고, 화질이라는 것이 인간 인지능력의 영역이기 때문이기도 합니다.

또, 없어진 부분을 복원하는 경우 얼마나 원래의 영역을 잘 재구성했는지를 PSNR로 표현하기도 합니다.