我想很多朋友在解碼器輸出時都會看到
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...