Professional Documents
Culture Documents
Áp dụng một số kỹ thuật nén ảnh cho truyền dữ liệu ảnh động qua mạng (tt)
Áp dụng một số kỹ thuật nén ảnh cho truyền dữ liệu ảnh động qua mạng (tt)
Áp dụng một số kỹ thuật nén ảnh cho truyền dữ liệu ảnh động qua mạng (tt)
BỘ GIÁO DỤC VÀ ĐÀO TẠO TẬP ĐOÀN BƯU CHÍNH VIỄN THÔNG VIỆT NAM
---------------------------------------
MÃ SỐ: 60.48.15
HÀ NỘI - 2011
2
MỞ ĐẦU
Trong thời đại phát triển ứng dụng công nghệ thông tin hiện nay,
việc truyền các hình ảnh động qua mạng ngày càng có nhiều ứng
dụng. Khi chúng ta trò truyện với một người bạn qua mạng, chúng ta
có thể nhìn thấy người bạn đó, khi chúng ta tham gia một cuộc họp
trực tuyến, chúng ta có thể nhìn thấy những thành viên khác của cuộc
họp, các bác sĩ có thể tham gia theo dõi và chỉ đạo một ca mổ quan
trọng mà không có điều kiện có mặt trực tiếp – bất chấp khoảng cách
về mặt địa lý. Với sự phát triển của Internet, ngành công nghiệp
truyền hình có thêm một phương tiện nữa để có thể truyền tải nội
dung tới người xem. Tất cả những điều này đều dựa trên cơ sở truyền
dữ liệu ảnh động.
Một trong những yếu tố quan trọng trong truyền các hình ảnh
chuyển động động là vấn đề đường truyền. Nguyên do là khi truyền
các hình ảnh động, chúng ta phải truyền liên tục hết khung hình này
đến khung hình khác với tốc độ rất cao để đảm bảo hình ảnh liên tục.
Để giải quyết vấn đề này, giải pháp đơn giản và ít tốn kém nhất là
thực hiện nén hình ảnh trước khi truyền.
3
Chương 1
TỔNG QUAN VỀ CÁC ĐỊNH DẠNG ẢNH PHỔ BIẾN
Chương 2
CÁC THUẬT TOÁN NÉN ẢNH
Đầu ra: Mã C (A, W) = {c1, c2, … , cn} là một tập hợp các từ mã
(nhị phân), trong đó ci là từ mã của ai, 1 ≤ i ≤ n
2.1.2.2 Mã hóa
Kỹ thuật này hoạt động bằng cách tạo ra một cây nhị phân của
các nút. Ở đây có thể được lưu trữ trong một mảng thông thường,
kích thước trong đó phụ thuộc vào số lượng dữ liệu n. Một nút có thể
là một nút lá hoặc nút nội bộ. Ban đầu, tất cả các nút là nút lá, có
chứa các dữ liệu riêng của mình là trọng số (tần số xuất hiện) của dữ
liệu, một liên kết đến một nút cha mẹ làm cho nó dễ dàng để đọc mã
(ngược lại) bắt đầu từ một nút lá . Các nút nội bộ có chứa trọng số dữ
liệu, các liên kết đến hai nút con và liên kết đến một nút cha. Như
một quy ước chung, bit “0” đại diện cho nút con trái và bit “1” đại
diện cho nút con phải. Một cây hoàn thiện đã lên đến nút lá n và nút
nội bộ n - 1.
2.1.3 Giải mã dữ liệu
Nói chung, quá trình giải mã đơn giản chỉ là một vấn đề của dịch
giá trị byte của dòng mã tiền tố, thường là bằng cách vượt qua các
nút của cây Huffman như là mỗi bit được đọc từ dòng đầu vào (đạt
đến một nút lá nhất thiết phải chấm dứt việc tìm kiếm giá trị byte cụ
thể).
2.2THUẬT TOÁN NÉN ẢNH JPEG
2.2.1 Tổng quan
Các phương pháp nén JPEG thường tổn hao, có nghĩa là một số
thông tin hình ảnh ban đầu là bị mất và không thể phục hồi, có thể
ảnh hưởng đến chất lượng hình ảnh.
10
Cb và Cr đại diện cho màu (chia thành các thành phần màu xanh và
đỏ).
2.2.2.3 Lấy mẫu sắc độ
Do đặc điểm về nhạy cảm trong mắt người đối với mật độ của
màu sắc và độ sáng, con người có thể cảm nhận tốt hơn đáng kể đối
với độ sáng của một hình ảnh (thành phần Y) so với màu sắc và độ
bão hòa màu sắc của một hình ảnh (các thành phần CbCr).
2.2.2.4 Phân tách khối
Sau khi lấy mẫu, mỗi kênh được chia thành các khối 8 × 8.
2.2.2.5 Biến đổi Cosin rời rạc
Tiếp theo, mỗi khối 8 × 8 của mỗi thành phần (Y, Cb, Cr) chuyển đổi
sang một miền tần số đại diện, thông thường là biến đổi cosin rời rạc
(DCT) hai chiều.
2.2.2.6 Lượng tử hóa
Mắt người có thể nhìn thấy sự khác biệt về độ sáng trên một trên một
tần số thấp, nhưng không phân biệt chính xác mức độ của sự thay đổi
độ sáng ở tần số cao. Điều này cho phép giảm đáng kể số lượng
thông tin trong các thành phần tần số cao. Điều này được thực hiện
đơn giản là bằng cách chia mỗi thành phần trong các mức tần số với
một hằng số, và sau đó làm tròn đến số nguyên gần nhất.
2.2.2.7 Mã hóa Entropy
Mã hóa entropy là một hình thức đặc biệt của nén không mất dữ
liệu. Nó liên quan đến việc sắp xếp các thành phần hình ảnh trong
một trật tự "ngoằn ngoèo" sử dụng thuật toán mã hóa duyệt chiều dài
(RLE) tính toán tần số các nhóm tương tự nhau, chèn mã đánh số
chiều dài, và sau đó sử dụng mã hóa Huffman vào những gì còn lại.
12
Chất lượng rất thấp có nghĩa là lỗi trên mỗi khối 8 x 8 Pixel
Chất lượng rất thấp có nghĩa là lỗi ô vuông trên toàn bộ hình
ảnh
Chất lượng quá thấp có nghĩa là lỗi trên toàn bộ hình ảnh
2.2.4 Hiệu ứng hình ảnh thu được khi nén JPEG
Tỷ lệ nén cao ảnh hưởng nghiêm trọng đến chất lượng của hình
ảnh, mặc dù màu sắc và hình thức tổng thể hình ảnh vẫn còn nhận ra.
2.3THUẬT TOÁN NÉN ẢNH FRACTAL
2.3.1 Tổng quan
Lý thuyết hình học Fractal là một ngành toán học hiện đại còn rất
non trẻ. Bài toán trung tâm của lý thuyết là mô tả các đối tượng tự
nhiên một cách hiệu quả dựa vào các công cụ toán học. Lý thuyết
này do B.Mandelbrot đưa ra thông qua tác phẩm “Hình học Fractal
trong tự nhiên”.
2.3.2 Thuật toán nén – giải nén
2.3.2.1 Thuật toán nén ảnh Fractal
Quá trình bắt đầu bằng việc phân hoạch ảnh cần nén thành các
khối không lấp lên nhau gọi là các khối range, sau đó xác định một
tập các khối domain.
Với mỗi khối range cần phải chọn được khối domain thích hợp sao
cho khi áp dụng một phép ánh xạ affirne co 3 chiều (về vị trí và độ
xám), ảnh thu được có thể đối sánh tốt với khối range đang xét.
2.3.2.2 Thuật toán giải nén Fractal
Xuất phát từ dữ liệu nén chứa trong file ảnh Fractal, chúng ta xây
dựng lại hệ hàm lặp tương ứng với ảnh khởi động bất kỳ và sau đó áp
dụng liên tiếp hàm lặp này vào các ảnh thu được sau mỗi lần lặp cho
đến khi thu được ảnh xấp xỉ tốt nhất với ảnh ban đầu.
14
trong những trường hợp phải truyền các hình ảnh liên tục, thay vì ta
phải truyền đầy đủ các hình ảnh này, ta chỉ cần truyền những sự khác
nhau giữa chúng.
2.4.2 Phát hiện sai lệch giữa hai ảnh liên tiếp bằng phép toán
trừ
Điều quan trọng nhất là ta phải làm sao để phát hiện ra sự thay
đổi giữa các hình ảnh liên tục và truyền chúng, đồng thời sau khi
nhận được những dữ liệu miêu tả sự thay đổi này làm sao để có thể
khôi phục thành hình ảnh ban đầu.
Ta có hai cách để tiếp cận bài toán này.
Khi ta thực hiện phép trừ điểm ảnh giữa hai ảnh liên tiếp,
nếu giữa hai ảnh có sự khác biệt đủ lớn hơn một ngưỡng quy định,
thì ta mới truyền hình ảnh đi. Nhược điểm của cách tiếp cận này là
các hình ảnh truyền đi không liên tục, do những ảnh mà có sự sai
khác không đủ lớn sẽ không được truyền đi, và trong một số trường
hợp đặc biệt có thể gây ra sự thiếu hụt dữ liệu.
Ta sẽ truyền đi toàn bộ các ảnh liên tục, dù cho mức độ khác
biệt của chúng là thế nào. Tuy nhiên, thay vì truyền đi toàn bộ dữ
liệu hình ảnh, ta chỉ truyền đi dữ liệu của những điểm ảnh có sự thay
đổi. Tuy nhiên, do phép trừ số học có thể mang lại kết quả là số âm,
trong khi đó giá trị màu sắc các điểm ảnh thường được lưu trữ trong
các byte và giá trị số học của chúng là luôn dương. Do đó, sử dụng
phép trừ số học có thể gây ra những rắc rối khi xử lý dữ liệu. Điều
này dẫn đến việc ta cần tìm một phép toán khác thay thế.
2.4.3 Phát hiện sai lệch giữa hai ảnh liên tiếp bằng phép toán
XOR
Ta nhận thấy dữ liệu lưu thông tin các điểm ảnh là các byte nhị
phân, và trong các phép toán nhị phân cơ bản, phép toán XOR cho
16
phép ta nhận được kết quả là 0 khi 2 giá trị đầu vào là giống nhau, và
là 1 khi 2 giá trị đầu vào là khác nhau. Như vậy nghĩa là phép toán
XOR cho phép ta phát hiện được sự khác nhau giữa các giá trị điểm
ảnh ở cùng tọa độ (x, y) tại các hình ảnh liên tiếp nhau.
Ta chứng minh được rằng A XOR B XOR A = B
2.4.4 Thực hiện thuật toán
Như vậy ta nhận thấy ở ma trận điểm ảnh B XOR A số phần tử có
giá trị bằng 0 là rất lớn (do có nhiều điểm giống nhau). Điều này
giúp ta có thể nén khối dữ liệu này với thuật toán Huffman và cho
một kết quả vô cùng thuận lợi.
Tuy nhiên vì dữ liệu thực tế là một mảng byte, vì vậy, thay vì
thực hiện phép toán XOR với một ma trận, ta sẽ thực hiện phép toán
này với một chuỗi nhị phân.
2.4.5 Xử lý hình ảnh liên tiếp có độ thay đổi không đáng kể
Như ta đã biết, giữa 2 hình ảnh liên tiếp nhau có sự thay đổi
không đáng kể. Tuy nhiên ngay cả với các điểm ảnh có sự thay đổi,
ta cũng có thể thiết lập một mức giới hạn sai số mà nếu những thay
đổi nằm trong giới hạn đó thì ta coi như không có thay đổi.
Trong bài toán này, ta có hai hướng phát triển như sau.
Thứ nhất, đó là ta có thể tính tổng giá trị các sai lệch của các
điểm ảnh, và nếu chúng nhỏ hơn một ngưỡng cho phép nào đó, thì ta
coi như không có sự sai lệch nào cả, và bỏ qua ảnh đó.
Hướng thứ hai là thay vì bỏ qua cả một hình ảnh, ta sẽ bỏ
qua những điểm ảnh có sự sai biệt nhỏ hơn một ngưỡng cho phép
nào đó.
2.5KẾT LUẬN CHƯƠNG
Chương 2 trình bày thuật toán nén không mất dữ liệu Huffman và
các thuật toán nén ảnh JPEG, Fractal, nén ảnh chuyển động. Từ các
17
kiến thức này giúp ta lựa chọn và phối hợp các phương pháp nén
khác nhau sao cho đảm bảo dữ liệu cần truyền là nhỏ nhất.
Chương 3
XÂY DỰNG ỨNG DỤNG TRUYỀN ẢNH QUA MẠNG SỬ
DỤNG THUẬT TOÁN NÉN ẢNH CHUYỂN ĐỘNG
3.1TỔNG QUAN
Ứng dụng truyền hình ảnh qua mạng có sử dụng thuật toán nén
ảnh chuyển động được chia thành 2 ứng dụng nhỏ như sau:
Ứng dụng 1: có nhiệm vụ thu các hình ảnh từ camera, chuyển đổi
hình ảnh thành mảng byte, thực hiện xử lý với các mảng byte này và
truyền sang ứng dụng số 2.
Ứng dụng 2: có nhiệm vụ nhận các mảng byte từ ứng dụng 1,
thực hiện giải mã các dữ liệu thu được, và hiển thị trên màn hình.
3.2XÂY DỰNG ỨNG DỤNG
3.2.1 Thu hình ảnh và gửi dữ liệu
Đối với ứng dụng thu hình ảnh và gửi dữ liệu, ta cần quan tâm
đến các vấn đề sau:
Thu hình ảnh từ camera: Điều này được thực hiện bằng cách xử
dụng bộ thư viện Direct X. Cứ mỗi khoảng thời gian nhất định, ứng
dụng sẽ thu một hình từ camera.
Xử lý hình ảnh: Điều này được thực hiện bằng cách đọc chuỗi
byte nội dung của hình ảnh.
Tính toán chuỗi byte thu được: Đối với mỗi chuỗi byte thu được,
ta sẽ so sánh nó bằng phép toán XOR với chuỗi byte trước đó. Trong
việc thực hiện phép toán XOR, ta có thể đưa vào đó các giá trị sai số
tối đa cho phép để đạt được hiệu quả nén tốt hơn.
18
Khi giới hạn sai lệch cho phép càng lớn, chất lượng hình ảnh thu
được càng kém (như đã nói ở mục trên), tuy nhiên, tỉ lệ trùng lặp dữ
liệu giữa các điểm ảnh tương ứng ở 2 hình ảnh liên tiếp nhau càng
lớn, và giúp cho việc nén dữ liệu thực hiện tốt hơn.
3.4KẾT LUẬN CHƯƠNG
Chương 3 mô tả cách thức cài đặt thuật toán nén ảnh chuyển động
cũng như các con số thống kê kết quả thực hiện bài toán.
Dựa vào các kết quả thu được giữa việc nén ảnh bằng phương
pháp nén ảnh chuyển động và nén ảnh bằng thuật toán JPEG, ta nhận
thấy phương pháp nén ảnh bằng thuật toán JPEG cho kết quả tốt hơn.
Tuy nhiên khi nén một ảnh bằng thuật toán JPEG sẽ khiến ảnh bị mất
mát dữ liệu và làm giảm chất lượng ảnh, điều này sẽ không phù hợp
với các ảnh cần giữ nguyên chất lượng. Trong khi đó thuật toán nén
ảnh chuyển động đảm bảo giữ nguyên chất lượng hình ảnh, và có thể
phối hợp với các thuật toán nén không mất dữ liệu khác để nâng cao
hiệu suất nén.
20
KẾT LUẬN
Truyền hình ảnh và hình ảnh chuyển động qua mạng là bài toán
đã và đang thu hút được sự quan tâm của nhiều nhà phát triển phần
mềm. Trong khuôn khổ của luân văn, học viên đã nghiên cứu một số
định dạng ảnh phổ biến, một số phương pháp nén ảnh phổ biến, cũng
như phương pháp nén ảnh khi truyền qua mạng dựa trên phát hiện sự
khác biệt giữa các hình ảnh liên tiếp. Các nội dung nghiên cứu chính
bao gồm:
- Các định dạng ảnh phổ biến: Nhằm nắm được cấu trúc của
các định dạng ảnh cơ bản.
- Các phương pháp nén ảnh phổ biến: Nhằm nắm được các
phương pháp mã hóa ảnh cơ bản.
- Phương pháp nén ảnh khi truyền qua mạng dựa trên việc tính
toán các sai lệch giữa các hình ảnh liên tiếp: Nhằm giảm tối đa dung
lượng dữ liệu cẩn truyền.
Với các kết quả này luận văn hi vọng có thể cung cấp thêm một
cách thức khi cần truyền các hình ảnh liên tiếp với thuật toán đơn
giản và cài đặt chương trình hợp lý.