Giấu tin trong ảnh chỉ số 8bpp

Một phần của tài liệu Ứng dụng phân cụm cho ảnh chỉ số trong lĩnh vực giấu tin trong ảnh (Trang 28)

Ảnh bitmap 8bpp sử dụng palete gồm 256 mầu. Giá trị mầu tại mỗi điểm ảnh thực chất là vị trí mầu của điểm ảnh đó trong palete. Để thực hiện thuật toán giấu tin trong ảnh 8bpp, chúng ta cần xây dựng: hàm Next và mảng nhị phân c.

+) Hàm Next( int i ): trả về mầu kế cận của mầu thứ i trong palete +) Mảng nhị phân c thỏa mãn điều kiện sau: c[ i ] + c[ Next(i) ] = 1

Sau đây tác giả sẽ trình bày các bước của quá trình giấu tin và lấy tin.

a) Giấu tin Dữ liệu vào: +) Ảnh bitmap 8bpp +) Tệp dữ liệu cần giấu +) Các tham số m, n +) Mật khẩu của người dùng Dữ liệu ra: Ảnh 8bpp chứa tệp dữ liệu cần giấu

Các bước xây dựng chương trình:

+) Chia ảnh thành các khối F có kích thước m n×

+) Chuyển đổi các khối F sang khối nhị phân theo công thức: F[ i , j ] = c[ F[ i , j ] ] +) Tính giá trị của r theo công thức: r= ⎣log2(mn+1)⎦.

+) Sinh ma trận khóa K và W dựa vào mật khẩu +) Chuyển tệp dữ liệu cần giấu sang dạng nhị phân

+) Chia dãy dữ liệu nhị phân thành các chuỗi bit, mỗi chuỗi gồm r bit +) Thực hiện thuật toán modul giấu mỗi chuỗi r bit vào các khối ảnh F

Kết quả của chương trình:

Ảnh đầu vào: NationalPark.bmp, kích thước: 333*250, dung lượng: 83kb Tham số: m = 3, n = 3

Tổng số byte có thể giấu: 3kb

Tệp dùng để giấu: tu_vung.txt, với dung lượng 614 bytes Mật khẩu người dùng: 123456

28 Ảnh đầu ra như sau:

b) Lấy tin

Dữ liệu vào:

+) Ảnh bitmap 8bpp chứa thông tin mật +) Mật khẩu của người dùng

29

Các bước xây dựng chương trình:

+) Đọc các tham số m và n của thuật toán giấu trong ảnh

+) Chia ảnh nhị phân thành các khối F có kích thước m n×

+) Chuyển đổi các khối F sang khối nhị phân theo công thức: F[ i , j ] = c[ F[ i , j ] ] +) Tính giá trị của r theo công thức: r= ⎣log2(mn+1)⎦.

+) Sinh ma trận khóa K và W dựa vào mật khẩu

+) Thực hiện thuật toán modul lấy các chuỗi r bit trong các khối ảnh F

+) Tổng hợp các chuỗi bit lấy được để khôi phục dữ kiệu gốc

Kết quả của chương trình:

Dữ liệu đem giấu là tệp tin: tu_vung.txt và dữ liệu lấy được là test.txt. Hai tệp tin này giống hệt nhau chứng tỏ quá trình lấy tin thành công.

30 2.5.3 Giấu tin trong ảnh 24bpp a) Giấu tin Dữ liệu vào: +) Ảnh bitmap 24bpp +) Tệp dữ liệu cần giấu +) Các tham số m, n +) Mật khẩu của người dùng Dữ liệu ra: Ảnh bitmap 24bpp chứa tệp dữ liệu cần giấu

Các bước xây dựng chương trình:

+) Chia ảnh bitmap 24bpp thành các khối F có kích thước m n×

+) Trong ảnh 24bpp mỗi điểm ảnh gồm 3 mầu Red, Green và Blue. Như vậy ứng với mỗi khối F chúng ta sẽ tách ra thành 3 khối F_red, F_green và F_blue sau đó sẽ thực hiện giấu tin trên từng khối này.

+) Chuyển đổi các byte dữ liệu trong các khối F_red, F_green và F_blue về dạng nhị phân bằng cách tách bit thấp nhất trong mỗi byte.

+) Tính giá trị của r theo công thức: r= ⎣log2(mn+1)⎦. +) Sinh ma trận khóa K và W dựa vào mật khẩu +) Chuyển tệp dữ liệu cần giấu sang dạng nhị phân

+) Chia dãy dữ liệu nhị phân thành các chuỗi bit, mỗi chuỗi gồm 3*r bit

+) Thực hiện thuật toán modul giấu mỗi chuỗi 3*r bit vào các khối ảnh F bằng cách giấu lần lượt chuỗi r bit vào các khối F_red, F_green và F_blue.

Kết quả của chương trình:

Ảnh đầu vào: 001.bmp, kích thước: 1600*1200, dung lượng: 5625 kb Tham số: m = 7, n = 1

Tổng số byte có thể giấu: 299 kb

Tệp dùng để giấu: ElasticCode.rar, với dung lượng 125 kb Mật khẩu người dùng: 123456

31 Ảnh đầu ra như sau:

b) Lấy tin

Dữ liệu vào:

+) Ảnh bitmap đen trắng chứa thông tin mật +) Mật khẩu của người dùng

Dữ liệu ra: Tệp dữ liệu đã giấu

Các bước xây dựng chương trình:

32

+) Chia ảnh bitmap 24bpp thành các khối F có kích thước m n× . Tách khối F ra thành 3 khối F_red, F_green và F_blue.

+) Chuyển đổi các byte dữ liệu trong các khối F_red, F_green và F_blue về dạng nhị phân bằng cách tách bit thấp nhất trong mỗi byte.

+) Tính giá trị của r theo công thức: r= ⎣log2(mn+1)⎦. +) Sinh ma trận khóa K và W dựa vào mật khẩu

+) Thực hiện thuật toán modul lấy các chuỗi r bit trong các khối ảnh F_red, F_green và F_blue

+) Tổng hợp các chuỗi bit lấy được để khôi phục dữ kiệu gốc

Kết quả của chương trình:

Dữ liệu đem giấu là tệp tin: ElasticCode.rar và dữ liệu lấy được là demo.rar. Hai tệp tin này giống hệt nhau chứng tỏ quá trình lấy tin thành công.

33

Chương 3. Phân cm nh ch s

3.1 Thuật toán phân cụm K-Means

K-Means là một trong những thuật toán cơ bản dùng để chia một tập gồm n phần tử thành k tập con. Các bước của thuật toán như sau:

Đầu vào:

+) Bộ dữ liệu x x1, ,...,2 xncần được phân cụm. +) Số cụm k

Đầu ra: k cụm dữ liệu c c1, ,...,2 ck

Bước 1: Khởi tạo k tâm cụm

Bước 2: Với mỗi điểm xi tìm tâm cụm cjgần nhất. Khi đó phân xi vào cụm thứ j

Bước 3: Cập nhật trọng tâm của mỗi cụm

34

Nhận xét:

+) Thuật toán K-Means đảm bảo hội tụ sau một số bước lặp hữu hạn. +) Thuật toán K-Means luôn cho ít nhất một cụm dữ liệu.

+) Độ phức tạp: O(nkt) . Trong đó: n là sốđiểm trong bộ dữ liệu. k là số cụm.

t là số bước lặp

+) Tốc độ hội tụ và chất lượng của thuật toán phụ thuộc vào việc chọn tâm cụm

3.2 Phân cụm ảnh bitmap.

Trong phần này tác giả sẽ trình bày cách tiếp cận sử dụng thuật toán K- Means để phân cụm ảnh bitmap. Dữ liệu đầu vào là ảnh bitmap và số cụm k, đầu ra là ảnh bitmap đã được phân cụm.

3.2.1 Vấn đề khởi tạo tâm cụm.

Như trong nhận xét trên chúng ta thấy tốc độ hội tụ và chất lượng của thuật toán K-Means phụ thuộc vào việc khởi tạo tâm cụm. Chúng ta xét ví dụ sau :

Đầu vào : Các số tự nhiên (1, 2, 3, 6, 7, 10) và số cụm k = 3.

Đầu ra : 3 cụm dữ liệu.

Trường hợp 1 : Nếu chọn 1, 3, 6 là các tâm cụm khởi đầu.

Các bước của thuật toán là :

Bước 1 : Phân tập dữ liệu trên vào các cụm. Khi đó : +) Cụm 1 : 1, 2. Giá trị trọng tâm là : 1.5

+) Cụm 2 : 3. Giá trị trọng tâm là : 3

+) Cụm 3 : 6, 7, 10. Giá trị trọng tâm là 7.67

Bước 2 : Điều kiện dừng thỏa mãn và thuật toán kết thúc. Đánh giá sai số :

ss = (1-1.5)2 + (2-1.5)2 + (3-3)2 + (6-7.67)2 + (7-7.67)2 + (10-7.67)2 = 9.17

Trường hợp 2 : Nếu chọn 1, 6, 10 là các tâm cụm khởi đầu.

Bước 1 : Phân tập dữ liệu trên vào các cụm. Khi đó : +) Cụm 1 : 1, 2, 3. Giá trị trọng tâm là : 2

35 +) Cụm 2 : 6, 7. Giá trị trọng tâm là : 6.5 +) Cụm 3 : 10. Giá trị trọng tâm là 10

Bước 2 : Điều kiện dừng thỏa mãn và thuật toán kết thúc. Đánh giá sai số :

ss = (1-2)2 + (2-2)2 + (3-2)2 + (6-6.5)2 + (7-6.5)2 + (10-10)2 = 2.5

Trường hợp 3 : Nếu chọn 1, 2, 3 là các tâm cụm khởi đầu.

Bước 1 : Phân tập dữ liệu trên vào các cụm. Khi đó : +) Cụm 1 : 1. Giá trị trọng tâm là : 1

+) Cụm 2 : 2. Giá trị trọng tâm là : 2

+) Cụm 3 : 3, 6, 7, 10. Giá trị trọng tâm là 6.5 Bước 2 : Phân tập dữ liệu trên vào các cụm. Khi đó : +) Cụm 1 : 1. Giá trị trọng tâm là : 1

+) Cụm 2 : 2, 3. Giá trị trọng tâm là : 2.5 +) Cụm 3 : 6, 7, 10. Giá trị trọng tâm là 7.67

Bước 3 : Điều kiện dừng thỏa mãn và thuật toán kết thúc. Đánh giá sai số :

ss = (1-1)2 + (2-2.5)2 + (3-2.5)2 + (6-7.67)2 + (7-7.67)2 + (10-7.67)2 = 9.17

Qua ví dụ trên ta thấy : nếu chọn 1, 6, 10 là các tâm cụm khởi đầu thì thuật toán sẽ dừng sau đúng 1 bước lặp với sai sốđạt được là nhỏ nhất. Vấn đề là làm sao có thể khởi tạo các tâm cụm là 1, 6 và 10 ? Tác giả đề xuất cách khởi tạo tâm cụm như sau :

+) Gọi N là số lớn nhất trong tập dữ liệu trên

+) Giá trị x sẽđược phân khởi tạo vào cụm i nếu : i = [x * k / (N+1)]

Như vậy với bộ dữ liệu trên khi khởi tạo thì 1, 2, 3 sẽđược phân vào cụm 1 ; 6, 7 sẽđược phân vào cụm 2 và 10 được phân vào cụm 3. Đây chính là điều chúng ta muốn.

Sau đây tác giả sẽ trình bày cách tiếp cận mở rộng nhận xét ở trên để khởi tạo tâm trong bài toán phân cụm ảnh bitmap. Các bước của thuật toán như sau : +) Chuyển đổi ảnh mầu sang ảnh đa mức xám theo công thức :

36

Gray = 0.3 * Red + 0.11 * Green + 0.59 * Blue

+) Điểm ảnh i sẽđược phân khởi tạo vào cụm j nếu : j = [Gray(i) * k / 256]

Sau khi khởi tạo tâm chúng ta sử dụng thuật toán K-Means để phân cụm ảnh. Tác giả cũng đã cài đặt thuật toán phân cụm ảnh trong đó việc khởi tạo tâm cụm được tiến hành như trong thuật toán trên và thu được kết quả rất tốt, trong đa số trường hợp ảnh trước và sau phân cụm khá giống nhau và rất khó phân biệt bằng mắt thường.

3.2.2 Vấn đềđộ phức tạp thuật toán

Độ phức tạp của thuật toán K-Means là O(nkt), trong đó: n là sốđiểm trong bộ dữ liệu, k là số cụm. t là số bước lặp. Như vậy với n lớn, k lớn và t lớn thì thời gian tính toán sẽ rất nhiều. Do đó để giảm thời gian tính toán tác giả đưa ra các đề xuất sau :

a) Giảm số lượng điểm ảnh

Đối với ảnh mầu nếu khoảng cách mầu giữa hai điểm ảnh đủ nhỏ thì mắt người không thể phân biệt được sự khác biệt này. Giả sử chúng ta có ảnh đầu vào F gồm n điểm ảnh (x x1, ,...,2 xn), để giảm số lượng điểm ảnh chúng ta làm như sau :

Bước 1 : Chọn một điểm ảnh x bất kỳ trong tập F

Bước 2 : Loại bỏ ra khỏi F tất cả các điểm ảnh y mà khoảng cách từ y đến x nhỏ hơn e cho trước

Bước 3 : Lặp lại bước 1 và 2 cho đến khi xét các điểm ảnh trong F.

Số lượng điểm ảnh còn lại trong F chính là các điểm ảnh đặc trưng cho ảnh F và các điểm ảnh này sẽđược sử dụng để phân cụm.

b) Giảm thời gian tìm tâm cụm gần nhất

Trong thuật toán K-Means, tại bước cập nhật tâm cụm, với mỗi điểm ảnh chúng ta cần tìm so sánh với k tâm cụm hiện tại để tìm tâm cụm gần nhất. Khi k lớn thì số lượng phép so sánh sẽ lớn, dẫn đến thời gian tính toán lớn. Để giảm thời gian tính toán chúng ta dựa vào nhận xét sau : hai điểm ảnh có giá trị mầu gần nhau thì chắc chắn sẽ có giá trị xám gần nhau. Do đó để tìm tâm cụm gần nhất chúng ta

37

không cần phải xét tất cả k tâm cụm mà chúng ta chỉ cần so sánh với các cụm mà khoảng cách xám từ cụm đó tới mỗi điểm ảnh nhỏ hơn e cho trước

c) Sự hội tụ của thuật toán.

Thuật toán K-Means sẽ hội tụ sau một số hữu hạn bước t. Tuy nhiên nếu t khá lớn thì thời gian tính toán sẽ lớn. Trong thực tế để đảm bảo thời gian tính toán của thuật toán chúng ta sẽ dừng tại một số bước lặp xác định.

3.2.3 Chương trình phân cụm

Trong đồ án này tác giả đã xây dựng chương trình ứng dụng phân cụm ảnh dựa trên các phân tích ở trên. Kết quả chương trình khá tốt, ảnh phân cụm gần giống với ảnh gốc và thời gian phân cụm khá nhanh.

Các tham sốđược sử dụng trong chương trình là :

+) Hai điểm ảnh được coi là giống nhau nếu khoảng cách mầu giữa chúng nhỏ hơn ngưỡng e = 3

+) Tại bước tìm tâm cụm gần nhất chúng ta chỉ xét các cụm mà khoảng cách xám từ cụm đó tới mỗi điểm ảnh nhỏ hơn e= 10

+) Số bước lặp tối đa là 5

+) Công thức khoảng cách mầu giữa hai điểm ảnh là :

( ) ( ) (2 ) (2 )2

, R R G G B B

d x y = x - y + x - y + x - y

38

Ảnh đầu vào có kích thước 639 * 433, với k = 512, thời gian chạy thuật toán là 2s.

39

Ảnh đầu vào có kích thước 267 * 201, với k = 256, thời gian chạy thuật toán là 1s.

40

Ảnh đầu vào có kích thước 1600 * 1200, k = 128, thời gian chạy thuật toán là 4s.

41

3.2.4 So sánh kết quảđạt được

a) So sánh với MS Paint

MS Paint là một phần mềm xử lý ảnh của Microsoft, phần mềm này được cài đặt sẵn trong máy tính nếu chúng ta sử dụng hệ điều hành Window. Để đánh giá chất lượng phân cụm, tác giả tiến hành so sánh các ảnh được phân cụm từ ảnh bitmap 24bpp. Kết quả cho thấy các ảnh được phân cụm bằng chương trình của tác giả cho kết quả tốt hơn nhiều so với các ảnh được phân cụm bởi Paint.

Ảnh phân cụm bằng chương trình của tác giả

42 b) So sánh với ACDSee Pro 2.5

ACDSee Pro 2.5 là một trong những chương trình xử lý ảnh hàng đầu trên thế giới hiện nay. Tác giả cũng đã tiến hành so sánh chất lượng ảnh phân cụm thông qua chương trình của mình với ảnh phân cụm bằng ACDSee Pro 2.5. Kết quả cho thấy ảnh phân cụm bằng chương trình của tác giả cho chất lượng gần bằng ảnh phân cụm bằng ACDSee Pro 2.5

Ảnh phân cụm bằng phần mềm của tác giả

43 c) So sánh với chương trình khác

Trong bài báo: “Effective Color Reduction Using the Modified Diversity Algorithm” tác giả Joo Hyun Song cũng đã xây dựng chương trình giảm số lượng mầu của ảnh. Sau đây chúng ta cùng so sánh các kết quả trong chương trình Joo Hyun Song và chương trình phân cụm ảnh của tác giả.

Ảnh gốc Ảnh chương trình

44

Ảnh gốc Ảnh chương trình

Ảnh phân cụm của tác giả

Nhận xét:

Nhìn chung chương trình phân cụm của tác giả cho kết quả tốt hơn chương trình của Joo Hyun Song

45

Chương 4. ng dng phân cm trong giu tin 4.1 Ứng dụng phân cụm trên ảnh bitmap 24bpp

Như trong chương 2 của đồ án, tác giả đã trình bầy phương pháp giấu tin trong ảnh bitmap 24bpp, tuy nhiên ảnh bitmap 24bpp có dung lượng khá lớn và định dạng ảnh này không phổ biến trong môi trường Internet. Xuất phát từ thực tế trên tác giả xây dựng chương trình phân cụm ảnh giúp chuyển đổi ảnh bitmap 24bpp sang ảnh bitmap 8bpp với chất lượng gần như không thay đổi, sau đó ảnh 8bpp sẽ được sử dụng để giấu tin. Như vậy người dùng sẽ có thêm lựa chọn khi thực hiện giấu tin trên ảnh 24bpp.

Các bước thực hiện như sau:

Giấu tin:

+) Chuyển đổi ảnh bitmap 24bpp sang ảnh bitmap 8bpp để giảm dung lượng ảnh +) Giấu thông tin mật vào ảnh bitmap 8bpp

+) Chuyển đổi ảnh bitmap 8bpp sang ảnh gif

+) Ảnh gif chứa thông tin mật sẽđược sử dụng trong quá trình truyền tin

Lấy tin:

+) Chuyển đổi ảnh gif sang ảnh bitmap 8bpp

+) Thực hiện giải thuật lấy tin trên ảnh bitmap 8bpp

Ví dụ:

Ảnh đầu vào là ảnh bitmap 24bpp: demo24.bmp, và thông tin cần giấu là tệp tin: test.txt. Chúng ta sẽ chuyển ảnh trên thành ảnh bitmap 8bpp: demo8.bmp và thực hiện giấu tin trên ảnh này. Sau đó chuyển ảnh demo8.bmp sang ảnh demo8.gif và ảnh gif này sẽđược sử dụng khi truyền tin.

46

Ảnh đầu vào bitmap 24bpp: demo24.bmp

Một phần của tài liệu Ứng dụng phân cụm cho ảnh chỉ số trong lĩnh vực giấu tin trong ảnh (Trang 28)

Tải bản đầy đủ (PDF)

(52 trang)