MBAFF時相鄰宏塊的獲取過程--來自中華視頻網

標準(200503版)中表 6-4 的第一行爲例進行說明,其餘情況可依此做類似分析:

 

 

 

當 currMbFrameFlag = 1,mbIsTopMbFlag = 1

1、確定當前宏塊左上角像素在幀圖像中對應的像素點:
currMbFrameFlag = 1,mbIsTopMbFlag = 1:當前宏塊爲頂幀宏塊,其左上角像素的對應像素點(co-located pixel)爲 c
2、根據當前宏塊的屬性來確定相鄰像素點:
因爲當前宏塊爲頂幀宏塊,所以 c 的左上角相鄰像素點爲 a
3、確定相鄰像素點所屬宏塊對:
因爲宏塊對是用頂宏塊的地址表示,所以像素點 a 所屬宏塊對爲 mbAddrD,因此表 6-4 中 mbAddrX = mbAddrD
4、根據相鄰宏塊對的屬性來確定相鄰像素點所屬宏塊:
(1)、如果 mbAddrX 是幀宏塊對(即mbAddrXFrameFlag = 1),像素點 a 屬於宏塊 mbAddrD+1
結論:當前宏塊的左上相鄰宏塊爲 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1
(2)、如果 mbAddrX 是場宏塊對(即mbAddrXFrameFlag = 0),像素點 a 在場圖像時(即進行隔行抽取後)屬於宏塊mbAddrD+1
結論:當前宏塊的左上相鄰宏塊爲 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1



當 currMbFrameFlag = 1,mbIsTopMbFlag = 0

1、確定當前宏塊左上角像素在幀圖像中對應的像素點:
currMbFrameFlag = 1,mbIsTopMbFlag = 0:當前宏塊爲低幀宏塊,其左上角像素的對應像素點(co-located pixel)爲 f
2、根據當前宏塊的屬性來確定相鄰像素點:
因爲當前宏塊爲低幀宏塊,所以 f 的左上角相鄰像素點爲 e
3、確定相鄰像素點所屬宏塊對:
因爲宏塊對是用頂宏塊的地址表示,所以像素點 e 所屬宏塊對爲 mbAddrA,因此表 6-4 中 mbAddrX = mbAddrA
4、根據相鄰宏塊對的屬性來確定相鄰像素點所屬宏塊:
(1)、如果 mbAddrX 是幀宏塊對(即mbAddrXFrameFlag = 1),像素點 e 屬於宏塊 mbAddrA
結論:當前宏塊的左上相鄰宏塊爲 mbAddrA,因此表 6-4 中:mbAddrN = mbAddrA
(2)、如果 mbAddrX 是場宏塊對(即mbAddrXFrameFlag = 0),像素點 e 在場圖像時(即進行隔行抽取後)屬於宏塊 mbAddrA+1
結論:當前宏塊的左上相鄰宏塊爲 mbAddrA+1,因此表 6-4 中:mbAddrN = mbAddrA+1



當 currMbFrameFlag = 0,mbIsTopMbFlag = 1

1、確定當前宏塊左上角像素在幀圖像中對應的像素點:
currMbFrameFlag = 0,mbIsTopMbFlag = 1:當前宏塊爲頂場宏塊,其左上角像素的對應像素點(co-located pixel)爲 c
2、根據當前宏塊對的屬性來確定相鄰像素點:
因爲當前宏塊爲頂場宏塊,所以 c 的左上角相鄰像素點爲 b
3、確定相鄰像素點所屬宏塊對:
因爲宏塊對是用頂宏塊的地址表示,所以像素點 b 所屬宏塊對爲 mbAddrD,因此表 6-4 中 mbAddrX = mbAddrD
4、根據相鄰宏塊對的屬性來確定相鄰像素點所屬宏塊:
(1)、如果 mbAddrX 是幀宏塊對(即mbAddrXFrameFlag = 1),像素點 b 屬於宏塊 mbAddrD+1
結論:當前宏塊的左上相鄰宏塊爲 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1
(2)、如果 mbAddrX 是場宏塊對(即mbAddrXFrameFlag = 0),像素點 b 在場圖像時(即進行隔行抽取後)屬於宏塊 mbAddrD
結論:當前宏塊的左上相鄰宏塊爲 mbAddrD,因此表 6-4 中:mbAddrN = mbAddrD



當 currMbFrameFlag = 0,mbIsTopMbFlag = 0

1、確定當前宏塊左上角像素在幀圖像中對應的像素點:
currMbFrameFlag = 0,mbIsTopMbFlag = 0:當前宏塊爲低場宏塊,其左上角像素的對應像素點(co-located pixel)爲 d
2、根據當前宏塊對的屬性來確定相鄰像素點:
因爲當前宏塊爲低場宏塊,所以 d 的左上角相鄰像素點爲 a
3、確定相鄰像素點所屬宏塊對:
因爲宏塊對是用頂宏塊的地址表示,所以像素點 a 所屬宏塊對爲 mbAddrD,因此表 6-4 中 mbAddrX = mbAddrD
4、根據相鄰宏塊對的屬性來確定相鄰像素點所屬宏塊:
無論 mbAddrX 是幀宏塊對還是場宏塊對(即無論mbAddrXFrameFlag 值爲多少),像素點 a 都屬於宏塊 mbAddrD+1
(1)、如果 mbAddrX 是幀宏塊對(即mbAddrXFrameFlag = 1),像素點 a 屬於宏塊 mbAddrD+1
結論:當前宏塊的左上相鄰宏塊爲 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1
(2)、如果 mbAddrX 是場宏塊對(即mbAddrXFrameFlag = 0),像素點 a 在場圖像時(即進行隔行抽取後)屬於宏塊 mbAddrD+1
結論:當前宏塊的左上相鄰宏塊爲 mbAddrD+1,因此表 6-4 中:mbAddrN = mbAddrD+1

 

 

 

 圖中:a、e 爲最後一行最後一列的像素,b 爲倒數第二行最後一列的像素,c、f 爲第一行第一列像素,d 爲第二行第一列像素。a、b、c、d、e、f 不是分幀場之後的像素,這樣的像素就叫做 co-locate 像素。

表中最後一列的 yM 值是按(xN,yN)所在宏塊對的幀場屬性對其所在宏塊的像素點分幀場之後 a、b、c、d、e、f  各點的縱座標。


【說明】:
1、這裏使用了對應像素點(co-located pixel)的概念,也就是當前像素點在未進行隔行抽取時所對應的位置。我們在幀間宏塊的時間 direct 預測模式時候,也會遇到 co-located 這個概念。和這裏的含義一樣;
2、請大家注意紅色文字;
3、宏塊與宏塊對的概念請參照中華視頻網論壇的帖子“ 宏塊與宏塊對(附圖)”;

http://bbs.chinavideo.org/viewthread.php?tid=1134 "
4、請參考標準 6.4.9.2 小節學習

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章