Làm thế nào để các vectơ chuyển động hoạt động trong mã hóa dự đoán cho MPEG?


16

Trong MPEG, có một quá trình trong đó một hình ảnh được chia thành các macroblocks và một vectơ chuyển động được tính toán cho từng khối macro đó. Sau đó, bạn truyền các vectơ này, cùng với các lỗi dự đoán, để xây dựng lại hình ảnh tiếp theo trong chuỗi video.

Tôi đang cố gắng nắm bắt cách thức hoạt động của nó. Mỗi macroblock có một vectơ chuyển động được liên kết với nó, (nếu vectơ là [1,0]), cho biết all the pixels in this block move 1 in the x direction and 0 in the y direction for the next frame. Nếu tất cả các vectơ chuyển động không căn chỉnh chính xác, thì điều này sẽ không để lại các khu vực của hình ảnh (như khu vực trong đó macroblock đó đã ở vị trí đầu tiên)?

Ví dụ, tôi có câu hỏi sau đây tôi tìm thấy.

Hãy xem xét hình ảnh sau tại thời điểm t:

7   7   7   7           
7   7   5   5        
7   5   5   8         
8   8   8   8           
9   9   9   9       
9   9   9   9

Hình ảnh này được chia thành các macro2 2x2 và các vectơ chuyển động sau được gửi cùng để tạo lại nó:

(0,0)  (0,0)  (0,1)  (-1,1)  (0,0)  (0,0)

Hình ảnh ở bước thời gian trước, t - 1, trông như thế này:

7   7   7   7           
7   7   5   4        
7   7   7   7         
7   5   8   8           
8   9   8   9       
9   9   9   9   

Các lỗi được truyền là gì?

Làm thế nào bạn sẽ giải quyết điều này?

Câu trả lời:


5

Để đơn giản hóa sự nhầm lẫn của bạn - có hai quy trình:

1. Ước tính
chuyển động 2. Bù chuyển động

Trước khi nói về ước tính, chúng ta nên nói về bù chuyển động.

Giả sử, được chia thành khối B l o c k s t [ k ] ( x , y ) .Tôimmộtget(x,y)BtôiockSt[k](x',y')

Nhiệm vụ của bù chuyển động là tạo ra từ bất kỳ vùng nào của I m a g e t - 1 ( x , y )BtôiockSt[k](x',y')Tôimmộtget-1(x,y) .

Do đó, một khối khác không nhất thiết được căn chỉnh ở ranh giới 16x16 là phù hợp nhất có thể BtôiockSt-1[k](x'+mx,y'+my)

Đây, mx,my được gọi là vectơ chuyển động.

Chúng ta có thể tính toán lỗi giữa mục tiêu và tham chiếu như

Errt[k](x,y)= =BtôiockSt[k](x',y')-BtôiockSt-1[k](x'+mx,y'+my)

Vì vậy, bây giờ, bộ mã hóa về cơ bản truyền (với DCT và lượng tử hóa) và ( m x , m y ) [ k ]Errt[k](x,y)(mx,my)[k] cho mỗi khối ,.

Vì vậy, bộ mã hóa có 2 công việc phải làm:

1. Ước tính chuyển động
Quá trình hoặc ước tính với mọi k sao cho E r r t [ k ] ( x , y )mx,my[k]kErrt[k](x,y) được thu nhỏ được gọi là Ước tính chuyển động.

2. Tạo hình ảnh lỗi sau khi bù chuyển động
Quá trình xây dựng từ I t pixel pixel và ( m x , m y ) [ k ] được gọi là bù chuyển động . Hình ảnh lỗi là những gì được truyền đi.BtôiockSt[k](x',y')Tôit(mx,my)[k]

Cuối cùng, bộ giải mã có thể tự thực hiện bù chuyển động bằng cách sử dụng các vectơ moiton và hình ảnh lỗi để thực hiện việc xây dựng lại hình ảnh lần cuối.

Bây giờ chúng tôi nhận ra một vài điểm:

  1. Ước tính chuyển động tốt nhất giúp giảm thiểu năng lượng cần thiết để truyền và do đó tối ưu hóa các bit cho chất lượng nhất định.

  2. (mx,my)[k]Errt[k](x,y)

  3. BtôiockSt[k](x',y')

  4. BtôiockSt[k](mx,my)[k]BtôiockSt[k+1]

  5. Energy(Errt[k](x,y))>Energy(BtôiockSt[k](x',y'))

Trong những trường hợp như vậy, có thể nên truyền trực tiếp khối mà không dự đoán hơn là gửi chênh lệch. Điều này cũng có thể có trong bộ mã hóa bởi một điều khoản gọi là khối INTRA.


3

Không, nó sẽ không để lại lỗ hổng, vì vectơ từ một khung không xác định (P hoặc B), đến một khung đã biết ( khung I). Nó nhắc nhở một chút về cách ot tính toán một biến đổi hình ảnh - bạn sử dụng một biến đổi lùi để tránh các lỗ /


3

B(Tôi,j)Tôi= ={0,1,2}j= ={0,1}(2Tôi,2j) (chúng tôi xem xét góc trên cùng bên trái của mỗi khối để xác định vị trí của nó). Do đó, chúng tôi có sáu khối tại

(0,0) (0,2)
(2,0) (2,2)
(4,0) (4.2)

M(Tôi,j)

(0,0) (0,0)
(0,1) (-1,1)
(0,0) (0,0)

B'(Tôi,j)= =B(Tôi,j)+M(Tôi,j)

(0,0) (0,2)
(2,1) (1,3)
(4,0) (4.2)

B'(Tôi,j)B(Tôi,j)

Lưu ý: Chúng tôi không được bảo vệ khỏi bất kỳ loại chồng chéo nào của khối "đang chuyển động" (hai khối được di chuyển đến các vị trí chồng lấp). Có nhiều cách để xử lý vấn đề đó, nhưng nó vượt quá phạm vi của phản hồi này. Hiện tại, chúng tôi sẽ viết lại bất kỳ pixel nào với một khối chúng tôi đang di chuyển đến vị trí của chúng, do đó ngay cả khi có các khối được di chuyển ở đó trước đó, chúng sẽ bị ghi đè.

B'(Tôi,j)B(Tôi,j)Fe

7 7 7 7
7 7 5 7
7 7 7 8
7 5 5 8
8 9 8 9
9 9 9 9

EFeFE= =F-Fe

0 0 0 0           
0 0 0 -3        
0 0 0 -1         
0 0 3 0           
0 0 0 0       
0 0 0 0

Mặc dù tôi nghĩ rằng cộng đồng xử lý tín hiệu cho đến nay là một nơi tốt nhất để đặt câu hỏi này, tuy nhiên, các chủ đề như thế này và các công nghệ liên quan sâu sắc xung quanh vấn đề này cần một không gian riêng. Có một đề xuất mới về trang web Q & A Công nghệ phát thanh và truyền thông Hãy tham gia và đóng góp.
Dipan Mehta

@DipanMehta Rất tuyệt! =)
Phonon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.