You are on page 1of 30

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA CÔNG NGHỆ THÔNG TIN I

HỌC PHẦN : CÁC KỸ THUẬT GIẤU TIN

Báo cáo Thuyết trình

Sinh viên thực hiện Mã sinh viên


Tạ Hoàng Nhi : B18DCAT181
Nguyễn Thị Kim Ngân : B18DCAT169
Giảng viên hướng dẫn Đỗ Xuân Chợ

1
Mục Lục
1. Các nguyên tắc của nén ảnh ................................................................................4
2. Tổng quan về phương pháp DCT(Discrete Cosine Transform – DCT) ..............4
3. Biến đổi DCT .......................................................................................................6
4. Lượng tử hóa......................................................................................................13
5. Thuật toán giấu tin ...............................................................................................15

2
Lời nói đầu
Ngày nay mạng máy tính đã trở nên quen thuộc và phát triển rộng khắp nơi, vì thế
nhu cầu sử dụng tăng cao. Điều này dẫn tới việc dữ liệt truyền tải qua mạng máy
tính cũng rất lớn. Phần lớn dữ liệu được truyền tải tên mạng máy tính thường thuộc
các loại sau : ký tự, ảnh và cá loại media khác
Việc hằng ngày lượng dữ liệu lớn được luân chuyển sử dụng trên mạng tạo nên các
hoạt động truyền tải, lưu trữ, tái sử dụng dẫn đến các hành vi vi phạm và đánh cắp
dữ liệu ở nhiều mức độ khác nhau và khó kiểm soát. Cũng như việc đảm bảo an toàn
hay bảo mật cũng được quan tâm.
Vì thế dãn đến việc có nhiều thuật toán được phát minh và sử dụng để nén và mã
hóa ảnh một trong những dữ liệu sử dụng nhiều nhất trên mạng máy tính. Tác dụng
của việc nén và mã hóa ảnh nhằm vào các mục đích như :
 Giảm kích thước ảnh mà chất lượng ảnh vãn được được đảm bảo. Tăng khả
năng chuyền tải cũng như lưu trữ
 Chèn thêm các thông tin khác như bản quyền, xuất xứ hoặc các thông tin ẩn
nhằm
tránh việc bị sửa đổi trái phép, sao lưu tái sử dụng mà không có sự cho phép
của
nguời sở hữu hợp pháp.
 Truyền đi thông tin ẩn không muốn bên thứ ba biết được.

3
GIẤU TIN TRONG ẢNH
I. PHƯƠNG PHÁP NÉN ẢNH DCT
1. Các nguyên tắc của nén ảnh
Một tính chất chung nhất của tất cả các ảnh số đó là tương quan giữa các
pixel ở cạnh nhau lớn, điều này dẫn đến dư thừa thông tin để biểu diễn ảnh.
Dư thừa thông tin sẽ làm cho việc mã hoá không tối ưu. Do đó công việc cần
làm để nén ảnh là phải tìm được các biểu diễn ảnh với tương quan nhỏ nhất
để giảm thiểu độ dư thừa thông tin của ảnh. Thực tế, có hai kiểu dư thừa
thông tin được phân loại như sau:
 Dư thừa trong miền không gian: tương quan giữa các giá trị pixel của
ảnh, điều này có nghĩa rằng các pixel lân cận của ảnh có giá trị gần
giống nhau (trừ những pixel ở giáp đường biên ảnh)
 Dư thừa trong miền tần số: Tương quan giữa các mặt phẳng màu hoặc
dải phổ khác nhau. Trọng tâm của các nghiên cứu về nén ảnh là tìm
cách giảm số bit cần để biểu diễn ảnh bằng việc loại bỏ dư thừa trong
miền không gian và miền tần số càng nhiều càng tốt. Trong số các
thuật toán biển đổi ảnh để nén hoặc mã hóa có hai loại: Không mất dữ
liệu và có mất dữ liệu.
2. Tổng quan về phương pháp DCT (Discrete Cosine Transform – DCT)
Thuật toán DCT là thuật toán biển đổi cosin rời rạc được chọn để trình bày.
Vì nó có một số ưu điểm so với các thuật toán khác và nó được chọn sử
dụng cho chuẩn ảnh JPEG (Joint Photographic Experts Group)
Mã hóa ảnh theo tiêu chuẩn JPEG dựa trên thuật toán DCT và xử lý nén
Hoffman có thể mô tả qua các bước như dưới đây:
Bước 1. Ảnh gốc được chia thành từng mảng pixel thông thường là
kích thước 8x8 pixels.
Bước 2. Duyệt mảng từ trái qua phải và từ trên xuống dưới. Biến đổi
DCT cho từng khối (Zigzag)
Bước 3. Mỗi khối được lượng tử hoá.
Bước 4. Các khối được nén lại để giảm không gian chứa.

4
Bước 5. Khi cần lấy lại ảnh thì làm theo trình tự ngược lại, đọc zigzag
từng khối như trước và sử dụng biến đổi cosin rời rạc ngược IDCT -
Inverse Discrete Cosin Transform để lấy lại ảnh đã qua xử lý.

Hình 1: Sơ đồ tổng quan về quá trình giấu tin trong ảnh sử dụng phương
pháp biến đổi DCT
Ví dụ ứng dụng DCT trên thực tế:

Hình 2: Các thành phần của hệ thống truyền hình ảnh / video điển hình

5
3. Biến đổi DCT
- Trước hết, vì ảnh gốc có kích thước rất lớn nên trước khi biến đổi DCT,
ảnh được phân chia thành các block riêng biệt. Tất cả các block đều có
cùng kích thước và mỗi block có kích thước 8 x 8 pixel. Mỗi pixel sẽ có
3 giá trị Y (độ sáng), Cb, Cr (tín hiệu màu). Vì ma trận phân tích từng
khối 8 pixel có tính trực giao nên việc tính được ra ma trận nghịch đảo là
dễ dàng.(Trong toán học, trực giao là tổng quát hóa của khái
niệm tính vuông góc trong lĩnh vực đại số tuyến tính về các dạng song
tuyến tính. Hai phần tử u và v của một không gian vectơ với dạng song
tuyến tính B là trực giao nếu B(u, v) = 0. ... Trong trường hợp không
gian hàm, họ các hàm trực giao được sử dụng để tạo ra cơ sở.)
- Sau đó các giá trị trong khối ảnh phải được trừ đi cùng một giá trị để các
giá trị ở trung tâm là 0. Ví dụ mỗi giá trị trong khối 8*8 có giá trị trong
đoạn [0; 255] có giá trị ở chính giữa là 128. Phải lấy các giá trị trong khối
trừ đi 128 để các giá trị nằm trong khoảng đoạn [-128; 127] tức là giá trị
chính giữa là 0. Với việc đánh giá trị màu sắc bằng mức từ 0 đến 255 với
0 là đen hoàn toàn và 255 là trắng hoàn toàn. Vì vậy mỗi bức ảnh sẽ được
mô tả chính xác bằng 256 mức xám này. Vì DCT được thiết kế để làm
việc với giải giá trị từ -128 đến 127 nên một khối 8 pixel khi đưa vào xử
lý DCT thì trước tiên là trừ 128 cho mỗi giá trị.

6
Hình 3: Tín hiệu màu của pixel
 DCT một chiều :
DCT một chiều biểu diễn biên độ tín hiệu tại các thời điểm rời rạc
theo thời gian hoặc không gian thành chuỗi các hệ số rời rạc, mỗi hệ
số biểu diễn biên độ của một thành phần tần số nhất định có trong tín
hiệu gốc. Hệ số đầu tiên biểu diễn mức DC trung bình của tín hiệu.
Các hệ số thể hiện các thành phần tần số không gian cao hơn của tín
hiệu và được gọi là các hệ số AC. Thông thường nhiều hệ số AC có
giá trị gần hoặc bằng 0. Quá trình biến đổi DCT thuận (FDCT) được
định nghĩa như sau:

Hàm biến đổi DCT ngược (một chiều):

1
Đối với k = 0 => X(0) = √ ∑𝑁−1
𝑥=0 𝑥(𝑚)
𝑁

Trong đó:
• X(k) là chuỗi kết quả. k chỉ số của hệ số khai triển.
7
• x(m) là giá trị mẫu m. m chỉ số của mẫu.
• N chỉ số mẫu có trong tín hiệu.
Do đó, hệ số biến đổi đầu tiên là giá trị trung bình của chuỗi mẫu. Giá
trị này được gọi là hệ số DC. Tất cả các hệ số biến đổi khác được gọi
là hệ số AC
 DCT hai chiều :
Biến đổi DCT hai chiều (2-D) được dùng cho các khối ảnh có kích
thước 8x8. Quá trình biến đổi DCT thuận được định nghĩa như sau:

Trong đó:
• f(j ,k) là các mẫu của ảnh gốc trong khối 8x8 pixel.
• F(u, v) là các hệ số của khối DCT 8x8

Phép biến đổi DCT hai chiều là phép biến đổi đối xứng và biến đổi
nghịch cho phép tái tạo lại các giá trị mẫu f(j, k) trên cơ sở các hệ
số F(u,v) theo công thức sau:

Ví dụ: Để hiểu rõ hơn về vấn đề biến đổi DCT, ví dụ dưới đây sẽ trình
bày quy trình biến đổi ảnh từ miền không gian sang miền tần số.
- Đầu vào: Một ma trận điểm ảnh có kích thước 8x8 pixel

8
Bước 1 : Tiền xử lý ảnh
• Trừ các giá trị của các pixel đi 128 thu được ma trận với M

Bước 2 : Tính toán ma trận DCT:


Ma trận T được định nghĩa theo công thức:

Với i là số hàng còn j là số cột N là giá trị của số pixel tối đa. Vì đầu
vào ở đây là khối 8x8 pixel nên có ma trận kết quả sau:

9
Bước 3: Biến đổi cosine rời rạc : D = TMT’

 Kết quả rút ra : Đây là một ma trận mỗi chiều từ 0 đến 7 với giá
trị góc trên cùng phía trái là C00 là giá trị thấp nhất trong miền tần
số của bảng giá trị và tương tự thì giá trị góc dưới cùng bên phải C77
là giá trị cao nhất miền tần số.
Và một lưu ý quan trọng là mắt người nhạy cảm nhất với vùng giá trị
tần số thấp và trong bước lượng tử sẽ phản ánh điều này.
Nhận xét
Có thể thấy biến đổi DCT biểu diễn phổ tần số tín hiệu bằng các mẫu f(j, k)
và bản thân phép biến đổi DCT không nén được số liệu, từ 64 mẫu nhận được
64 hệ số tương ứng. Tuy nhiên, phép biến đổi DCT thay đổi phân bố giá tri
các hệ số so với phân bố các giá trị mẫu. Phép biến đổi DCT cho giá trị DC
(F(0, 0)) thường lớn nhất và các hệ số trực tiếp kề nó ứng với tần số thấp có
giá trị nhỏ hơn, các hệ số còn lại ứng với tần số cao có giá trị rất nhỏ. Khối hệ
số DCT có thể chia làm 3 miền tần số thấp, miền tần số cao và miền tần số
10
giữa. Miền tần số thấp chứa các thông tin quan trọng ảnh hưởng đến tri giác.
Miền tần số cao thường không mang tính tri giác cao.
Kết luận
• DCT làm giảm độ tương quan không gian của thông tin trong khối. Vì
vậy, việc biểu diễn DCT có độ dư thừa thông tin ít hơn .
• Đồng thời DCT chứa thông tin về nội dung tần số không gian của thông
tin trong khối. Dựa vào đặc tính sinh lý thị giác, ta chỉ mã hóa những
hệ số DCT quan trọng

Code giả mã thuật toán bằng C++


#include <bits/stdc++.h>
using namespace std;
#define pi 3.142857
const int m = 8, n = 8;
int dctTransform(int matrix[][n])
{
float dct[m][n];
float ci, cj, dct1, sum;
for (int i = 0; i < m; i++) {
for ( int j = 0; j < n; j++) {
//ci vs cj phu thuoc vao so hang so cot cua ma tran
if (i == 0)
ci = 1 / sqrt(m);
else
ci = sqrt(2) / sqrt(m);
if (j == 0)
cj = 1 / sqrt(n);
else
cj = sqrt(2) / sqrt(n);

11
sum = 0;
for (int k = 0; k < m; k++) {
for (int l = 0; l < n; l++) {
dct1 = matrix[k][l] *
cos((2 * k + 1) * i * pi / (2 * m)) *
cos((2 * l + 1) * j * pi / (2 * n));
sum = sum + dct1;
}
}
dct[i][j] = ci * cj * sum;
}
}

for (int i = 0; i < m; i++) {


for (int j = 0; j < n; j++) {
printf("%f\t", dct[i][j]);
}
printf("\n");
}
}
int main()
{
int matrix[m][n] ;
int a=0;
for (int i = 0; i < m; i++) {
for ( int j = 0; j < n; j++) {
cin>>a;
matrix[i][j] = a-128;
}

12
}
dctTransform(matrix);
return 0;
}
4. Lượng tử hóa
Quá trình lượng tử hóa và mã hoá các hệ số DCT là quá trình nén thông tin,
vì bản thân phép biến đổi DCT không nén thông tin
 Đặc trưng thị giác của mắt người
- Mắt người không nhạy cảm với thành phần tần số cao cũng như với
sai số ở vùng ảnh có nhiều chi tiết, biến đổi nhanh. Hơn nữa, sự phản
ánh theo hướng xiên ít ảnh hưởng hơn các hướng ngang và thẳng
đứng
 Sai số của các hệ số tần số cao cũng như sai số hệ số theo đường chéo
ít ảnh hưởng hơn tới chất lượng ảnh khôi phục. Nó cho phép sử dụng
bộ lượng tử hoá có bước lượng tử thô hơn cho các hệ số DCT tần số
cao hơn và theo hướng chéo
 Còn hệ số một chiều DC đòi hỏi độ chính xác cao nhất, bởi lẽ nó biểu
thị độ chói trung bình của từng khối phần tử ảnh.
 Lượng tử hoá DCT
- Sau khi thực hiện biến đổi DCT, 64 hệ số sẽ được lượng tử hóa dựa
trên một bảng lượng tử gồm 64 phẩn tử Q(u, v) với 0 ≤ u, v ≤ 7
- Các phần tử trong bảng lượng tử có giá trị từ 1 đến 255 được gọi là
các bước nhảy cho các hệ số DCT
- Quá trình lượng tử được coi như là việc chia các hệ số DCT cho bước
nhảy lượng tử tương ứng, kết quả này sau đó sẽ được làm tròn xuống
số nguyên gần nhất
𝐹(𝑢,𝑣)
- Công thức thể hiện lượng tử: 𝐹 𝑄 (𝑢, 𝑣) = 𝐼𝑛𝑡𝑒𝑔𝑒𝑟𝑅𝑜𝑢𝑛𝑑( )
𝑄(𝑢,𝑣)

- Mục đích : Giảm số lượng bit cần để lưu trữ các hệ số biến đổi bằng
việc giảm độ chính xác của các hệ số này cho nên lượng tử là quá
trình xử lý có mất thông tin

13
- Các mức độ nén và chất lượng hình ảnh khác nhau có thể đạt được
qua việc lựa chọn các ma trận lượng tử cụ thể -> cho phép người dung
quyết định mức chất lượng từ 1-100 ( 1 cho chất lượng hình ảnh
kém/nén cao , 100 cho chất lượng ảnh cao/độ nén thấp)
- Ví dụ với ma trận D thu được từ phép biến đổi DCT. Với ma trận
lượng tử Q cho trước

Trong ví dụ này chọn ma trận lượng tử hóa là 𝑄50

- Lượng tử hóa đạt được bởi việc chia mỗi phần tử trong ma trận D cho
ma trận Q, sau đó lấy giá trị gần nhất
- Dùng công thức Huffman ở trên với đầu vào là 2 ma trận D và Q.
𝐷(𝑖,𝑗)
𝐶𝑖,𝑗 = 𝑟𝑜𝑢𝑛𝑑 ( )
𝑄(𝑖,𝑗)

 Kết quả thu được

14
Nhận xét: Các hệ số nằm gần góc bên trái tương ứng với các tần số thấp hơn
mà mắt người nhạy cảm nhất. Ngoài ra các số 0 đại diện cho tần số ít quan
trọng hơn,cao hơn đã bị loại bỏ dẫn đến phần mất mát của nén. Như đã đề cập
trước đây, các chỉ số khác 0 còn lại sẽ được dử dụng để tái tạo lại hình ảnh.
5. Thuật toán giấu tin
- Đối với ảnh JPEG, dữ liệu gốc là các bảng DCT sau khi được lượng tử
hóa.
- Mỗi bảng chứa 64 hệ số, mỗi hệ số là số nguyên có giá trị nằm trong
đoạn [-2048;2047].
- Đặc điểm của bảng DCT là càng về cuối bảng thì các giá trị có xu hướng
nhỏ dần.
- Có nhiều thuật toán khác nhau có thể áp dụng để giấu tin vào hệ số DCT
như:
• LSB: Least Significant Bit
• Jsteg
• F3, F4
• Pixel Swap Embedding
 Trong những phần sau sẽ sử dụng thuật toán LSB để minh họa
- Đầu vào LSB:
• Các hệ số DCT đã được lượng tử hóa (C50 đã thu được ở bước trên)
• Thông điệp giấu : 010
- Đầu ra LSB: ảnh chứa thông điệp

15
- Trong quá trình giấu tin sử dụng LSB cần lưu ý:
• Ảnh dùng để giấu tin có kích thước rất lớn (bao gồm nhiều khối
8x8pixel
 có được nhiều ma trận lượng tử C khác nhau
• Thông thường người giấu tin sẽ tách chuỗi tin cần giấy ra các ký tự
và giấu mỗi ký tự vào mỗi ma trận Ci
• Không chắn chắn được tọa độ DC trong mỗi ma trận là như nhau
nên cần tìm ra các LSB của bit đó
 áp dụng thuật toán zigzac

- 3 pixel cuối cùng của dãy sẽ ứng với các số 0 trong ma trận C50 thuộc phần
DC ( là phần sẽ giấu tin)
 Đổi giá trị 3 pixel này bằng 3 bit của bản rỏ ban đầu (010)

16
 Kết quả thu được ma trận mới:

6. Phục hồi ảnh


- Sau khi đã giấu tin vào các hệ số của bảng lượng tử hóa, người ta tiến hành
phục hồi ảnh sử dụng công thức sau:
Ri j = Qi j * Ci j
Trong đó:
• Qi j là ma trận lượng tử đã được sử dụng ở trên (Q50)
• Ci j là kết quả đã được giấu tin ở trên (C50LSB)

17
- Cuối cùng ta thực hiện IDCT ma trận R theo công thức sau:
Nnew = round(T’RT) + 128
 Ta thu được ảnh mới:

- So sánh 2 ma trận điểm ảnh N và Nnew ta thấy có rất ít thông số bị thay đổi.

18
19
II. DEMO
1. Demo 1 :
- Trước hết để nhúng thông

20
- Chọn INSERT Watermark để bắt đầu chương trình

Giao diện sau khi chọn Insert watermark


B1: Chọn ảnh cần giấu tin : ảnh ở đây là gautruc.png
B2: Định dạng hình ảnh đầu ra và đặt tên : gautruc1.bmp
B3 : Chọn thông điệp muốn nhúng vào trong ảnh dạng Text và viết thông
điệp cần nhúng vào trong ảnh
B4: Để an toàn trong quá trình truyền ảnh tránh bị phát hiện thông điệp ta
truyền vào đó 1 key để mã hóa
B5: Thực hiện giấu tin -> cho ra hình ảnh gautruc1.bmp

21
22
B6 : Quay lại giao diện chính và chọn EXTRACT Watermark để trích xuất
thông điệp được nhúng trong ảnh

23
B7: Điền thông tin ảnh cần trích xuất (gautruc1.bmp), dạng thông tin cần
trích xuất là Text và key ban đầu được thỏa thuận giữa 2 bên là 123

24
B8: Thực hiện trích xuất thông tin -> ta thu được thông điệp ( do bảng chữ
cái ascii không hỗ trợ một số dấu câu cũng như 1 số chữ nên sẽ xảy ra lỗi
font )

25
2. Demo 2 : Nhúng logo trong ảnh
- Ta thực hiện tương tự như Demo 1 nhúng văn bản trong ảnh nhưng ở đây
chúng ta chọn loại cần nhúng là “Image”

26
Chọn định dạng là “ Image”

27
Ảnh sau khi được thực hiện nhúng
- Quay lại giao diện ta chọn EXTRACT Watermark rồi chọn ảnh cần trích
xuất

28
- Chọn Extract ta thu được ảnh nhúng trong ảnh gautruc.png

29
Tài liệu tham khảo:
• Least Significant Bit (LSB)-based Steganography - Dr. Natarajan Meghanathan
• DCT formular - Ken Cabeen and Peter Gent Math 45 College of RedWoods

30

You might also like