解碼器輸出PSNR為0表示什麼

2021-04-12 22:15:26 字數 2054 閱讀 3472

我想很多朋友在解碼器輸出時都會看到

psnr等於0

的情況,這代表了什麼意思呢?這表示你解碼得到的影象和參考影象是一致的。下面基於

baseline

的情況詳細說明一下。

首先看ldecod.c

中的main()

函式init_conf(input, argv[1]);

…img->idr_psnr_number=input->ref_offset;

顯然這邊的

init_conf()

是從decoder.cfg

配置檔案中讀取資料,並且

input->ref_offset

對應的是配置檔案中的

snr computation offset

的值,在預設的情況下,

jm8.6

設定為0

。接著看

image.c

中的find_snr()

函式,這就是用來計算

psnr

數值的。

if (psnrpoc==0 && img->psnr_number)

img->idr_psnr_number=img->psnr_number + 1;

img->psnr_number=max(img->psnr_number,img->idr_psnr_number+psnrpoc);

frame_no = img->idr_psnr_number+psnrpoc;

這邊計算出了

frame_no

的值,這個變數代表了什麼含義,個人認為,應該是表示當前解碼影象的參考影象

(這個參考影象並不是指

listx

中的,而是指參考序列中的

)序號,為什麼這麼認為,請看下面。

rewind(p_ref);//

使檔案的位置指標重新返回檔案的開頭

for (i=0; i

}這段**什麼含義呢,很清楚,看下面的圖。

接著看下面的求亮度

psnr

的**,色度的類似。

for (j=0; j < p->size_y; j++)

for (i=0; i < p->size_x; i++)

imgy_ref[j][i]=fgetc(p_ref);

//以frame_no=3

的情況,那麼此時

imgy_ref

就是得到了

ref3

的亮度資料

img->quad[0]=0;

diff_y=0;

for (j=0; j < p->size_y; ++j)}//

比較參考影象和解碼影象並求得

sad …

if (diff_y != 0)

snr->snr_y=(float)(10*log10(65025*(float)(p->size_x)*(p->size_y)/(float)diff_y));

else

snr->snr_y=0;

//如果前面的

diff_y等於0

,那麼psnr就是0

,反之,按公式求

分析了這麼多,可能大家還是不明白原因,那麼我想說,一切根源其實就在

decoder.cfg

配置檔案中

snr computation offset

的值的選取,如果取預設的

0,那麼在求

diff_y

的時候,就是計算當前解碼影象和對應序號的參考影象差值,如果取

1,那麼就是計算當前解碼影象和後一序號的參考影象的差值,以此類推。因此我們不難看出,當

snr computation offset

的值為0

,且解碼影象沒有誤碼的情況,跟它序號相同的參考影象比較的

diff_y

肯定是0

,相應的,根據上面的**,那麼最後求得的

psnr

肯定也是0拉。

解碼器基礎

初次接觸解碼器的童鞋可能會問,解碼器是什麼?首先,我們需要明確,電腦和人類溝通,需要轉換。因為人類對於抽象語言比較擅長,而當前的計算機本質上只能識別0 1二進位制串。因此,人類所表達的知識要被電腦接受,需要將其轉換編碼成二進位制數,這一過程可以理解為編碼 而人類要理解計算機給我們計算的結果,則需要將...

顯示解碼器

記數字電子技術學習筆記 顯示解碼器組成 邏輯功能 將數字 0 9 文字,符號,等的二進位制 翻譯並顯示出來的電路叫顯示解碼器。它包括移碼驅動電路和數碼顯示器兩部分。按發光物質分,數碼顯示器可以分為以下四種型別 半導體顯示器 亦稱發光二極體 led 顯示器 螢光數字顯示器 如螢光數碼管,場效應數字板等...

linux totem 安裝解碼器

fedora 10.如果啟用 rpm fusion 軟體倉庫,它會自動搜尋並安裝 解碼器。開啟乙個終端吧,輸入 or.http rpmfusion.org 把這裡的源加上 yum install gstreamer plugins good gstreamer plugins bad gstream...