Расчет PSNR при потере пакетов H.264

Я транслирую видео H.264 (libx264) с использованием RTP. Я хотел бы сравнить различные методы защиты от ошибок в h.264. В некоторых исследовательских работах для их сравнения использовался psnr. Поэтому я хотел бы знать, как рассчитать psnr видео h.264 во время потоковой передачи.


person K07    schedule 03.01.2014    source источник


Ответы (1)


Чтобы рассчитать PSNR, вы должны сравнить два кадра, поэтому первый шаг — убедиться, что у вас есть копия исходного видео. Далее, вы должны быть в состоянии сопоставить кадры 1:1. поэтому, если кадр пропущен, вам нужно сравнить исходный кадр с предыдущим потоковым кадром. Это может быть сложно, если временные метки не совпадают (они могут быть изменены сервером RTP). Затем декодируйте каждый кадр в его каналы YUV. PSNR каналов необходимо рассчитывать независимо. Вы можете усреднить три значения PSNR в конце, но это придает слишком большой вес каналам U, V. Я рекомендую использовать только канал Y, так как он наиболее важен. И поскольку вы измеряете потерю пакетов, значения в любом случае будут сильно коррелированы.

Затем рассчитайте среднеквадратичную ошибку следующим образом:

int64_t mse = 0;
for(int x = 0 ; x < frame.width  ; ++x ) {
for(int y = 0 ; y < frame.height ; ++y ) {
    mse += pow( source_frame[x][y] - streamed_frame[x][y], 2 );
}}
mse *= 1.0/(frame.width*frame.height);

И наконец:

/* use 219 instead of 255 if you know your colorspace is BT.709 */
double psnr = 20 * log10( 255 ) - 10 * log10( mse );

Вы можете усреднить PSNR для каждого кадра вместе, чтобы получить PSNR для полного потока.

person szatmary    schedule 03.01.2014
comment
некоторые кадры не несут шума или очень незначительный шум (mse очень мал). Итак, чтобы рассчитать средний psnr, нужно ли нам также включать psnr этих кадров? - person K07; 07.01.2014
comment
Я не знаю ваших настроек, но это зависит от того, что вы пытаетесь измерить. Один «метод устойчивости к ошибкам» может работать лучше на отдельных кадрах, ухудшая качество потока в целом, или наоборот. Вы хотите знать ошибку на кадр или ошибку с течением времени? - person szatmary; 07.01.2014