Việc mã hóa dựa trên đƣờng biên nhằm giảm sự dƣ thừa về mặt không gian trong I-frame. Tôi xây dựng phƣơng pháp này trên cơ sở tham khảo ý tƣởng của phƣơng pháp chain coding trong tài liệu tham khảo [1].
I- frame đƣợc tách ra thành khung luma, và 2 khung tƣơng ứng với 2 thành phần màu của nó. Phƣơng pháp mã hóa dựa trên đƣờng biên trình bày ở đây đƣợc áp dụng cho mỗi khung một cách riêng rẽ.
Ý tƣởng của phƣơng pháp mã hóa này là: xuất phát từ một điểm (d, c) trên khung đang xét (luma, hoặc chroma), loang qua tất cả các điểm kề cạnh với nó và cac giá trị (độ sáng hay màu) dao động xung quanh giá trị của điểm (d, c). Kết quả của việc loang nhƣ thế là xác định đƣợc một miền trên khung. Giá trị trung bình của các điểm trong miền đƣợc gọi là seed. Seed đóng vai trò là giá trị đại diện cho cả miền. Khi giải mã, giá trị của các điểm trong miền đƣợc thay thế bởi seed tƣơng ứng của miền đó.Mỗi điểm trong khung chỉ thuộc về một miền duy nhất nào đó. Một điểm đã thuộc về một miền thì không đƣợc chọn làm điểm xuất phát.
Các điểm xuất phát đƣợc lần lƣợt đƣợc cho theo thứ tự quét từ trái qua phải, từ trên xuống dƣới. Với mỗi điểm xuất phát, một quá trình loang lại đƣợc thực hiện. Kết quả là khung đƣợc phân hóa thành các miền, giữa các miền có đƣờng biên chung. Một mảng 2 chiều boundary đƣợc dùng để thể hiện đƣờng biên.
Từ mảng 2 chiều boundary, đƣờng biên đƣợc mô tả thành các path. Một path là một đƣờng đi xuất phát từ một cạnh nào đó của đƣờng biên, đi đến các cạnh kề đỉnh, lan ra theo các nhánh cho đến khi không còn cạnh để đi tiếp. Path đƣợc biểu diễn bởi các kí hiệu tƣơng ứng với chỉ dẫn đi thẳng, rẽ trái, rẽ phải, điểm có rẽ nhánh (nhƣ ngã ba, ngã tƣ, ngã 5…của đƣờng bộ), bắt đầu một nhánh, kết thúc của tất cả các nhánh của một điểm rẽ nhánh, bắt đầu một path, cạnh trên, cạnh dƣới,
Dãy các path đƣợc mã hóa bằng thuật toán mã hóa số học hoặc huffman.Sơ đồ mã hóa đƣợc thể hiện nhƣ hình 3.1.
Hình 3.1 Sơ đồ mã hóa I-frame dựa trên đƣờng biên.
Dòng byte thu đƣợc sau khi mã hóa 1 I-frame bao gồm thông tin về các seed của mỗi khung, thông tin về những điểm bắt đầu của những path trên mỗi khung, và thông tin mã hóa các path.
Quá trình giải mã đƣợc thực hiện theo qui trình ngƣợc lại. Hình 3.2 mô tả quá trình này. Từ dòng byte mã hóa frame tách biệt ra thành các dãy byte. Đó là dãy byte mô tả các seed của khung Y, dãy byte mô tả các seed của khung U, dãy byte mô tả các seed của khung V, dãy byte mô tả các path của khung Y, dãy byte mô tả các path của khung U, dãy byte mô tả các path của khung V, dãy byte mô tả tọa độ các điểm bắt đầu pathtrên khung Y, dãy byte môt tả tọa độ các điểm bắt đầu path trên khung U, dãy byte mô tả tọa độ các điểm bắt đầu trên khung V.
Tiếp đến là quá trình giải mã lộ trình, khôi phục lại tọa độ các điểm bắt đầu path, khôi phục lại đƣờng biên trên các khung Y, U, V. Quá trình segmentation ngƣợc sử dụng thông tin về đƣờng biên giữa các vùng và seed của mỗi vùng để tạo ra các khung Y1, U1, V1 gồm nhiều vùng và có đặc điểm: Những điểm cùng một
vùng thì có cùng giá trị bằng seed tƣơng ứng với vùng đó. Cuối cùng là quá trình khôi phục lại các khung Y, U, V từ các khung Y1, U1, V1.
Hình 3.2 Quá trình giải mã
II. Mã hóa I-frame dựa trên đường biên.
1. Cách biểu diễn đường biên trên không gian 2 chiều
Việc biểu diễn đƣờng biên trên mảng 2 chiều phải thỏa mãn ràng buộc về đƣờng biên đơn nhƣ sau: Nếu một cạnh của đƣờng biên đi qua 2 ô kề cạnh thì chỉ duy nhất một ô trong 2 ô biểu diễn cạnh đó.
Nếu một đƣờng biên đi qua cạnh trên của ô thì giá trị của ô đó đƣợc cộng thêm 8.
Nếu đƣờng biên đi qua cạnh phải của một ô thì giá trị của ô đó đƣợc cộng thêm 4.
Nếu đƣờng biên đi qua cạnh dƣới của một ô thì giá trị của ô đó đƣợc cộng thêm 2.
Nếu một ô không có đƣờng biên đi qua bất kì cạnh nào của nó, thì giá trị của ô đó bằng 0.
Nhƣ vậy nếu ô (i, j) có giá trị là 12 thì có nghĩa là đƣờng biên đi qua cạnh trên và cạnh phải của nó. Khi đó, để thỏa mãn ràng buộc về đƣờng biên đơn thì đƣờng biên không đi quacạnh dƣới của ô (i-1, j), không đi qua cạnh trái của ô (i, j+1). Nếu ô (i, j) có giá trị là 7 thì có nghĩa là đƣờng biên đi qua cạnh phải, cạnh dƣới, cạnh trái của ô (i, j). Khi đó, để thỏa mãn ràng buộc về đƣờng biên đơn thì đƣờng biên không đi qua cạnh trên của ô (i+1, j), không đi qua cạnh trái của ô (i, j+1) không đi qua cạnh phải của ô (i, j-1).
Giả sử một khung có kích thƣớc là 8x8, đƣợc phân ra thành các vùng A, B, C, D nhƣ hình 3.3 thì đƣờng biên đƣợc biểu diễn trên mảng 2 chiều boundary nhƣ hình 3.4.
Hình 3.3: ví dụ về các miền
Hình 3.4: ví dụ về biểu diễn đƣờng biên trên mảng 2 chiều
Một ma trận đƣờng biên có thể đƣợc biểu diễn bởi 2 dãy: dãy các addr và dãy các Path.
2.1Các định nghĩa
Định nghĩa 3.1: định nghĩa về cạnh đƣờng biên
Một cạnh đƣờng biên là một cạnh trên một ô nào đó mà đƣờng biên đi qua nó. Thông tin về một cạnh đƣờng biên bao gồm chỉ số dòng, chỉ số cột, và chỉ số cạnh. Do đó, có thể mô tả 1 cạnh đƣờng biên bằng một bộ 3 số là [d, c, c1]. Trong đó, d, c là chỉ số dòng cột của ô chứa cạnh đó, và c1 là chỉ số cạnh, cho biết đó là cạnh nào của ô (d, c): cạnh trên, cạnh phải, cạnh dƣới hay canh trái; c1= 2 tƣơng ứng với cạnh trên, c1= 3 tƣơng ứng với cạnh phải, c1= 4 tƣơng ứng với cạnh dƣới, c1= 5 tƣơng ứng với cạnh trái.
Định nghĩa 3.2: định nghĩa về một cạnh đƣờng biên có hƣớng.
Một cạnh đƣờng biên có hƣớng là một cạnh đƣờng biên nhƣng có thêm thông tin về hƣớng: hƣớng thuận hay ngƣợc. Một cạnh đƣờng biên có hƣớng đƣợc biểu diễn bởi một bộ 4 số là [d, c, c1, h]. Trong đó, h là chỉ số hƣớng, h= 0 tƣơng ứng với hƣớng thuận, h= 1 tƣơng ứng với hƣớng ngƣợc. Hƣớng thuận là hƣớng di chuyển trên cạnh theo chiều từ trên xuống dƣới hoặc từ trái sang phải. Hƣớng ngƣợc là hƣớng di chuyển trên cạnh theo chiều từ dƣới lên trên hoặc từ phải sang trái. Ví dụ, bộ 4 số [2, 2, 3, 0] biểu diễn cạnh đƣờng biên có hƣớng là cạnh phải của ô thuộc dòng 2, cột 2, và có hƣớng thuận. Một cạnh đƣờng biên có hƣớng là một đoạn thẳng định hƣớng gồm một điểm đầu và một điểm cuối.
Một cạnh đƣờng biên a = [d, c, c1] chứa 2 cạnh đƣờng biên có hƣớng là b= [d, c, c1, 0] và C= [d, c, c1, 1].
Định nghĩa 3.3: định nghĩa về 2 cạnh đƣờng biên kề cận nhau.
Hai cạnh đƣờng biên kề cận nhau nếu chúng chung nhau một đầu mút. Ví dụ, trong hình 3.4, cạnh đƣờng biên [1, 2, 3] và [2, 2, 3] là kề cận nhau.
Xét 2 cạnh đƣờng biên có hƣớng a, và b. b là kề cận của a nếu điểm cuối của a trùng với điểm đầu của b. Khi đó, a đƣợc gọi là cạnh trƣớc của b, và b đƣợc gọi là cạnh sau của a. Ví dụ, trong hình 3.4, nếu a là [2, 5, 4, 0] thì cạnh đƣờng biên có hƣớng kề cận của nó là b= [2, 6, 4, 0] và c = [3, 5, 3, 0].
Định nghĩa 3.5: định nghĩa về hƣớng đi.
Hƣớng đi là một chỉ dẫn về cách đi từ cạnh đƣờng biên có hƣớng sang cạnh đƣờng biên có hƣớng kề cận. Chỉ dẫn đó có thể là: đi thẳng, rẽ trái, rẽ phải. Kí hiệu 2 tƣơng ứng với hƣớng đi là rẽ trái, kí hiệu 3 tƣơng ứng với hƣớng đi là đi thẳng, kí hiệu 4 tƣơng ứng với hƣớng đi rẽ phải.
Ví dụ, trong hình 3.4, cạnh đƣờng biên có hƣớng a=[2, 5, 4, 0] có 2 cạnh sau là b= [2, 6, 4, 0] và c=[3, 5, 3, 0]. Hƣớng di chuyển từ a sang b là đi thẳng, từ a sang c là rẽ phải.
Định nghĩa 3.6: định nghĩa về độ ƣu tiên của hƣớng đi, chỉ dẫn di chuyển. Xét cạnh đƣờng biên có hƣớng a. a có thể có nhiều cạnh đƣờng biên có hƣớng kề cận. Do đó có nhiều lựa chọn về hƣớng đi khi di chuyển từ a sang một cạnh đƣờng biên có hƣớng kề cân. Độ ƣu tiên của hƣớng đi qui định mức độ ƣu tiên đƣợc lựa chọn cho các chỉ dẫn (hƣớng đi): rẽ trái, đi thẳng, rẽ phải. Cụ thể, độ ƣu tiên của hƣớng đi rẽ trái là 2, của hƣớng đi đi thẳng là 4, của hƣớng đi rẽ phải là 3. Thứ tự ƣu tiên là từ lớn đến nhỏ. Nghĩa là: ƣu tiên di chuyển sang cạnh đƣờng biên có hƣớng kề cận theo hƣớng đi đi thẳng, rồi đến hƣớng rẽ phải, và cuối cùng là hƣớng rẽ trái.
Ví dụ, trong hình 3.4, cạnh đƣờng biên có hƣớng a=[2, 5, 4, 0] có 2 cạnh sau là b= [2, 6, 4, 0] và c=[3, 5, 3, 0]. Hƣớng đi từ a sang b là đi thẳng, từ a sang c là rẽ phải. Ƣu tiên di chuyển từ a sang b trƣớc khi di chuyển từ a sang c.
Định nghĩa 3.7: định nghĩa về một đoạn, đoạn trƣớc, đoạn sau.
Giả sử a và b là 2 cạnh đƣờng biên có hƣớng, trong đó, a là cạnh trƣớc của b, b là cạnh sau của a, a=[d’, b’, c1’, h’], b=[d, c, c1, h]. Khi đó b1=[d, c, c1, h, hd] đƣợc
đoạn với hd’ là hƣớng đi từ cạnh trƣớc của a đến a. b1 đƣợc gọi là đoạn sau của a1, a1 đƣợc gọi là đoạn trƣớc của b1. Nhƣ vậy, một đoạn là một cạnh đƣờng biên có hƣớng nhƣng có bổ sung thêm thông tin về hƣớng đi từ cạnh trƣớc của nó tới nó.
Ví dụ, trong hình 3.4, cạnh đƣờng biên có hƣớng a=[2, 5, 4, 0] có 2 cạnh sau là b= [2, 6, 4, 0] và c=[3, 5, 3, 0]. Hƣớng đi từ a sang b là đi thẳng, từ a sang c là rẽ phải. Đoạn b1= [2, 6, 4, 0, 4], đoạn c1= [3, 5, 3, 0, 3].
Định nghĩa 3.8: định nghĩa về một lộ trình
Khi xuất phát từ một cạnh đƣờng biên có hƣớng a = [d, c, c1, h], di chuyển lần lƣợt tới các cạnh sau của nó theo độ ƣu tiên về hƣớng đi là: đi thẳng, rẽ phải, rẽ trái; từ mỗi cạnh sau b của a lại di chuyển tới lần lƣợt các cạnh sau tƣơng ứng của b... Quá trình di chuyển giống nhƣ duyệt cây, đồ thị theo chiều sâu, trong đó mỗi cạnh đƣờng biên chỉ đƣợc đi qua đúng một lần, thì ta thu đƣợc một lộtrình thuận hoặc ngƣợc tùy thuộc vào h = 0 hay h=1.
Khi một cạnh đƣờng biên có hƣớng x=[dx, cx, cx1, hx] nào đó đƣợc đi qua thì coi nhƣ cạnh đƣờng biên chứa nó x1 = [dx, cx, cx1] đƣợc đi qua 1 lần, và đoạn x2=[dx, cx, cx1, hx, hdx] tƣơng ứng với x đƣợc thăm, đƣợc duyệt.
Khi h= 0, tức là a có hƣớng thuận, thì lộ trình thu đƣợc là lộ trình thuận. Khi h=1, tức là a có hƣơng ngƣợc, thì lộ trình thu đƣợc là lộ trình ngƣợc.Một lộ trình bao gồm lộ trình thuận và lộ trình ngƣợc. Thông tin về một lộ trình bao gồm các phần sau 5 phần là:
Phần 1: kí hiệu đánh dấu bắt đầu một lộ trình.
Phần 2: thông tin về cạnh đƣờng biên xuất phát [d, c, c1]. Trong đó, d là chỉ số dòng, c là chỉ số côt, c1 là chỉ số cạnh.
Phần 3: thông tin về lộ trình thuận
Phần 4: kí hiệu đánh dấu hết lộ trình thuận. Phần 5: thông tin về lộ trình ngƣợc
Tuy nhiên, nếu không có lộ trình ngƣợc thì thông tin về lộ trình không bao gồm các phần 4 và 5.
Định nghĩa 3.9: định nghĩa cạnh gốc, cạnh nhánh, định nghĩa nhánh của lộ trình.
Khi di chuyển dọc theo lộ trình thuận hay ngƣợc, nếu một cạnh mà có nhiều cạnh sau thì cạnh đó đƣợc gọi là cạnh gốc, hay điểm rẽ nhánh. Mỗi cạnh sau của nó đƣợc gọi là một cạnh nhánh, mỗi cạnh nhánh là một điểm khởi đầu cho một nhánh của lộ trình.
Một nhánh của lộ trình là một phần của lộ trình đƣợc khởi đầu sau một điểm rẽ nhánh nào đó. Mỗi nhánh đƣợc đánh số thứ tự theo thứ tự đƣợc duyệt (đƣợc thăm, đƣợc di chuyển tới từ cạnh gốc). Nhánh đƣợc duyệt đầu tiên có số thứ tự là 1, nhánh đƣợc duyệt thứ hai có số thứ tự là 2.
Định nghĩa 3.10: định nghĩa về addr
Addr là tọa độ của cạnh đƣờng biên xuất phát của một lộ trình. Addr đƣợc biểu diễn là một bộ 2 số [d, c] trong đó d là chỉ số dòng, c là chỉ số cột.
Kí hiệu Ý nghĩa 1 Bắt đầu một đƣờng đi
2 Rẽ trái hoặc đại diện cho cạnh trên 3 Đi thẳng hoặc đại diện cho cạnh phải 4 Rẽ phải hoặc đại diện cho cạnh dƣới
5 Điểm có rẽ nhánh hoặc đại diện cho cạnh trái 6 Kết thúc nhánh cuối cùng của một điểm rẽ nhánh. 7 Bắt đầu một nhánh của đƣờng đi
8 Kết thúc lộ trình thuận
Bảng 3.1: các kí hiệu trên lộ trình
2.2 Mô tả một lộ trình thuận hoặc ngược
Lộ trình thuận, hoặc ngƣợc không bao gồm thông tin về cạnh xuất phát. Việc mô tả một lộ trình thuận hoặc ngƣợc đƣợc thực hiện theo các bƣớc sau:
B1: liệt kê tất cả các cạnh đƣờng biên có hƣớng trên lộ trình theo thứ đƣợc thăm thành một dãy các cạnh;
B2: chèn kí hiệu đánh dấu rẽ nhánh ngay sau mỗi cạnh gốc;
B3: chèn kí hiệu đánh dấu bắt đầu một nhánh ngay trƣớc mỗi cạnh nhánh trừ nhánh đầu tiên.
B4: chèn kí hiệu đánh dấu sự kết thúc nhánh ngay sau mỗi cạnh cuối cùng (theo thứ tự đƣợc thăm) của nhánh cuối cùng của một điểm rẽ nhánh.
B5: bổ sung thêm thông tin về hƣớng đi cho mỗi cạnh để dãy các cạnh ở B1 trở thành dãy các đoạn. Hƣớng đi của mỗi cạnh là chỉ dẫn về cách đi từ cạnh trƣớc của nó tới nó.
Các kí hiệu đánh dấu sự rẽ nhánh, đánh dấu bắt đầu một nhánh, đánh dấu kết thúc nhánh cuối cùng của một điểm rẽ nhánh, kí hiệu về hƣớng đi…đƣợc mô tả trong bảng 3.1.
Ví dụ: Khi xuất phát từ cạnh đƣờng biên [2, 4, 4, 0] thì lộ trình thuận đƣợc thể hiện ở dạng 2 chiều nhƣ hình 3.5. Trong lộ trình này, điểm rẽ nhánh là [2, 5, 4, 0], nhánh 1 là nhánh bắt đầu từ cạnh [2, 6, 4, 0], nhánh 2 là nhánh bắt đầu từ cạnh [3, 5, 3, 0]. Hƣớng đi từ điểm rẽ nhánh đến cạnh đầu tiên của nhánh 1 là đi thẳng (đƣợc ƣu tiên trƣớc), hƣớng đi từ điểm rẽ nhánh đế cạnh đầu tiên của nhánh 2 là rẽ phải.
Mô tả của lộ trình này dƣới dạng 1 chiều là một dãy các đoạn nhƣ sau:
[2, 5, 4, 0, 3] [5] [2, 6, 4, 0, 3] [2, 7, 4, 0, 3] [2, 8, 4, 0, 3] [7] [3, 5, 3, 0, 4] [4, 5, 3, 0, 3] [5, 5, 3, 0, 3] [6, 5, 3, 0, 3] [7, 5, 3, 0, 3] [8, 5, 3, 0, 3] [6].
Lộ trình ngƣợc xuất phát từ cạnh [2, 4, 4, 1] đƣợc thể hiện ở dạng 2 chiều nhƣ hình 3.6. Trong lộ trình này không có điểm rẽ nhánh.
Hình 3.6 ví dụ về lộ trình ngƣợc
Lộ trình ngƣợc xuất phát từ cạnh [2, 4, 4, 1] đƣợc thể hiện ở dạng 1 chiều là một dãy các đoạn nhƣ sau:
[2, 3, 4, 1, 3] [2, 2, 3, 1, 4] [1, 2, 3, 1, 3]
2.3Mô tả một lộ trình
Việc mô tả một lộ trình đƣợc thực hiện bằng cách mô tả 5 thành phần thông tin của lộ trình nhƣ đã đề cập ở định nghĩa 3.8.
Thông tin về cạnh đƣờng biên xuất phát là một bộ 3 số [d, c, c1], với d là chỉ số dòng, clà chỉ số cột, c1 là chỉ số cạnh, cho biết cạnh xuất phát là cạnh nào (cạnh trên, cạnh phải, cạnh dƣới, hay cạnh trái) và thuộc ô nào (dòng bao nhiêu, cột bao nhiêu trên ma trận đƣờng biên). Tuy nhiên để tiện xử lý, chỉ số dòng và chỉ số cột đƣợc tách ra khỏi bộ ba [d, c, c1], và tạo thành bộ hai số [d, c], gọi là một địa chỉ, viết tắt là addr. Mỗi lộ trình chỉ có một addr tƣơng ứng. Các addr đƣợc đƣa ra xử lý riêng, nên chỉ còn chỉ số cạnh c1 trong chuỗi mô tả lộ trình.
Kí hiệu bắt đầu một lộ trình là 1. Kí hiệu kết thúc lộ trình thuận là 8.
Ví dụ: lộ trình xuất phát từ cạnh [2, 4, 4] của ma trận đƣờng biên ở hình 3.4 đƣợc mô tả dƣới dạng một chiều nhƣ sau:
[1] [4] [2, 5, 4, 0, 3] [5] [2, 6, 4, 0, 3] [2, 7, 4, 0, 3] [2, 8, 4, 0, 3] [7] [3, 5, 3, 0, 4] [4, 5, 3, 0, 3] [5, 5, 3, 0, 3] [6, 5, 3, 0, 3] [7, 5, 3, 0, 3] [8, 5, 3, 0, 3] [6] [8] [2, 3, 4, 1, 3] [2, 2, 3, 1, 4] [1, 2, 3, 1, 3].
2.4 Path của một lộ trình
Trong một lộ trình đƣợc mô tả bằng một dãy các đoạn và các kí hiệu nhƣ đã đề cập ở mục 2.3, nếu lƣợc bỏ đi các thông tin về chỉ số dòng, chỉ số cột, chỉ số cạnh,