2
6.3.1 Quá trình nhúng Watermark
Xử lý trên DM6437
File data của ảnh H và W được đưa vào
DDR2.
File data của ảnh H’ và
Chương 6: Thực hiện bản quyền ảnh số trên KIT DM6437 Hình 6.6: Sơ đồ nhúng Watermark
Khối tách các thảnh phần RGB của H: Host Image H ban đầu là ảnh RGB 24 bit nên phải tách ảnh thảnh 3 thảnh phần R, G và B ký hiệu lần lượt là HR, HG và HB. Việc tách Host Image H được thực hiện trên MATLAB, dữ liệu sau khi tách sẽ được lưu thảnh file cĩ định dạng.dat để đưa vào DDR2 trong DM6437, chương trình sử dụng dịng lệnh: #pragma DATA_SECTION(array_name,".ddr2"); Tách các thảnh phần RGB của H Biến đổi DCT Biến đổi IDCT Nhúng Phân loại hệ số nhúng Lấy độ chĩi trung bình Lấy độ chĩi
trung bình Tách biên Canny Lấy mã nhị phân 8 bit của từng pixel Tách các thảnh phần RGB của W Tổng hợp RGB ảnh H’
Chương 6: Thực hiện bản quyền ảnh số trên KIT DM6437
để khai báo rằng dữ liệu sẽ được đưa vào DDR2.
Khối tách biên Canny: các thảnh phần HR, HG và HB sẽ được tách biên Canny để tạo thảnh các ảnh biên Canny kích thước 512x512 pixel ký hiệu là EHR, EHG và EHB. Việc tách biên được thực hiện trên MATLAB.
Khối lấy độ chĩi trung bình của ảnh tách biên: lấy độ chĩi trung bình trên các khối con 8x8 của các ảnh biên EHR, EHG và EHB. Thực hiện lấy độ chĩi trung bình trên các khối con 8x8 của ảnh 512x512 pixel ta được một ma trận 64x64 phần tử, mỗi phần tử là một giá trị độ chĩi trung bình của một khối con 8x8 tương ứng. Độ chĩi trung bình của các ảnh biên này được kết hợp với độ chĩi trung bình của các ảnh HR, HG và HB để phân loại hệ số nhúng Watermark. Trong chương trình, việc lấy độ chĩi trung bình được thực hiện bằng hàm sum64 và average_lumin64.
Khối lấy độ chĩi trung bình của ảnh: lấy độ chĩi trung bình trên các khối con 8x8 pixel của các ảnh HR, HG và HB. Thực hiện lấy độ chĩi trung bình trên các khối con 8x8 của ảnh 512x512 pixel được một ma trận 64x64 phần tử, mỗi phần tử là một giá trị độ chĩi trung bình của một khối con 8x8 tương ứng. Độ chĩi trung bình của các ảnh này được kết hợp với độ chĩi trung bình của các ảnh biên EHR, EHG và EHB để phân loại hệ số nhúng Watermark. Việc lấy độ chĩi trung bình được thực hiện bằng các hàm sum64 và average_lumin64.
Khối biến đổi DCT: thực hiện việc biến đổi DCT trên các khối con 8x8 của các ảnh HR, HG và HB để nhúng Watermark. Biến đổi DCT trên các block8x8 được thực hiện bằng hàm IMG_idct_8x8 trong thư viện img64xx [12].
Khối nhúng Watermark: Watermark được nhúng vào các hệ số trung tần trong các khối con 8x8 được biến đổi DCT của ảnh gốc. Cĩ 64x64 khối con DCT, mỗi khối con DCT cĩ kích thước 8x8 được dùng để nhúng mỗi pixel của watermark 64x64 pixel. Mỗi pixel của Watermark cĩ giá trị từ 0-255 sẽ được mã hĩa thảnh một số nhị phân 8 bit tương ứng. 8 bit nhị phân này sẽ được nhúng vào 8 hệ số trung tần của khối con DCT 8x8 của ảnh gốc. 8 hệ số này lần lượt nằm tại các vị trí (3,1), (2,2), (1,3), (1,4), (2,3), (3,2), (4,1) và (5,1). Watermark được nhúng như sau:
a’ = a + color_index*class_index*bit (6.1) Trong đĩ a là hệ số trung tần DCT trước khi nhúng Watermark, a’ là hệ số trung tần sau khi nhúng Watermark. Hệ số color_index bằng 2 đối với ảnh HG, bằng 4 đối với ảnh HG và bằng 1 đối với ảnh HB. Hệ số class_index là hệ số phân loại dựa vào giá trị độ chĩi trung bình tương ứng của ảnh HR (HG, HB) và độ chĩi trung bình tương ứng của ảnh biên Canny EHR (EHG, EHB). Giá trị bit là giá trị của bit nhị phân tương ứng của Watermark để nhúng vào hệ số a. Quá trình nhúng Watermark trong chương trình được thực hiện bằng hàm wm_embedded.
Chương 6: Thực hiện bản quyền ảnh số trên KIT DM6437
Các hệ số trung tần được chọn nhúng ở các vị trí (3,1), (2,2), (1,3), (1,4), (2,3), (3,2), (4,1) và (5,1). Do trong ngơn ngữ C một mảng hai chiều bắt đầu với các chỉ số dịng và cột là 0, nên các vị trí trung tần tương ứng trong C cĩ tọa độ (2,0), (1,1), (0,2), (0,3), (1,2), (2,1), (3,0) và (4,0). Vì trước khi dùng hàm biến đổi DCT IMG_fdct_8x8 [12], phải chuyển mảng hai chiều 8x8 về một mảng 1 chiều trung gian host_string[64]. Các vị trí trung tần được chọn trong mảng hai chiều bên trên cĩ vị trí tương ứng trong mảng một chiều được xác định như sau:
(2,0) 2*8+0 =16 (1,1) 1*8+1 =9 (0,2) 0*8+2 =2 (0,3) 0*8+3 =3 (1,2) 1*8+2 =10 (2,1) 2*8+1 =17 (3,0) 3*8+0 =24 (4,0) 4*8+0 =32
Khối biến đổi IDCT: Các khối con 8x8 sau khi nhúng Watermark sẽ được biến đổi IDCT để tạo thảnh các thảnh phần RGB của ảnh được nhúng Watermark H’ là H’R, H’G, H’B. Biến đổi IDCT được thực hiện bằng hàm IMG_idct_8x8[12].
Khối tổng hợp RGB của ảnh H’: các ảnh H’R, H’G, H’B sẽ được tổng hợp lại thảnh ảnh màu H’.
Chương 6: Thực hiện bản quyền ảnh số trên KIT DM6437