Tài liệu xử lý ảnh Matlab

CHƯƠNG 1:

GIỚI THIỆU MATLAB
1.1 Tổng quan về Matlab
1.1.a Khái niệm về Matlab
Matlab là một ngôn ngữ lập trình thực hành bậc cao được sử dụng để giải các bài
toán về kỹ thuật. Matlab tích hợp được việc tính toán, thể hiện kết quả, cho phép lập
trình, giao diện làm việc rất dễ dàng cho người sử dụng. Dữ liệu cùng với thư viện được
lập trình sẵn cho phép người sử dụng có thể có được những ứng dụng sau đây.

• Sử dụng các hàm có sẵn trong thư viện, các phép tính toán học thông thường.
• Cho phép lập trình tạo ra những ứng dụng mới.
• Cho phép mô phỏng các mô hình thực tế.
• Phân tích, khảo sát và hiển thị dữ liệu.
• Với phần mềm đồ hoạ cực mạnh.
• Cho phép phát triển, giao tiếp với một số phần mềm khác như C++, Fortran.
1.1.b Tổng quan về cấu trúc hoạt động của Matlab và các ứng dụng liên
quan.
Matlab là một hệ thống tương giao, các phần tử dữ liệu là một mảng (mảng này
không đòi hỏi về kích thước). Chúng cho phép giải quyết các vấn đề liên quan đến lập
trình bằng máy tính, đặc biệt sử dụng các phép tính về ma trận hay vector và có thể sử
dụng ngôn ngữ C hoặc Fortran lập trình rồi thực hiện ứng dụng lập trình đó bằng các
câu lệnh gọi từ Matlab. Matlab được viết tắt từ chữ “MATrix LABoratory” tức là thư
viện về ma trận, từ đó phần mềm Matlab được viết nhằm cung cấp cho việc truy cập
vào phần mềm ma trận một cách dễ dàng, phần mềm ma trận này được phát triển bởi
các công trình Linpack và Eispack. Ngày nay Matlab được phát triển bởi Lapack và
Artpack tạo nên một nghệ thuật phần mềm cho ma trận.
+ Dữ liệu
Dữ liệu của Matlab thể hiện dưới dạng ma trận (hoặc mảng–tổng quát), và có các
kiểu dữ liệu được liệt kê sau đây:

ĐỒ ÁN 3
Trang 2/27
• Kiểu đơn single, kiểu này có lợi về bộ nhớ dữ liệu vì nó đòi hỏi ít byte nhớ hơn,
kiểu dữ liệu này không được sử dụng trong các phép tính toán học, độ chính
xác kém hơn.

• Kiểu double kiểu này là kiểu thông dụng nhất của các biến trong Matlab.
• Kiểu Sparse.
• Kiểu uint8, uint16. . .
• Kiểu char ví dụ ‘Hello’
• Kiểu cell.
• Kiểu Structure.
Trong Matlab kiểu dữ liệu double là kiểu mặc định sử dụng trong các phép tính số
học.
+ Ứng dụng
Matlab tạo điều kiện thuận lợi cho:

• Các khoá học về toán học.
• Các kỹ sư, các nhà nghiên cứu khoa học.
• Dùng Matlab để tính toán, nghiên cứu tạo ra các sản phẩm tốt nhất trong sản
xuất.
+ Toolbox là một công cụ quan trọng trong Matlab
Công cụ này được Matlab cung cấp cho phép bạn ứng dụng các kỹ thuật để phân
tích, thiết kế, mô phỏng các mô hình.
Ta có thể tìm thấy toolbox ở trong mô trường làm việc của.

• Mạng nơron.
• Logic mờ.
• Simulink.

1.1.c Hệ thống Matlab
Hệ thống giao diện của Matlab được chia thành 5 phần:
• Môi trường phát triển.
Đây là nơi đặt các thanh công cụ, các phương tiện giúp chúng ta sử dụng các lệnh và
các file, ta có thể liệt kê một số như sau.
+ Desktop.

ĐỒ ÁN 3
Trang 3/27
+ Command Window.
+ Command History.
+ Browsers for viewinghelp.
• Thư viện, các hàm toán học bao gồm các cấu trúc như tính tổng, sin cosin, atan,
atan2 etc..., các phép tính đơn giản đến các phép tính phức tạp như tính ma trận nghịch
đảo, trị riêng, chuyển đổi fourier, laplace, symbolic library.
• Ngôn ngữ Matlab. Đó là các ngôn ngữ cao về ma trận và mảng, với các dòng lệnh,
các hàm, cấu trúc dữ liệu vào, có thể lập trình hướng đối tượng.
• Đồ họa trong Matlab. Bao gồm các câu lệnh thể hiện đồ hạo trong môi trường 2D và
3D, tạo các hình ảnh chuyển động, cung cấp các giao diện tương tác giữa người sử dụng
và máy tính.
• Giao tiếp với các ngôn ngữ khác. Matlab cho phép tương tác với các ngôn ngữ khác
như C, Fortran …
1.1.d Làm quen với matlab

Hình 1.1.d Cửa sổ desktop (cửa sổ lớn nhất), và các cửa sổ phụ của nó.

Trước tiên để khởi động Matlab bạn click vào biểu tượng Matlab.exe, trên màn hình
xuất hiện cửa sổ sau. (Xem hình vẽ 1.1) Cửa sổ đó chứa các thanh công cụ (Giao diện
người và máy) cần thiết cho việc quản lý các files, các biến, cửa sổ lệnh, có thể coi

desktop là các panel gồm các ô, vùng, quản lý và tác dụng của từng cửa sổ nhỏ được
quản lý bởi desktop.

ĐỒ ÁN 3
Trang 4/27
1.1.e Các cửa sổ Làm việc của Matlab
+ Cửa sổ Command window
Là cửa sổ giao tiếp chính của Matlab bởi đây là nơi nhập giá trị các biến, hiển
thị giá trị, tính toán giá trị của biểu thức, thực thi các hàm có sẵn trong thư viện (dạng
lệnh), hoặc các hàm (dạng function) do người dùng lập trình ra trong M_files.
Các lệnh được nhập sau dấu nhắc ‘ >> ‘, và nếu có sai sót trong quá trình gõ
(nhập) lệnh thì hãy nhấn phím Enter cho đến khi nhận được dấu nhắc >>. Thực thi lệnh
bằng nhấn phím Enter.
Gõ các lệnh sau:
>> A= pi/2 ;
>> B= sin(A)
B=1

Hình 1.1.e1 Hình cửa sổ Comman window
Hoặc chương trình soạn thảo trong M-file dưới đây:
% Chuong trinh trong M-file
x= 0:pi/6:2*pi;
y=sin(x);
plot(x, y);
% chuong trinh được lưu với tên file là “ve_sin.m”
+ Cửa sổ command History
Các dòng mà bạn nhập vào trong cửa sổ Command window (các dòng này có thể
là dòng nhập biến, hoặc có thể là dòng lệnh thực hiện hàm nào đó) được giữ lại trong

ĐỒ ÁN 3
Trang 5/27
cửa sổ Command History, và cửa sổ này cho phép ta sử dụng lại những lệnh đó bằng
cách click chuột lên các lệnh đó hoặc các biến, nếu như bạn muốn sử dụng lại biến đó.

click đôi
chuột lên
lênh hoặc
biến để sử
dụng lại

Hình 1.1.e2 Hình cửa sổ Command History
+ Cửa sổ Workspace
Là cửa sổ thể hiện tên các biến bạn sử dụng cùng với kích thước vùng nhớ (số
bytes), kiểu dữ liệu (lớp), các biến được giải phóng sau mỗi lần tắt chương trình.
Click đôi
chuột lên
biến để
xem dữ
liệu(hoặc
thay đổi
giá trị)
Hình 1.1.e3 Hình cửa sổ Workspace
+ Cửa sổ M-file
Là một cửa sổ dùng để soạn thảo chương trình ứng dụng, để thực thi chương
trình viết trong M-file bằng cách gõ tên của file chứa chương trình đó trong cửa sổ
Commandwindow.

ĐỒ ÁN 3
Trang 6/27
Khi một chương trình viết trong M-file, thì tuỳ theo ứng dụng cụ thể, tuỳ theo
người lập trình mà chương trình có thể viết dưới dạng sau:

• Dạng Script file: Tức là chương trình gồm tập hợp các câu lệnh viết dưới
dạng liệt kê, không có biến dữ liệu vào và biến lấy giá trị ra.

Dạng hàm function: có biến dữ liệu vào và biến ra.

1.2 Các hàm chuyển đổi kiểu ảnh
Với các thao tác nhất định, sẽ thật hữu ích khi có thể chuyển đổi ảnh từ dạng này
sang dạng khác. Chẳng hạn, nếu ta muốn lọc một ảnh màu được lưu trữ dưới dạng ảnh
số, đầu tiên ta nên chuyển đổi nó thành dạng ảnh RGB. Khi ta áp dụng phép lọc tới ảnh
RGB, Matlab sẽ lọc giá trị cường độ tương ứng trong ảnh. Nếu ta lọc ảnh số Matlab
đơn giản chỉ áp đặt phép lọc tới ma trận ảnh số và kết quả sẽ không có ý nghĩa.
Chú ý: Khi chuyển đổi một ảnh từ dạng này sang dạng khác, ảnh kết quả có thể khác
ảnh ban đầu. Chẳng hạn, nếu ta chuyển đổi một ảnh màu chỉ số sang một ảnh cường độ,
kết quả ta sẽ thu được một ảnh đen trắng.
Danh sách sau đây sẽ liệt kê các hàm được sử dụng trong việc chuyển đổi ảnh:
+ dither: Tạo một ảnh nhị phân từ một ảnh cường độ đen trắng bằng cách trộn, tạo một
ảnh chỉ số từ một ảnh RGB bằng cách trộng (dither).
+ gray2id: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng .
+ grayslice: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng bằng cách đặt ngưỡng.
+ im2bw: Tạo một ảnh nhị phân từ một ảnh cường độ, ảnh chỉ số hay ảnh RGB trên cơ
sở của ngưỡng ánh sáng.

ĐỒ ÁN 3
Trang 7/27
+ ind2gray: Tạo một ảnh cường độ đen trắng từ một ảnh chỉ số.
+ ind2rgb: Tạo một ảnh RGB từ một ảnh chỉ số.
+ mat2gray: Tạo một ảnh cường độ đen trắng từ dữ liệu trong một ma trận bằng cách
lấy tỉ lệ giữ liệu.
+ rgb2gray: Tạo một ảnh cường độ đen trắng từ một ảnh RGB.
+ rgb2ind: Tạo một ảnh chỉ số từ một ảnh RGB.
Ta cũng có thể thực hiện các phép chuyển đổi kiểu chỉ sử dụng cú pháp của
Matlab. Chẳng hạn , ta có thể convert một ảnh cường độ sang ảnh RGB bằng cách
ghép nối 3 phần copy của ma trận ảnh gốc giữa 3 chiều:
RGB=cat(3,I,I,I );
Ảnh RGB thu được có các ma trận đồng nhất cho các mặt phẳng R,G,B vì vậy
ảnh hiển thị giống như bóng xám.
1.3 Giao diện đồ hoạ GUI
1.3.a Khái niệm
Để tiện cho việc sử dụng các ứng dụng hay chương trình mà ta đã viết chúng ta
có thể tạo ra giao diện đồ họa GUI (Graphic User Interface) giữa ngưới dùng và matlab.
Trong giao diện này ta có thể xuất dữ liệu dưới hai dạng văn bản và đồ họa. Mỗi một
GUI có thể có một hay nhiều giao diện. Việc tạo GUI tạo nên một công cụ nhập xuất dữ
liệu một cách trực quan, nhanh chóng và rất thuận tiện. Ngoài ra có thể dùng GUI để
giám sát các quá trình, hiển thị các đối tượng…
1.3.b Cách tạo GUI
Có 2 cách để tạo GUI:
+Tạo GUI bằng cách gõ lệnh trực tiếp.
+Tạo GUI bằng cách dùng công cụ có sẵn trên Matlab.
1.3.c Tạo GUI bằng cách gõ lệnh trực tiếp
Ta gõ lệnh như sau:

ĐỒ ÁN 3
Trang 8/27
Hình 1.3.c1: Hình ảnh
lệnh tạo GUI
Ta sẽ thu được
khung GUI sau:

Hình 1.3.c2: Hình ảnh thu được sau khi dùng lệnh tạo GUI

1.3.d Tạo GUI bằng cách sử dụng công cụ có sẵn trên Matlab.
Ta gõ guide trong cửa sổ chính của Matlab, sau đó trên cửa sổ chính sẽ xuất hiện
tab

ĐỒ ÁN 3
Trang 9/27

Hình 1.3.d: Cửa sổ thiết kế GUI
Sau đó ta tiến hành thiết kế GUI theo ý muốn.

ĐỒ ÁN 3
Trang 10/27
CHƯƠNG 2:

NÉN ẢNH SỐ,KHÔI PHỤC ẢNH SỐ VÀ
NHẬN DẠNG CẠNH GÓC ẢNH SỐ
2.1. NÉN ẢNH SỐ
2.1.1 Các khái niệm về ảnh
+ Điểm ảnh (Picture Element)

Gốc của ảnh (ảnh tự nhiên) là ảnh liên tục về không gian và độ sáng. Để xử lý
bằng máy tính (số), ảnh cần phải được số hoá. Số hoá ảnh là sự biến đổi gần đúng một
ảnh liên tục thành một tập điểm phù hợp với ảnh thật về vị trí (không gian) và độ sáng
(mức xám). Khoảng cách giữa các điểm ảnh đó được thiết lập sao cho mắt người
không phân biệt được ranh giới giữa chúng. Mỗi một điểm như vậy gọi là điểm ảnh
(PEL: Picture Element) hay gọi tắt là Pixel. Trong khuôn khổ ảnh hai chiều, mỗi pixel
ứng với cặp tọa độ (x, y).

1 pixel

Hình 2.1 Hình minh họa của pixel

Định nghĩa:
Điểm ảnh (Pixel) là một phần tử của ảnh số tại toạ độ (x, y) với độ xám hoặc
màu nhất định. Kích thước và khoảng cách giữa các điểm ảnh đó được chọn thích hợp
sao cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu) của ảnh
số gần như ảnh thật. Mỗi phần tử trong ma trận được gọi là một phần tử ảnh.
+ Mức xám của ảnh
Một điểm ảnh (pixel) có hai đặc trưng cơ bản là vị trí (x, y) của điểm ảnh và độ
xám của nó. Dưới đây chúng ta xem xét một số khái niệm và thuật ngữ thường dùng
trong xử lý ảnh.

ĐỒ ÁN 3
Trang 11/27
a) Định nghĩa: Mức xám của điểm ảnh là cường độ sáng của nó được gán bằng
giá trị số tại điểm đó.

Hình 2.2 Hình biểu diễn mức xám của ảnh số

b) Các thang giá trị mức xám thông thường: 16, 32, 64, 128, 256 (Mức 256 là
mức phổ dụng. Lý do: từ kỹ thuật máy tính dùng 1 byte (8 bit) để biểu diễn mức xám:
Mức xám dùng 1 byte biểu diễn: 28=256 mức, tức là từ 0 đến 255).
c) Ảnh đen trắng:
Ảnh đen trắng chỉ bao gồm 2 màu: màu đen và màu trắng (không chứa màu
khác) với mức xám ở các điểm ảnh có thể khác nhau. Người ta phân mức đen trắng đó
thành L mức Nếu sử dụng số bit B=8 bit để mã hóa mức đen trắng (hay mức xám) thì L
được xác định :
L=2B (trong ví dụ của ta L=28= 256 mức)
Nếu L bằng 2, B=1, nghĩa là chỉ có 2 mức: mức 0 và mức 1, còn gọi là ảnh nhị phân.
Mức 1 ứng với màu sáng, còn mức 0 ứng với màu tối. Nếu L lớn hơn 2 ta có ảnh đa cấp
xám. Nói cách khác, với ảnh nhị phân mỗi điểm ảnh được mã hóa trên 1 bit, còn với
ảnh 256 mức, mỗi điểm ảnh được mã hóa trên 8 bit. Như vậy, với ảnh đen trắng: nếu
dùng 8 bit (1 byte) để biểu diễn
mức xám, số các mức xám có thể biểu diễn được là 256. Mỗi mức xám được biểu diễn
dưới dạng là một số nguyên nằm trong khoảng từ 0 đến 255, với mức 0 biểu diễn cho
mức cường độ đen nhất và 255 biểu diễn cho mức cường độ sáng nhất.
Ảnh nhị phân khá đơn giản, các phần tử ảnh có thể coi như các phần tử logic.
Ứng dụng chính của nó được dùng theo tính logic để phân biệt đối tượng ảnh với nền
hay để phân biệt điểm biên với điểm khác.

ĐỒ ÁN 3
Trang 12/27
d) Ảnh màu: trong khuôn khổ lý thuyết ba màu (Red, Blue, Green) để tạo nên
thế giới màu) trong đó R, G, B là một giá trị xám và được biểu biểu diễn bằng 1 byte,
khi đó các giá trị màu: 28*3=224≈ 16,7 triệu màu.
Mỗi màu cũng phân thành L cấp màu khác nhau (thường L=256). Mỗi khoảng
này biểu diễn cho cường độ sáng của một trong các màu chính. Do đó, để lưu trữ ảnh
màu người ta có thể lưu trữ từng màu riêng biệt, mỗi màu lưu trữ như một ảnh đa cấp

xám. Do đó, không gian nhớ dành cho một ảnh màu lớn gấp 3 lần một ảnh đa cấp xám
cùng kích cỡ.
P(x, y) = (R, G, B)
- Hệ màu CMY: là phần bù của hệ màu
RGB (C, M, Y)=(1, 1, 1)-(R, G, B)
Hay
C+R=M+G=Y+B=1
=> Hệ màu này thường được dùng trong máy in.
- Hệ màu CMYK: trong đó K là độ đậm nhạt của màu K= min (C, M, Y)
P(x, y) = (C-K, M-K, V-K, K).
+ Ví dụ:
Với (C1, M1, Y1) ta sẽ có K=min (C1, M1, Y1)
vậy CMYK = (C1-K, M1-K, Y1-K, K)

Hình 2.3 Hệ tọa độ RGB
+ Định nghĩa ảnh số
Ảnh số là tập hợp các điểm ảnh với mức xám phù hợp dùng để mô tả ảnh gần
với ảnh thật.

ĐỒ ÁN 3
Trang 13/27
Một ảnh số giả sử được biểu diễn bằng hàm f(x, y). Tập con các điểm ảnh là S;
cặp điểm ảnh có quan hệ với nhau ký hiệu là p, q.
Một số khái niệm nén ảnh số
+Nén dữ liệu (Data Compression)
Nén dữ liệu là quá trình làm giảm lượng thông tin "dư thừa" trong dữ liệu gốc và
do vậy, lượng thông tin thu được sau nén thường nhỏ hơn dữ liệu gốc rất nhiều. Với dữ
liệu ảnh, kết quả thường là 10 : 1. Một số phương pháp còn cho kết quả cao hơn. Theo
kết quả nghiên cứu được công bố gần đây tại viện kỹ thuật Georgie, kỹ thuật nén

fractal cho tỉ số nén là 30 trên 1.
Ngoài thuật ngữ "nén dữ liệu”, do bản chất của kỹ thuật này nó còn có một số
tên gọi khác như: giảm độ dư thừa, mã hoá ảnh gốc.
Từ hơn hai thập kỷ nay, có rất nhiều kỹ thuật nén đã được công bố trên các tài
liệu về nén và các phần mềm nén dữ liệu đã xuất hiện ngày càng nhiều trên thương
trường. Tuy nhiên, chưa có phương pháp nén nào được coi là phương pháp vạn năng
(Universel) vì nó phụ thuộc vào nhiều yếu tố và bản chất của dữ liệu gốc. Trong
chương này, chúng ta không thể hy vọng xem xét tất cả các phương pháp nén. Hơn nữa,
các kỹ thuật nén dữ liệu chung đã được trình bày trong nhiều tài liệu chuyên ngành. Ở
đây, chúng ta chỉ đề cập các phương pháp nén có đặc thù riêng cho dữ liệu ảnh.
+Tỷ lệ nén (Compression rate)
Tỷ lệ nén là một trong các đặc trưng quan trọng nhất của mọi phương pháp nén.
Tuy nhiên, về cách đánh giá và các kết quả công bố trong các tài liệu cũng cần được
quan tâm xem xét. Nhìn chung, người ta định nghĩa tỷ lệ nén như sau:
Tỷ lệ nén =

x%

Với r: là tỷ số nén được định nghĩa: r = kích thước dữ liệu gốc/ kích thước dữ liệu thu
được sau nén. Như vậy hiệu suất của nén là: (1-tỷ lệ nén) x %.
Khi nói đến kết quả nén, chúng ta dùng tỷ số nén, thí dụ như 10 trên 1 có nghĩa
là dữ liệu gốc là 10 phần sau khi nén chỉ có 1 phần.
Tuy nhiên, cũng phải thấy rằng những số đo của một phương pháp nén chỉ có
giá trị với chính sự nén đó, vì rằng hiệu quả của nén còn phụ thuộc vào kiểu dữ liệu
định nén. Tỷ lệ nén cũng chỉ là một trong các đặc trưng cơ bản của phương pháp nén.
Nhiều khi tỷ lệ nén cao cũng chưa thể nói rằng phương pháp đó là hiệu quả hơn các

ĐỒ ÁN 3
Trang 14/27

phương pháp khác, vì còn các chi phí khác như thời gian, không gian và thậm chí cả độ
phức tạp tính toán nữa. Thí dụ như nén phục vụ trong truyền dữ liệu: vấn đề đặt ra là
hiệu quả nén có tương hợp với đường truyền không.
Cũng cần phân biệt nén dữ liệu với nén băng truyền. Mục đích chính của nén là
giảm lượng thông tin dư thừa và dẫn tới giảm kích thước dữ liệu. Tuy vậy, đôi khi quá
trình nén cũng làm giảm băng truyền tín hiệu số hoá thấp hơn so với truyền tín hiệu
tương tự.
+ Các loại dư thừa dữ liệu
Như trên đã nói, nén nhằm mục đích giảm kích thước dữ liệu bằng cách loại bỏ
dư thừa dữ liệu. Việc xác định bản chất các kiểu dư thừa dữ liệu rất có ích cho việc xây
dựng các phương pháp nén dữ liệu khác nhau. Nói một cách khác, các phương pháp nén
dữ liệu khác nhau là do sử dụng các kiểu dư thừa dữ liệu khác nhau. Nên có 4 kiểu dư
thừa chính:
a. Sự phân bố ký tự
Trong một dãy ký tự, có một số ký tự có tần suất xuất hiện nhiều hơn một số dãy
khác. Do vậy, ta có thể mã hoá dữ liệu một cách cô đọng hơn. Các dãy ký tự có tần suất
cao được thay bởi một từ mã nhị phân với số bít nhỏ; ngược lại các dãy có tần suất thấp
sẽ được mã hoá bởi từ mã có nhiều bít hơn. Đây chính là bản chất của phương pháp mã
hoá Huffman.
b. Sự lặp lại của các ký tự
Trong một số tình huống như trong ảnh, 1 ký hiệu (bit "0" hay bit "1") được lặp
đi lặp lại nhiều lần. Kỹ thuật nén dùng trong trường hợp này là thay dãy lặp đó bởi dãy
mới gồm 2 thành phần: số lần lặp và kí hiệu dùng để mã. Phương pháp mã hoá kiểu này
có tên là mã hoá loạt dài RLC (Run Length Coding).
c. Những mẫu sử dụng tần suất
Có thể có dãy ký hiệu nào đó xuất hiện với tần suất tương đối cao. Do vậy, có
thể mã hoá bởi ít bit hơn. Đây là cơ sở của phương pháp mã hoá kiểu từ điển do
Lempel-Ziv đưa ra và có cải tiến vào năm 1977, 1978 và do đó có tên gọi là phương
pháp nén LZ77, LZ78. Năm 1984, Terry Welch đã cải tiến hiệu quả hơn và đặt tên là
LZW (Lempel-Ziv- Welch).

d. Độ dư thừa vị trí

ĐỒ ÁN 3
Trang 15/27
Do sự phụ thuộc lẫn nhau của dữ liệu, đôi khi biết được ký hiệu (giá trị) xuất
hiện tại một vị trí, đồng thời có thể đoán trước sự xuất hiện của các giá trị ở các vị trí
khác nhau một cách phù hợp. Chẳng hạn, ảnh biểu diễn trong một lưới hai chiều, một
số điểm ở hàng dọc trong một khối dữ lệu lại xuất hiện trong cùng vị trí ở các hàng
khác nhau. Do vậy, thay vì lưu trữ dữ liệu, ta chỉ cần lưu trữ vị trí hàng và cột. Phương
pháp nén dựa trên sự dư thừa này gọi là phương pháp mã hoá dự đoán.
Cách đánh giá độ dư thừa như trên hoàn toàn mang tính trực quan nhằm biểu thị
một cái gì đó xuất hiện nhiều lần. Đối với dữ liệu ảnh, ngoài đặc thù chung đó, nó còn
có những đặc thù riêng. Thí dụ như có ứng dụng không cần toàn bộ dữ liệu thô của ảnh
mà chỉ cần các thông tin đặc trưng biểu diễn ảnh như biên ảnh hay vùng đồng nhất. Do
vậy, có những phương pháp nén riêng cho ảnh dựa vào biến đổi ảnh hay dựa vào biểu
diễn ảnh.
+ Phân loại các phương pháp nén
Có nhiều cách phân loại các phương pháp nén khác nhau.

• Cách phân loại thứ nhất: dựa vào nguyên lý nén. Cách này phân các phương
pháp nén thành 2 họ lớn:
• Nén chính xác hay nén không mất thông tin: Họ này bao gồm các phương pháp
nén mà sau khi giải nén ta thu được chính xác dữ liệu gốc.
• Nén có mất mát thông tin: Họ này bao gồm các phương pháp mà sau khi giải
nén ta không thu được dữ liệu như bản gốc. Trong nén ảnh, người ta gọi là các phương
pháp" tâm lý thị giác". Các phương pháp này lợi dụng tính chất của mắt người, chấp
nhận một số vặn xoắn trong ảnh khi khôi phục lại. Tất nhiên, các phương pháp này chỉ
có hiệu quả khi mà độ vặn xoắn là chấp nhận được bằng mắt thường hay với dung sai
nào đó.

• Cách phân loại thứ hai: dựa vào cách thức thực hiện nén. Theo cách này, người
ta cũng phân thành hai họ:
• Phương pháp không gian (Spatial Data Compression): Các phương pháp thuộc
họ này thực hiện nén bằng cách tác động trực tiếp lên việc lấy mẫu của ảnh trong miền
không gian.
• Phương pháp sử dụng biến đổi (Transform Coding): Gồm các phương pháp tác
động lên sự biến đổi của ảnh gốc mà không tác động trực tiếp.

ĐỒ ÁN 3
Trang 16/27
• Cách phân loại thứ ba: dựa vào triết lý của sự mã hoá. Cách này cũng phân các
phương pháp nén thành 2 họ:
• Các phương pháp nén thế hệ thứ nhất: Gồm các phương pháp mà mức độ tính
toán là đơn giản, thí dụ như việc lấy mẫu, gán từ mã,...
• Các phương pháp nén thế hệ thứ hai: Dựa vào mức độ bão hoà của tỷ lệ nén.
Trong các phần trình bày dưới đây, ta sẽ theo cách phân loại này. Cũng còn phải kể
thêm một cách phân loại thứ tự do Anil. K. Jain nêu ra. Theo cách của Jain, các
phương pháp nén gồm 4 họ chính:
• Phương pháp điểm.
• Phương pháp dự đoán.
• Phương pháp dựa vào biến đổi.
• Các phương pháp tổ hợp (Hybrid).
Thực ra cách phân loại này là chia nhỏ của cách phân loại thứ ba và dựa vào cơ chế
thực hiện nén. Xét một cách kỹ lưỡng nó cũng tương đương cách phân loại thứ ba.
Nhìn chung, quá trình nén và giải nén dữ liệu có thể mô tả một cách tóm tắt theo sơ đồ
dưới đây.
Quá trình nén
Dữ liệu gốc

Dữ liệu nén
Quá trình giải nén

Hình 2.4 Sơ đồ chức năng quá trình nén dữ liệu.
+ Biến đổi cosine rời rạc (DCT- Discrete cosine Transform)
+ Phương pháp biến đổi
Biến đổi cosine rời rạc (DCT) biểu diễn ảnh dưới dạng tổng của các cosine của
các thành phần biên độ và tần số khác nhau của ảnh. Hàm dct2 tính DCT hai chiều của
một ảnh. DCT có tính chất mà với các ảnh điển hình, hầu hết các thông tin về ảnh chỉ
tập trung trong một vài hệ số của DCT, trong khi các hệ số còn lại chỉ chứa rất ít thông
tin. Vì lý do này, DCT thường được sử dụng trong các ứng dụng nén ảnh khác nhau nhờ
hiệu suất gần như tối ưu của nó đối với các ảnh có độ tương quan cao giữa các điểm

ĐỒ ÁN 3
Trang 17/27
ảnh lân cận. Chẳng hạn, DCT là trung tâm của giải thuật nén ảnh theo chuẩn quốc tế
thường được biết với tên JPEG (tên này do nhóm phát triển đặt ra: Joint Photographic
Experts Group)
DCT hai chiều của ma trận A có kích thước MxN được định nghĩa như sau :

với

Trong đó:

Các giá trị Bpq được gọi là các hệ số của biến đổi DCT. DCT có thể biến đổi ngược
được và biến đổi ngược của nó cho bởi công thức :

với

Trong đó:

Biểu thức DCT ngược có thể được xem xét khi coi rằng mọi ma trận A kích thước MxN
như là tổng của MN hàm có dạng :

Những hàm này đựơc gọi là những hàm cơ sở của DCT. Hệ số DCT B pq có thể
được xem như trọng số cho mỗi hàm cơ sở. Với các ma trận 8x8, 64 hàm cơ sở được
minh hoạ bởi ảnh sau:

ĐỒ ÁN 3
Trang 18/27
Hình 2.5 Hình minh họa ma trận 8x8
+ Nén tổn hao dựa vào DCT
Giải thuật nén có tổn hao được biết đến nhiều nhất có lẽ là giải thuật dùng DCT.
Đây là giải thuật được chuẩn hóa với tên gọi JPEG (lấy từ tên gọi của tổ chức đã định ra
tiêu chuẩn nén này: Joint Photographic Experts Groups (Nhóm lien kết các chuyên gia
xử lý ảnh). Chuẩn JPEG được sử dụng để mã hoá ảnh đa mức xám, ảnh màu. Nó không
cho kết quả ổn định lắm với ảnh đen trắng. Chuẩn JPEG cung cấp giải thuật cho cả hai
loại nén là nén không mất mát thông tin và nén mất mát thông tin.
Sơ đồ khối của giải thuật nén và giải nén ảnh JPEG:

Phân
khố 8x8
i

ẢNH NÉN
DCT

Lượng tử hoáMã hoá

ẢNH GỐC
8x8

......
Bảng lượng tử
Bảng mã
8x8

Hình 2.6 Sơ đồ khối của giải thuật nén ảnh JPEG
Để nén ảnh theo giải thuật JPEG, ta chia ảnh thành các khối 8x8 (hoặc 16x16).
Mỗi khối 8x8 này sẽ được xử lý riêng biệt qua các bước của quá trình nén ảnh. Đầu
tiên, ta thực hiện biến đổi DCT thuận đối với mỗi khối. Như chúng ta đã biết, do các
điểm ảnh kế cận nhau thường có tính tương quan rất cao, phép biến đổi DCT thuận có
xu hướng tập trung hầu hết năng lượng của bức ảnh vào trong một vài hệ số DCT tần số
thấp. Đây là cơ sở để ta thực hiện nén ảnh. Với một khối ảnh kích thước 8x8 trích từ
ảnh nguồn, hầu hết các hệ số của nó đều bằng 0 hoặc gần bằng 0. Như vậy, ta có thể

ĐỒ ÁN 3
Trang 19/27
không cần biểu diễn các hệ số này khi truyền dữ liệu ảnh đi. Lưu ý rằng bản thân biến
đổi DCT không làm mất mát thong tin của ảnh gốc, nó chỉ chuyển các thông tin này về
một dạng khác mà ta có thể mã hóa một cách hiệu quả hơn.
Sau khi qua bộ biến đổi DCT, mỗi hệ số trong số 64 hệ số biến đổi DCT được

lượng tử hóa dựa vào một bảng giá trị lượng tử được thiết kế kỹ lưỡng. Một phương
pháp lượng tử đơn giản có thể dùng là chỉ giữ lại một vài hệ số DCT tần số thấp (các hệ
số có giá trị lớn) còn tất cả các hệ số còn lại gán bằng 0. trong chuẩn nén JPEG, mỗi hệ
số DCT sẽ được chia cho một trọng số ở vị trí tương ứng trong một ma trận lượng tử
8x8, sau đó làm tròn về số nguyên gần nhất. Sau khi lượng tử hóa, các hệ số biến đổi
DCT sẽ được sắp xếp theo một chuỗi zig-zag bắt đầu từ thành phần DC, rồi đến thành
phần AC… Cuối cùng các hệ số này được chuyển thành chuỗi bit nhị phân bằng kỹ
thuật mã hóa đưa ra ảnh nén.
Ở công đoạn giải mã, bộ giải mã sẽ thự hiện quá trình ngược lại: Giải mã
entropy, sau đó nhân các hệ số thu được với phần tử tương ứng của ma trận lượng tử,
rồi biến đổi ngược DCT để tái tạo lại ảnh ban đầu.

a. Phân khối
Chuẩn nén JPEG phân ảnh ra các khối 8x8. Công đoạn biến đổi nhanh Cosin hai
chiều cho các khối 8x8 tỏ ra hiệu quả hơn. Biến đổi Cosin cho các khối có cùng kích cỡ
có thể giảm được một phần các tính toán chung như việc tính hệ số C ji. Khi n=8 chúng
ta chỉ cần tính hệ số Cji cho 3 tầng (8= 23), số các hệ số là: 4 + 2 + 1 = 7.
Nếu với một ảnh 1024x1024, phép biến đổi nhanh Cosin một chiều theo hàng
ngang hoặc hàng dọc ta phải qua 10 tầng (1024 = 210). Số các hệ số Cji là: 512 + 256 +
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 1021. Thời gian tính các hệ số C ji với toàn bộ ảnh
1024x1024 lớn gấp 150 lần so với thời gian tính toán các hệ số này cho các khối.
Biến đổi Cosin đối với các khối có kích thước nhỏ sẽ làm tăng độ chính xác khi
tính toán với số dấu phẩy tĩnh, giảm thiểu sai số do làm tròn sinh ra.
Do các điểm ảnh kề cận có độ tương quan cao hơn, do đó phép biến đổi Cosin
cho từng khối nhỏ sẽ tập trung năng lượng hơn vào một số ít các hệ số biến đổi. Việc
loại bớt một số hệ số năng lượng thấp trong các khối chỉ tạo ra mất mát thông tin cục bộ
giúp nâng cao chất lượng ảnh.
Ảnh sẽ được chia làm B khối với:

ĐỒ ÁN 3
Trang 20/27

 M '   N' 
×  = M B × NB
 k   l 

B=

Các khối được xác định bởi bộ số (m,n) với m = [0..M B-1] và n=[0..NB-1], ở đây
m chỉ thứ tự của khối theo chiều rộng, n chỉ thứ tự của khối theo chiều dài. Phân khối
thực chất là xác định tương quan giữa toạ độ riêng trong khối với toạ độ thực của điểm
ảnh trong ảnh ban đầu. Nếu ảnh ban đầu ký hiệu Image[i,j] thì ma trận biểu diễn khối
(m,n) là x[u,v]được tính:

x[u , v] = Im age[ mk + u , nl + v ]

b. Biến đổi
Biến đổi là một công đoạn lớn trong các phương pháp nén sử dụng phép biến
đổi.
Nhiệm vụ của công đoạn biến đổi là tập trung năng lượng vào một số ít các hệ số
biến đổi.
Công thức biến đổi cho mỗi khối là:
Trong đó

ε k1

 1

= 2

 0

khi
khi

k1 = 0
(0 < k1 < 8)

 1

ε k2 =  2
 0

khi
khi

k2 = 0
(0 < k 2 < 8)

Thuật toán biến đổi nhanh Cosin hai chiều cho mỗi khối trong trường hợp này sẽ
bao gồm 16 phép biến đổi nhanh Cosin một chiều. Đầu tiên, người ta biến đổi nhanh
Cosin một chiều cho các dãy điểm ảnh trên mỗi hàng. Lần lượt thực hiện cho 8 hàng.
Sau đó đem biến đổi nhanh Cosin một chiều theo từng cột của ma trận vừa thu được sau
8 phép biến đổi trên. Cũng lần lượt thực hiện cho 8 cột. Ma trận cuối cùng sẽ là ma trận
hệ số biến đổi của khối tương ứng.
Trong sơ đồ giải nén ta phải dùng phép biến đổi Cosin ngược. Công thức biến
đổi ngược cho khối 8x8:

ĐỒ ÁN 3

Trang 21/27

ε k1

Trong đó

 1

= 2
 0

 1

ε k2 =  2
 0

khi
khi

k1 = 0
(0 < k1 < 8)

khi
khi

k2 = 0
(0 < k 2 < 8)

c. Lượng tử hóa
Khối lượng tử hoá trong sơ đồ nén đóng vai trò quan trọng và quyết định tỉ lệ

nén của chuẩn nén JPEG. Đầu vào của khối lượng tử hoá là các ma trận hệ số biến đổi
Cosin của các khối điểm ảnh.
Để giảm số bộ lượng tử, người ta tìm cách quy các hệ số ở các khối về cùng một
khoảng phân bố. Chuẩn nén JPEG chỉ sử dụng một bộ lượng tử hoá. Giả sử rằng các
hệ số đều có hàm tính xác suất xuất hiện như nhau. Chúng ta sẽ căn chỉnh lại hệ số y j
bằng phép gán:

yj =
Với

yj −µj

σj

µj là trung bình cộng của hệ số thứ j.
σj là độ lệch cơ bản của hệ số thứ j.

d. Nén
Đầu vào của khối nén gồm hai thành phần: thành phần các hệ số một chiều và
thành phần các hệ số xoay chiều.
Thành phần các hệ số một chiều Ci(0,0) với i = 0,1,..., 63 chứa phần lớn năng
lượng tín hiệu hình ảnh. Người ta không nén trực tiếp các giá trị C i(0,0) mà xác định độ
lệch của Ci(0,0):
d i = C i +1 (0,0) − C i (0,0)

di có giá trị nhỏ hơn nhiều so với C i nên trong biểu diễn dấu phẩy động theo chuẩn
IEEE754 thường chứa nhiều chuỗi bit 0 nên có thể cho hiệu suất nén cao hơn. Giá trị
C0(0,0) và các độ lệch di được ghi ra một tệp tạm. Tệp này được nén bằng phương pháp
nén Huffman.

ĐỒ ÁN 3
Trang 22/27
Thành phần các hệ số xoay chiều Ci(m,n) với 1 ≤ m ≤ 7, 1 ≤ n ≤ 7 chứa các
thông tin chi tiết của ảnh. Để nâng cao hiệu quả nén cho mỗi bộ hệ số trong một khối
người ta xếp lại chúng theo thứ tự ZigZag. Có thể hình dung hình ZigZag như bảng
trang bên.
Tác dụng của sắp xếp lại theo thứ tự ZigZag là tạo ra nhiều loạt hệ số giống
nhau. Chúng ta biết rằng năng lượng của khối hệ số giảm dần từ góc trên bên trái xuống
góc dưới bên phải nên việc sắp xếp lại các hệ số theo thứ tự ZigZag sẽ tạo điều kiện cho
các hệ số xấp xỉ nhau (cùng mức lượng tử) nằm trên một dòng.
0

2

3

9

10

20

21

35

1

4

8

11

19

22

34

36

5

7

12

18

23

33

37

48

6

13

17

24

32

38

47

49

14

16

25

31

39

46

50

57

15

26

30

40

45

51

56

58

27

29

41

44

52

55

59

62

28

42

43

53

54

60

61

63

Mỗi khối ZigZag này được mã hoá theo phương pháp RLE. Cuối mỗi khối đầu
ra của RLE, ta đặt dấu kết thúc khối EOB (End Of Block).
Sau đó, các khối được dồn lại và mã hoá một lần bằng phương pháp mã
Huffman. Nhờ có dấu kết thúc khối nên có thể phân biệt được hai khối cạnh nhau khi
giải mã Huffman. Hai bảng mã Huffman cho hai thành phần hệ số tất nhiên sẽ khác
nhau.
Để có thể giải nén được, chúng ta phải ghi lại thông tin như: kích thước ảnh, kích
thước khối, ma trận T, độ lệch tiêu chuẩn, các mức tạo lại, hai bảng mã Huffman, kích
thước khối nén một chiều, kích thước khối nén xoay chiều... và ghi nối tiếp vào hai file
nén của hai thành phần hệ số.

ĐỒ ÁN 3
Trang 23/27
Tóm lại, DCT làm giảm độ tương quan không gian của thông tin trong block (khối).
Điều đó cho phép biễu diễn thích hợp ở miền DCT do các hệ số DCT có xu hướng có
phần dư thừa ít hơn. Điều này có nghĩa là DCT gói một phần lớn năng lượng tín hiệu
vào các thành phần biến đổi có tần số tương đối thấp để lưu trữ hoặc truyền dẫn, tạo 0
và các giá trị rất thấp đối với thành phần tần số cao. Nhờ đặc tính của hệ thống nhìn của
mắt người, các hệ số DCT có thể được mã hóa phù hợp, chỉ các hệ số DCT quan trọng
nhất mới được mã hóa và truyền đi. DCT thuận kết hợp với DCT nghịch sẽ không cho
tổn thất nếu độ dài từ mã của hệ số là 13 đến 14 bits cho tín hiệu video đầu vào được số
hóa bằng các mẫu dài 8 bit. Nếu hệ số được lượng tử hóa bằng 11 bit (hoặc ngắn hơn),
thì nén bằng DCT sẽ có tổn hao.
2.2. KHÔI PHỤC ẢNH SỐ
Phương pháp lọc ảnh bao gồm các bước như sau:
-Xác định một điểm trung tâm (x,y);
-Thực hiện các phép toán chỉ liên quan đến một số điểm lân cận với (x,y);
-Kết quả trả về chính là đáp ứng của quá trình lọc tại điểm (x,y);
-Lặp lại quá trình lọc với các điểm (x,y) khác.
Nếu phép toán thực hiện trên các điểm lân cận là tuyến tính thì ta có quá trình
lọc tuyến tính (còn gọi là phép chập không gian), ngược lại, ta có quá trình lọc phi
tuyến.
Để khôi phục ảnh số cụ thể là lọc nhiễu ta lần lượt sử dụng ba loại lọc:
-Lọc median
-Lọc wiener
-Lọc imfilter
a.Lọc median
.
Lọc median là loại lọc phi tuyến dùng mặt nạ. Mỗi pixel được thay thế bằng
median của các pixel láng giềng. Lọc median làm cạnh có chất lượng tốt và được dùng

khi nhiễu tách biệt.
Giả sử A={a1,a2,…,ak} là các giá trị pixel láng giềng a1<=a2<=…<=ak. Thì
Median(A)=
Chú ý: median của một tập có thứ tự là “giá trị tâm”.
B1. Tìm điểm ảnh bị lỗi trong hình xử lý.
B2. Chọn kích thước của cửa sổ (mặt nạ) (là một ma trận).
B3. Sắp xếp các pixel (kể cả pixel bị lỗi) theo dãy có thứ tự tăng (giảm) dần.
B4. Thay pixel bị lỗi bằng giá trị giữa của dãy vừa tính được.
B5. Dịch cửa sổ sang cột (hàng) kế tiếp.
B6. Quay lại B3.
b.Lọc wiener
Đây là bộ lọc tuyến tính nhưng có tính thích nghi tùy theo các giá trị variance
của từng pixel ảnh. Đối với các pixel có variance lớn, lọc wiener chỉ làm phẳng ảnh ở
mức độ thấp nhưng với các pixel có variance nhỏ, nó sẽ có xu hướng trải rộng các giá
trị mức xám hơn. Chất lượng bộ lọc này thường cao hơn các bộ lọc khác vì nó vẫn giữ

ĐỒ ÁN 3
Trang 24/27
được những chi tiết tần số cao của ảnh, vẫn giữ những đường nét biên ảnh, nhưng thời
gian thực thi hàm này sẽ dài hơn. Bộ lọc này thích hợp với các loại nhiễu có công suất
bẳng phẳng.
c.Lọc imfilter
Lọc imfilter là loại lọc tuyến tính, phương pháp lọc trong đó mỗi pixel của ảnh
mới là tổ hợp tuyến tính của các mức xám của các pixel lân cận với pixel (x,y) của ảnh
gốc, nghĩa là mỗi pixel lân cận sẽ được nhân với một hệ số tương ứng nào đó rồi cộng
lại. Nếu vùng lân cận của (x,y) có kích thước mxn, thì sẽ có mn hệ số lọc và chúng cũng
được sắp xếp thành một ma trận kích thước mxn.
2.3.NHẬN DẠNG CẠNH GÓC ẢNH SỐ
Phương pháp phát hiện trực tiếp: dựa chủ yếu vào sự biến thiên độ sáng của

điểm ảnh để làm nổi biên bằng cách lấy đạo hàm
+Lấy đạo hàm bậc nhất ta có phương pháp Gradient
+Lấy đạo hàm bậc hai có phương pháp Laplace
Cả 2 phương pháp này gọi chung là phương pháp dò biên cục bộ
Phương pháp phát hiện gián tiếp: Bằng cách nào đấy chúng ta thu được các vùng
ảnh khác nhau thì đường phân cách các vùng ảnh chính là biên. Phương pháp này khó
thực hiện nhưng cho kết quả tốt khi sự biến thiên mức xám nhỏ.
Ở đây ta sử dụng ba mặt nạ lọc: Sobel, Perwitt, Cannon để nhận dạng cạnh góc
ảnh.

CHƯƠNG 3:
KẾT QUẢ MÔ PHỎNG
3.1 Mô hình mô phỏng

ĐỒ ÁN 3
Trang 25/27

.

Hình 3.1 Mô hình mô phỏng GUI
3.2 Kết quả mô phỏng

Hình 3.2 Kết quả mô phỏng bằng GUI