Upload
lethang85
View
510
Download
6
Embed Size (px)
Citation preview
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP. HCM
KHOA CÔNG NGHỆ ĐIỆN TỬ
ĐỒ ÁN TỐT NGHIỆP
Đề tài:
DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA
GVHD: Ths. Đào Thị Thu Thủy
SVTH : Nguyễn Trung Hiếu -06052461
Bùi Ngọc Liêm -06054491
Lớp : DHDT2B1
TP. Hồ Chí Minh, tháng 7 năm 2010
LỜI MỞ ĐẦU
Hiện nay, cùng với sự phát triển của xã hội, vấn đề an ninh bảo mật đang
được yêu cầu khắt khe tại mọi quốc gia trên thế giới. Các hệ thống nhận dạng con
người được ra đời với độ tin cậy ngày càng cao. Một trong các bài toán nhận dạng
con người rất được quan tâm hiện nay là nhận dạng khuôn mặt. Vì nhận dạng khuôn
mặt là cách mà con người sử dụng để phân biệt nhau. Bên cạnh đó, ngày nay việc
thu thập, xử lý thông tin qua ảnh để nhận biết đối tượng đang được quan tâm và ứng
dụng rộng rãi. Với phương pháp này, chúng ta có thể thu nhận được nhiều thông tin
từ đối tượng mà không cần tác động nhiều đến đối tượng nghiên cứu. Sự phát triển
của khoa học máy tính tạo môi trường thuận lợi cho bài toán nhận dạng khuôn mặt
người từ ảnh số. Các hệ thống nhận dạng offline đã ra đời và có độ tin cậy cao, tuy
nhiên các hệ thống nhận dạng online lại chưa đáp ứng được nhiều.
Bài toán nhận dạng khuôn mặt người là một bài toán hấp dẫn, không giới hạn
giải pháp sử dụng, vận dụng linh hoạt kiến thức trong nhiều lĩnh vực, đã thách thức
nhiều người nghiên cứu vì tính ứng dụng to lớn trong thực tế. Đây là một chủ đề có
thể nói còn tương đối mới với những ứng dụng mang tính công nghệ cao như: robot,
các thiết bị camera,các hệ thống bảo mật, nhận dạng,…đã và đang được các hãng,
công ty áp dụng vào nhằm nâng cao các tính năng sản phẩm của mình trong quá
trình cạnh tranh trên thị trường hiện nay…
Với mong muốn tiếp cận các công nghệ mới, đồng thời bổ sung kiến thức về
khoa học kỹ thuật hiện đại, cũng như tổng kết lại những kỹ năng, kiến thức trong
suốt quá trình học tập tại trường, chúng em xin chọn đề tài “ Dò tìm và cắt ảnh
mặt người dùng PCA”. Đây có thể là một bài toán nhỏ, nhưng nó cũng giúp chúng
em có một cái nhìn khái quát về bài toán, tạo cơ sở tiền đề cho sự tìm tòi và phát
triển các hướng cao hơn trong sự nghiên cứu các công nghệ mới...
Bài luận này được trình bày bao gồm có 5 chương:
• Chương 1: Giới thiệu Matlab và khái quát về ảnh.
• Chương 2: Các phương pháp xác định khuôn mặt.
• Chương 3: Phân tích thành phần chính PCA.
• Chương 4: Chương trình mô phỏng.
• Chương 5: Kết luận.
Nội dung của đề tài:
- Tìm hiểu phương pháp nhận diện ảnh.
- Nghiên cứu PCA.
- Dò tìm ảnh mặt người có không gian (1=>4).
- Cắt ảnh mặt và lưu vào 1 file.
- Xử lý ảnh động qua webcam.
Trong bài luận này chúng em xin đề cập tới vấn đề dò tìm và nhận dạng mặt
người qua một ảnh tĩnh cho trước, đồng thời mở rộng hơn là xử lý ảnh thu được qua
một thiết bị thu ảnh, ví dụ như: camera, webcam,…
LỜI CẢM ƠN
Sau một thời gian học tập và nghiên cứu, cuối cùng chúng em cũng đã hoàn
thành bài luận nghiên cứu của mình. Đây là thời điểm tốt nhất để chúng em có dịp
được bày tỏ lòng biết ơn của mình đến những người thân đã giúp đỡ động viên
trong suốt quá trình chúng em thực hiện bài luận này.
Trước tiên, chúng em xin cảm ơn BGH trường Đại Học Công Nghiệp Thành
Phố Hồ Chí Minh, Quý Thầy Cô trong khoa Công nghệ Điện Tử đã tạo điều kiện
cho chúng em thực hiện bài luận này. Đặc biệt là Cô Đào Thị Thu Thủy, Cô không
chỉ là người hướng dẫn khoa học một cách tài tình, mà còn là người dìu dắt chúng
em, động viên và định hướng cho chúng em có những bước đi đầu đời về một cách
nhìn khoa học về trí thức, cuộc sống, và sự cố gắng phấn đấu trong tương lai, điều
này có ý nghĩa rất sâu sắc đối với chúng em, giúp chúng em tự tin và nổ lực hoàn
thành bài luận này đúng thời hạn. Một lần nữa, chúng em xin bày tỏ lòng biết ơn
sâu sắc đến với Cô.
Đồng thời chúng con xin cám ơn cha mẹ, anh chị đã hết sức thông cảm, chia
sẽ và động viên chúng con trong những khó khăn trong quá trình làm đồ án tốt
nghiệp này.
Xin cám ơn những người bạn thân yêu, những người đã yêu mến, chia sẽ,
giúp đỡ chúng tôi trong lúc chúng tôi thực hiện bài luận này.
Kết quả của bài luận này là món quà mà chúng em dành tặng cho tất cả mọi
người thân yêu, với tất cả tấm lòng mình!
Sinh viên thực hiện
Nguyễn Trung Hiếu
Bùi Ngọc Liêm
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
Chữ ký của giáo viên
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN ...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
Chữ ký của giáo viên
MỤC LỤC Trang
Chương 1: GIỚI THIỆU MATLAB VÀ KHÁI QUÁT VỀ ẢNH
.............................................................................................................................1
1.1 Giới thiệu chung về phần mềm Matlab.........................................................2
1.1.1 Khái niệm về Matlab ............................................................................2
1.1.2 Tổng quan về cấu trúc dữ liệu Matlab, các ứng dụng ..........................2
1.1.2.1 Dữ liệu..........................................................................................3
1.1.2.2 Ứng dụng......................................................................................3
1.1.2.3 Toolbox là một công cụ quan trọng trong Matlab .......................3
1.1.3 Hệ thống Matlab ...................................................................................3
1.1.4 Làm quen với Matlab............................................................................4
1.1.5 Các cửa sổ làm việc của Matlab ...........................................................5
1.2 Giới thiệu khái quát về ảnh số......................................................................7
1.2.1 Các khái niệm cơ bản về ảnh................................................................7
1.2.2 Các cách phân loại ảnh .........................................................................8
1.3 Xử lý ảnh với Matlab ...................................................................................9
1.3.1 Xử lý ảnh .............................................................................................9
1.3.2 Các giai đoạn xử lý ảnh .....................................................................10
1.3.3 Xử lý ảnh với Matlab..........................................................................11
1.3.3.1 Các kiểu ảnh trong Matlab.........................................................11
1.3.3.2 Các hàm xử lý ảnh cơ bản trong Matlab....................................13
1.3.3.3 Biến đổi không gian ảnh ............................................................20
Chương 2: CÁC PHƯƠNG PHÁP XÁC ĐỊNH KHUÔN MẶT
...........................................................................................................................36
2.1 Định nghĩa bài toán xác định khuôn mặt người ..........................................37
2.2 Ứng dụng của phương pháp xác định khuôn mặt .......................................37
2.3 Phương pháp xác định khuôn mặt...............................................................39
2.3.1 Hướng tiếp cận dựa trên tri thức.........................................................40
2.3.2 Hướng tiếp cận dựa trên đặc trưng không thay đổi ............................41
2.3.2.1 Các đặc trưng khuôn mặt ...........................................................42
2.3.2.2 Kết cấu .......................................................................................45
2.3.2.3 Sắc màu của da...........................................................................45
2.3.2.4 Đa đặc trưng...............................................................................45
2.3.3 Hướng tiếp cận dựa trên so khớp mẫu................................................45
2.3.4 Hướng tiếp cận dựa trên diện mạo .....................................................46
2.4 Khó khăn và thử thách trong bài toán xác định khuôn mặt người ..............47
Chương 3: PHÂN TÍCH THÀNH PHẦN CHÍNH PCA
(PRINCIPAL COMPONENT ANALYSIS)
...........................................................................................................................48
3.1 Sơ lược về phân tích thành phần chính PCA ..............................................49
3.2 Thuật toán PCA và ứng dụng trong nhận dạng khuôn mặt người ..............50
3.2.1 Thuật toán ...........................................................................................50
3.2.2 Phân tích thành phần chính PCA .......................................................50
3.2.3 Hình ảnh minh họa .............................................................................53
3.3 Ứng dụng Eigenfaces trong việc nhận dạng mặt người ..............................56
3.3.1 Tính toán Eigenfaces ..........................................................................59
3.3.2 Dùng Eigenfaces để phân loại ảnh mặt người. ...................................61
3.3.3 Ứng dụng Eigenfaces để phát hiện gương mặt...................................62
3.3.3.1 Xem xét lại không gian mặt .......................................................63
3.3.3.2 Nhận dạng theo thời gian thực ...................................................64
3.4 Nhận xét ......................................................................................................65
3.4.1 Ưu điểm của phương pháp PCA.........................................................65
3.4.2 Nhược điểm của PCA.........................................................................65
Chương 4: CHƯƠNG TRÌNH MÔ PHỎNG
...........................................................................................................................67
4.1 Chương trình mô phỏng ..............................................................................68
4.1.1 Cơ sở dữ liệu ảnh................................................................................68
41.1.1 Tập ảnh huấn luyện .......................................................................68
4.1.1.2 Tập ảnh mẫu...............................................................................69
4.1.2 Các bước thực hiện chương trình .......................................................70
4.1.3 Lưu đồ giải thuật.................................................................................72
4.1.3.1 Lưu đồ giải thuật chính ..............................................................72
4.1.3.2 Lưu đồ giải thuật chi tiết ............................................................72
4.1.4 Kết quả mô phỏng...............................................................................77
4.1.5 Tốc độ thực hiện. ................................................................................80
4.2 Nhận xét kết quả đạt được...........................................................................81
Chương 5: KẾT LUẬN...................................................................................85
5.1 Kết luận .......................................................................................................85
5.2 Hướng phát triển đề tài................................................................................85
PHỤ LỤC.............................................................................................................
TÀI LIỆU THAM KHẢO ..................................................................................
MỤC LỤC HÌNH Trang
Hình 1.1 Cửa sổ khi khởi động Matlab...............................................................4
Hình 1.2 Cửa sổ Command History....................................................................6
Hình 1.3 Cửa sổ Workspace................................................................................6
Hình 1.4 Cửa sổ Array Editor.............................................................................7
Hình 1.5 Các bước cơ bản trong xử lý ảnh.........................................................9
Hình 1.6 Ảnh trước và sau khi imresize ...........................................................23
Hình 1.7 Ảnh trước và sau khi imrotate............................................................26
Hình 1.8 Ảnh được quay theo chiều ngang.......................................................27
Hình 1.9 Ảnh trước và sau khi imcrop..............................................................28
Hình 1.10 Ảnh trước và sau khi imcrop theo 1 tọa độ cho trước .....................30
Hình 1.11 Ảnh trước và sau khi imtransforms..................................................32
Hình 1.12 Ảnh trước và sau khi imtransformsvới 1 cường độ ảnh...................35
Hình 2.1 Độ phân giải của 1 ảnh......................................................................41
Hình 2.2 Một loại trí thức của người nghiên cứu phân tích trên khuôn mặt....41
Hình 2.3 Một mẫu khuôn mặt, có 16 vùng và 23 quan hệ (các mũi tên) ..........46
Hình 3.1 Eigenfaces ..........................................................................................53
Hình 3.2 Bức ảnh kiểm tra và hình chiếu của nó..............................................54
Hình 3.3 Ảnh ban đầu .......................................................................................55
Hình 3.4 Face map của bức ảnh ban đầu .........................................................55
Hình 3.5 Face map ảnh ban đầu với không gian không phải là khuôn mặt .....56
Hình 3.6 Những gương mặt dùng để huấn luyện ..............................................57
Hình 3.7 Bảy Eigenfaces được tính toán từ dãy huấn luyện của hình 4.6,
phông nền đã được loại bỏ................................................................................58
Hình 3.8 Ảnh và hình chiếu của nó vào không gian mặt người xác định bởi
các Eigenfaces từ hình 3.7 ................................................................................61
Hình 3.9 Ảnh gốc và bản đồ mặt người, vùng tối chỉ ra hình dạng
khuôn mặt ..........................................................................................................63
Hình 3.10 Ví dụ đơn giản thể hiện 4 hình chiếu của ảnh lên không gian mặt người.
Trong trường hợp này sử dụng 2 eigenfaces là µ1, µ2 và 3 lớp mặt người (cá thể) đã
biết trước (Ω1, Ω2, Ω3).......................................................................................63
Hình 3.11 Hệ thống dò tìm và định vị mặt người..............................................64
Hình 4.1 Tập ảnh Face......................................................................................68
Hình 4.2 Tập ảnh nface.....................................................................................69
Hình 4.3 Tập ảnh mẫu.......................................................................................70
Hình 4.4 Lưu đồ giải thuật chính ......................................................................72
Hình 4.5 Lưu đồ giải thuật chọn ảnh ................................................................73
Hình 4.6 Lưu đồ giải thuật chương trình dò tìm ảnh mặt người ......................74
Hình 4.7 Lưu đồ giải thuật chương trình nhận dạng........................................75
Hình 4.8 Lưu đồ giải thuật PCA .......................................................................76
Hình 4.9 Giao diện chính ..................................................................................77
Hình 4.10 Giao diện chương trình 1 (ảnh tĩnh) ................................................77
Hình 4.11 Giao diện chương trình 2 (ảnh động) ..............................................78
Hình 4.12 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 1 khuôn mặt .......78
Hình 4.13 Giao diện kết quả chương trình 2 (ảnh động)với 1 khuôn mặt........79
Hình 4.14 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 2 khuôn mặt .......79
Hình 4.15 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 4 khuôn mặt nữ ..80
Hình 4.16 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 4 khuôn mặt nam80
Hình 4.17 Ảnh lỗi do quá nhiều chi tiết không phân biệt được ........................83
Hình 4.18 Lỗi do ảnh không được sắc nét ........................................................84
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
1
Chương 1
GIỚI THIỆU MATLAB
VÀ KHÁI QUÁT VỀ ẢNH
1.1 Giới thiệu chung về phần mềm Matlab
1.2 Giới thiệu khái quát về ảnh số
1.3 Xử lý ảnh với Matlab
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
2
Chương 1
GIỚI THIỆU MATLAB VÀ
KHÁI QUÁT VỀ ẢNH 1.1 Giới thiệu chung về phần mềm Matlab
1.1.1 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.2 Tổng quan về cấu trúc dữ liệu của Matlab, các ứng dụng
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 vectơ và
có thể sử dụng ngôn ngữ C họ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.
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
3
1.1.2.1 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:
• 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, uint8, uint16, uint64...
• 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.
1.1.2.2 Ứ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.
1.1.2.3 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.3 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.
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
4
Đâ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.
+ 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 nghich đả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.
• Đồ hoạ trong Matlab. Bao gồm các câu lệnh thể hiện đồ họa 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.4 Làm quen với Matlab
Trước tiên để khởi động Matlab bạn kích click vào biểu tượng file
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.
Hình 1.1 Cửa sổ khi khởi động Matlab
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
5
Trên hình vẽ ta thấy cửa sổ desktop (cửa sổ lớn nhất), và các cửa sổ phụ của
nó.
1.1.5 Các cửa sổ làm việc của Matlab
a) 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-file.
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
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”
b) 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 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 đó. Xem hình 1.2
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
6
Click
chuột lên
lệnh hoặc
biến để sử
dụng lại
Hình 1.2 Cửa sổ Command History
c) 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.
(xem hình 1.3)
Click
chuột lên
biến để
xem dữ
liệu (hoặc
thay đổi
giá trị)
Hình 1.3 Cửa sổ Workspace
Ngoài ra nó cho phép thay đổi giá trị, cũng như kích thước của biến bằng
cách click chuột lên các biến. Hoặc click vào nút bên trái ngay cạnh nút save. Ví dụ
khi chọn biến (giả sử là biến b) rồi click (hoặc click chuột vào nút cạnh nút save) ta
được cửa sổ sau gọi là Array Editor (xem hình 1.4)
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
7
Hình 1.4 Cửa sổ Array Editor
Tiêu đề là tên biến b, định dạng dữ liệu ở ô có tên là: Numeric format, mặc
định là dạng short, kích thước size là 1 by 3 (tức là một hàng và 3 cột) ta có thể thay
đổi kích thước này bằng cách thay đổi giá trị có trong ô kích thước size.
Dùng cửa sổ này để lưu các biến ở dưới là dữ liệu của biến b, ta có thể thay
đổi chúng bằng cách thay đổi giá trị trong các ô đó. Tất cả các biến đều được lưu
trong Workspace trong đó thể hiện cả kích thước (Size), số Bytes và kiểu dữ liệu
(class) (8 bytes cho mỗi phần tử dữ liệu kiểu double cụ thể là 24 bytes dành cho b
và 8 bytes dành cho a).
d) 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.
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.
e) Đường dẫn thư mục: Nơi lưu giữ các files chương trình.
1.2 Giới thiệu khái quát về ảnh số
1.2.1 Các khái niệm cơ bản về ảnh
Ảnh số là tập hợp hữu hạn 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. Số điểm ảnh xác định độ phân giải của ảnh. Ảnh có độ phân
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
8
giải càng cao thì càng thể hiện rõ nét các đặt điểm của tấm hình càng làm cho tấm
ảnh trở nên thực và sắc nét hơn.
a) Điểm ảnh (Picture Element)
Đ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.
b) Mức xám của ảnh
Mức xám: Là kết quả của sự biến đổi tương ứng 1 giá trị độ sáng của 1 điểm
ảnh với 1 giá trị nguyên dương. Thông thường nó xác định trong [0, 255] tuỳ thuộc
vào giá trị mà mỗi điểm ảnh được biểu diễn.
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) Độ phân giải của ảnh
Định nghĩa: Độ phân giải (Resolution) của ảnh là mật độ điểm ảnh được ấn
định trên một ảnh số được hiển thị.
Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao cho
mắt người vẫn thấy được sự liên tục của ảnh. Việc lựa chọn khoảng cách thích hợp
tạo nên một mật độ phân bổ, đó chính là độ phân giải và được phân bố theo trục x
và y trong không gian hai chiều.
Ví dụ: Độ phân giải của ảnh trên màn hình CGA (Color Graphic Adaptor) là
một lưới điểm theo chiều ngang màn hình: 320 điểm chiều dọc * 200 điểm ảnh
(320*200). Rõ ràng, cùng màn hình CGA 12” ta nhận thấy mịn hơn màn hình CGA
17” độ phân giải 320*200. Lý do: cùng một mật độ (độ phân giải) nhưng diện tích
màn hình rộng hơn thì độ mịn (liên tục của các điểm) kém hơn.
1.2.2 Các cách phân loại ảnh
Ảnh nhị phân: Giá trị xám của tất cả các điểm ảnh chỉ nhận giá trị 1 hoặc 0
như vậy mỗi điểm ảnh trong ảnh nhị phân được biểu diễn bởi 1 bit.
Ảnh xám: Giá trị xám nằm trong [0, 255] như vậy mỗi điểm ảnh trong ảnh
nhị phân được biểu diễn bởi 1 byte.
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
9
Ảnh màu:
- Hệ màu RGB:
Một pixel được biểu diễn bằng 3 giá trị (R, G, B) trong đó R, G, B là một giá trị
xám và được biểu biểu diễn bằng 1 byte. Khi đó ta có một ảnh 24 bits.
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)
1.3 Xử lý ảnh với Matlab
1.3.1 Xử lý ảnh
Các bước cần thiết trong xử lý ảnh. Đầu tiên, ảnh tự nhiên từ thế giới ngoài
được thu nhận qua các thiết bị thu (như Camera, máy chụp ảnh). Trước đây, ảnh thu
qua Camera là các ảnh tương tự (loại Camera ống kiểu CCIR). Gần đây, với sự phát
triển của công nghệ, ảnh màu hoặc đen trắng được lấy ra từ Camera, sau đó nó được
chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo. Máy ảnh số hiện nay
là một thí dụ gần gũi. Mặt khác, ảnh cũng có thể tiếp nhận từ vệ tinh; có thể quét từ
ảnh chụp bằng máy quét ảnh. Hình dưới đây mô tả các bước cơ bản trong xử lý ảnh.
Thu nhận ảnh
Tiền xử lý ảnh
Phân đoạn ảnh
Biểu diễn và mô tả
Nhận dạng và nội suy
Cơ sở tri thức
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
10
Hình 1.5 Các bước cơ bản trong xử lý ảnh
1.3.2 Các giai đoạn xử lý ảnh
a) Thu nhận ảnh (Image Acquisition)
- Ảnh được thu từ nhiều nguồn khác nhau:máy ảnh, máy quay phim, máy quét,
ảnh vệ tinh…
- Mục đích: biến đổi thông tin hình ảnh về các cấu trúc được lưu trữ trong máy
tính, có thể hiển thị ra các thiết bị ngoại vi như là máy in, màn hình…
- Gồm hai tiến trình:
+ Biến đổi năng lượng quang học thành năng lượng điện.
+ Tổng hợp năng lượng điện thành ảnh hoặc ma trận số.
b) Tiền xử lý (Image Processing)
- Là quá trình sử dụng các kỹ thuật xử lý ảnh để làm ảnh tốt lên theo mục đích
sử dụng.
- Mục đích:
+ Điều chỉnh độ chiếu sáng để khắc phục hậu quả của việc chiếu sáng không
đều.
+ Giảm nhỏ thành phần nhiễu của ảnh tức là các đối tượng xuất hiện ngoài ý
muốn.
+ Hiệu chỉnh giá trị độ sáng giữa nền và đối tượng.
+ Chuẩn hoá độ lớn, màu, dạng của ảnh.
+Điều chỉnh bộ lọc để khuyếch đại và nén các tần số.
c) Phân đoạn (Segmentation)
- Là quá trình phân chia nội dung các đối tượng cần khảo sát ra khỏi ảnh.
- Phân chia các đối tượng tiếp giáp nhau.
- Phân tách các đối tượng riêng biệt thành các đối tượng con.
d) Biểu diễn ảnh (Image Representation)
Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh đã phân
đoạn) cộng với mã liên kết với các vùng lận cận. Việc biến đổi các số liệu này thành
dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy tính. Việc chọn các tính
chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc tách
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
11
các đặc tính của ảnh dưới dạng các thông tin định lượng hoặc làm cơ sở để phân
biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được.
Ví dụ: trong nhận dạng ký tự trên phong bì thư, chúng ta miêu tả các đặc
trưng của từng ký tự giúp phân biệt ký tự này với ký tự khác.
e) Nhận dạng và nội suy ảnh (Image Recognition and Interpretation)
Nhận dạng ảnh là quá trình xác định ảnh. Quá trình này thường thu được
bằng cách so sánh với mẫu chuẩn đã được học (hoặc lưu) từ trước. Nội suy là phán
đoán theo ý nghĩa trên cơ sở nhận dạng.
Ví dụ: một loạt chữ số và nét gạch ngang trên phong bì thư có thể được nội
suy thành mã điện thoại. Có nhiều cách phân loai ảnh khác nhau về ảnh. Theo lý
thuyết về nhận dạng, các mô hình toán học về ảnh được phân theo hai loại nhận
dạng ảnh cơ bản:
- Nhận dạng theo tham số.
- Nhận dạng theo cấu trúc.
Một số đối tượng nhận dạng khá phổ biến hiện nay đang được áp dụng trong
khoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử),
nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặt
người…
f) Cơ sở tri thức (Knowledge Base)
Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sáng
tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu. Trong
nhiều khâu xử lý và phân tích ảnh ngoài việc đơn giản hóa các phương pháp toán
học đảm bảo tiện lợi cho xử lý, người ta mong muốn bắt chước quy trình tiếp nhận
và xử lý ảnh theo cách của con người. Trong các bước xử lý đó, nhiều khâu hiện
nay đã xử lý theo các phương pháp trí tuệ con người. Vì vậy, ở đây các cơ sở tri
thức được phát huy.
1.3.3 Xử lý ảnh với Matlab
1.3.3.1 Các kiểu ảnh trong Matlab
a) Ảnh được định chỉ số (Indexed Images)
Một ảnh chỉ số bao gồm một ma trận dữ liệu X và ma trận bản đồ màu map.
Ma trận dữ liệu có thể có kiểu thuộc lớp uint8, uint16 hoặc kiểu double. Ma trận
bản đồ màu là một mảng mx3 kiểu double bao gồm các giá trị dấu phẩy động nằm
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
12
giữa 0 và 1. Mỗi hàng của bản đồ chỉ ra các giá trị mà: red, green và blue của một
màu đơn. Một ảnh chỉ số sử dụng ánh xạ trực tiếp giữa giá trị của pixel ảnh tới giá
trị trong bản đồ màu. Màu sắc của mỗi pixel ảnh được tính toán bằng cách sử dụng
giá trị tương ứng của X ánh xạ tới một giá trị chỉ số của map. Giá trị 1 chỉ ra hàng
đầu tiên, giá trị 2 chỉ ra hàng thứ hai trong bản đồ màu …
Một bản đồ màu thường được chứa cùng với ảnh chỉ số và được tự động nạp
cùng với ảnh khi sử dụng hàm imread để đọc ảnh. Tuy nhiên, ta không bị giới hạn
khi sử dụng bản đồ màu mặc định, ta có thể sử dụng bất kì bản đồ màu nào.
b) Ảnh cường độ (Intensity Images)
Một ảnh cường độ là một ma trận dữ liệu ảnh I mà giá trị của nó đại diện cho
cường độ trong một số vùng nào đó của ảnh. Matlab chứa một ảnh cường độ như
một ma trận đơn, với mỗi phần tử của ma trận tương ứng với một pixel của ảnh. Ma
trận có thể thuộc lớp double, uint8 hay uint16. Trong khi ảnh cường độ hiếm khi
được lưu với bản đồ màu, Matlab sử dụng bản đồ màu để hiển thị chúng.
Những phần tử trong ma trận cường độ đại diện cho các cường độ khác nhau
hoặc độ xám. Những điểm có cường độ bằng 0 thường được đại diện bằng màu đen
và cường độ 1,255 hoặc 65535 thường đại diện cho cường độ cao nhất hay màu
trắng.
c) Ảnh nhị phân (Binary Images)
Trong một ảnh nhị phân, mỗi pixel chỉ có thể chứa một trong hai giá trị nhị
phân 0 hoặc 1. Hai giá trị này tương ứng với bật hoặc tắt (on hoặc off). Một ảnh nhị
phân được lưu trữ như một mảng logic của 0 và 1.
d) Ảnh RGB (RGB Images)
Một ảnh RGB - thường được gọi là true-color, được lưu trữ trong Matlab
dưới dạng một mảng dữ liệu có kích thước 3 chiều mxnx3 định nghĩa các giá trị màu
red, green và blue cho mỗi pixel riêng biệt. Ảnh RGB không sử dụng palette. Màu
của mỗi pixel được quyết định bởi sự kết hợp giữa các giá trị R, G, B (Red, Green,
Blue) được lưu trữ trong một mặt phẳng màu tại vị trí của pixel. Định dạng file đồ
hoạ lưu trữ ảnh RGB giống như một ảnh 24 bits trong đó R, G, B chiếm tương ứng
8 bit một. Điều này cho phép nhận được 16 triệu màu khác nhau.
Một mảng RGB có thể thuộc lớp double, uint8 hoặc uint16. Trong một mảng
RGB thuộc lớp double, mỗi thành phần màu có giá trị giữa 0 và 1. Một pixel mà
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
13
thành phần màu của nó là (0, 0, 0) được hiển thị với màu đen và một pixel mà thành
phần màu là (1, 1, 1 ) được hiển thị với màu trắng. Ba thành phần màu của mỗi
pixel được lưu trữ cùng với chiều thứ 3 của mảng dữ liệu. Chẳng hạn, giá trị màu R,
G, B của pixel (10, 5) được lưu trữ trong RGB(10, 5, 1), RGB(10, 5, 2) và RGB(10,
5, 3) tương ứng.
Để tính toán màu sắc của pixel tại hàng 2 và cột 3 chẳng hạn, ta nhìn vào bộ
ba giá trị được lưu trữ trong (2, 3, 1:3). Giả sử (2, 3, 1) chứa giá trị 0.5176; (2, 3, 2)
chứa giá trị 0.1608 và (2, 3, 3) chứa giá trị 0.0627 thì màu sắc của pixel tại (2, 3) sẽ
là (0.5176, 0.1608, 0.0627).
1.3.3.2 Các hàm xử lý ảnh cơ bản trong Matlab
a) Đọc và ghi dữ liệu ảnh
Đọc một ảnh đồ hoạ
- Hàm imread đọc một ảnh từ bất kì định dạng nào được trợ giúp trong bất kì
chiều sâu bit nào được trợ giúp. Hầu hết các file ảnh sử dụng 8 bit để chứa
giá trị của pixel. Khi chúng được đọc vào bộ nhớ, Matlab chứa chúng dưới
dạng uint8. Với các file trợ giúp 16 bít dữ liệu, PNG và TIFF, Matlab chứa
chúng dưới dạng uint16.
Chú ý: Với ảnh chỉ số, imread luôn luôn đọc bản đồ màu vào trong một
chuỗi thuộc lớp double, thậm chí mảng ảnh tự nó thuộc lớp uint8 hay uint16
- Chẳng hạn, đoạn mã sau sẽ đọc một ảnh RGB vào không gian làm việc của
Matlab lưu trong biến RGB.
RGB=imread(‘football.jpg’);
Trong ví dụ này, imread sẽ nhận ra định dạng file để sử dụng từ tên file. Ta
cũng có thể chỉ ra định dạng file như một tham số trong hàm imread. Matlab trợ
giúp rất nhiều định dạng đồ hoạ thông dụng chẳng hạn: BMP, GIF, JPEG, PNG,
TIFF … Để biết thêm các kiểu gọi hàm và tham số truyền vào, xem trợ giúp online
của Matlab.
Đọc nhiều ảnh từ một file đồ hoạ
- Matlab trợ giúp một số định dạng file đồ hoạ chẳng hạn như: HDF và TIFF,
chúng chứa nhiều ảnh. Theo mặc định, imread chỉ trợ giúp ảnh đầu tiên
trong file. Để nhập thêm các ảnh từ file, sử dụng cú pháp được trợ giúp bởi
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
14
định dạng file. Chẳng hạn, khi được sử dụng với TIFF, ta có thể sử dụng một
giá trị chỉ số với imread để chỉ ra ảnh mà ta muốn nhập vào.
Ví dụ sau đây đọc một chuỗi 27 ảnh từ một file TIFF và lưu những ảnh này
trong một mảng 4 chiều. Ta có thể sử dụng hàm iminfo để xem bao nhiêu ảnh đã
được lưu trữ trong file:
mri = uint8(zeros(128,128,1,27)); % preallocate 4-D array
for frame=1:27
[mri(:,:,:,frame),map] = imread('mri.tif',frame);
End
- Khi file chứa nhiều ảnh theo một số kiểu nhất định chẳng hạn theo thứ tự
thời gian, ta có thể lưu ảnh trong Matlab dưới dạng mảng 4 chiều. Tất cả các
ảnh phải có cùng kích thước.
Ghi một ảnh đồ hoạ
- Hàm imwrite sẽ ghi một ảnh tới một file đồ hoạ dưới một trong các định
dạng được trợ giúp. Cấu trúc cơ bản nhất của imwrite sẽ yêu cầu một biến
ảnh và tên file. Nếu ta gộp một phần mở rộng trong tên file, Matlab sẽ nhận
ra định dạng mong muốn từ nó.
Ví dụ sau tải một ảnh chỉ số X từ một file Map với bản đồ màu kết hợp với
nó map sau đó ghi ảnh xuống một file bitmap.
load clown
whos
Name Size Bytes Class
X 200x320 512000 double array
caption 2x1 4 char array
map 81x3 1944 double array
Grand total is 64245 elements using 513948 bytes
imwrite(X,map,'clown.bmp')
Chỉ ra định dạng phụ - Tham số đặc biệt
- Khi sử dụng imwrite với một số định dạng đồ hoạ, ta có thể chỉ ra các tham
số phụ. Chẳng hạn, với định dạng PNG ta có thể chỉ ra độ sâu bit như một
tham số phụ. Ví dụ sau sẽ chi một ảnh cường độ I với một file ảnh 4 bit
PNG.
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
15
imwrite(I,'clown.png','BitDepth',4 );
- Để biết thêm các cấu trúc khác của hàm xem phần trợ giúp trực tuyến của
Matlab.
Đọc và ghi ảnh nhị phân theo định dạng 1 bit
- Trong một số định dạng file, một ảnh nhị phân có thể được lưu trong một
định dạng 1 bit. Nếu định dạng file trợ giúp nó, Matlab ghi ảnh nhị phân như
ảnh 1 bit theo mặc định. Khi ta đọc một ảnh nhị phân với định dạng 1 bit,
Matlab đại diện nó trong không gian làm việc như một mảng lôgic.
- Ví dụ sau đọc một ảnh nhị phân và ghi nó dưới dạng file TIFF. Bởi vì định
dạng TIFF trợ giúp ảnh 1 bit, file được ghi lên đĩa theo định dạng 1 bit:
BW = imread('text.png');
imwrite(BW,'test.tif');
Để kiểm tra chiều sâu bit của file test.tif, gọi hàm iminfo và kiểm tra trường
BitDepth của nó:
info = imfinfo('test.tif');
info.BitDepth
ans =1
Chú ý: Khi ghi file nhị phân, Matlab thiết lập trường ColorType thành
‘grayscale’.
Xem lớp lưu trữ của file .
- Hàm imwrite sử dụng luật sau đây để quyết định lớp lưu trữ được sử dụng
trong ảnh kết quả:
+ logical: Nếu định dạng ảnh ra (Output Image) được chỉ rõ là trợ giúp ảnh 1
bit, hàm imwrite tạo một file ảnh 1 bit. Nếu định dạng ảnh ra được chỉ rõ là không
trợ giúp ảnh 1 bit (như JPEG), hàm imwrite chuyển ảnh tới một ảnh thuộc lớp
uint8.
+ uint8: Nếu định dạng ảnh ra được chỉ rõ là trợ giúp ảnh 8 bit, hàm imwrite
tạo một ảnh 8 bit
+ uint16: Nếu định dạng ảnh ra được chỉ rõ trợ giúp ảnh 16 bit (PNG hoặc
TIFF), hàm imwrite tạo một ảnh 16 bit. Nếu định dạng ảnh ra không trợ giúp ảnh
16 bit, hàm chuyển đổi dữ liệu ảnh tới lớp uint8 và tạo một ảnh 8 bit.
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
16
+ double: Matlab chuyển dữ liệu ảnh tới dạng uint8 và tạo một ảnh 8 bit bởi
vì hầu hết các file ảnh sử dụng định dạng 8 bit.
Truy vấn một file đồ hoạ
- Hàm imfinfo cho phép ta có thể nhận được thông tin về một file ảnh được
trợ giúp bởi toolbox.
Cú pháp: imfinfo(filename,fmt)
Các thông tin được cung cấp bởi hàm imfinfo là: filename, filemodedate,
filesize, format, formatversion, width, height, bitdepth, colortype … Thông tin mà
ta nhận được phụ thuộc vào kiểu của file nhưng nó luôn bao gồm những thông tin
sau:
+ Tên của file ảnh.
+ Định dạng file ảnh.
+ Số version của định dạng file.
+ Ngày sửa đổi file gần nhất.
+ Kích thước file tính theo byte.
+ Chiều rộng ảnh tính theo pixel.
+ Chiều cao ảnh tính theo pixel.
+ Số lượng bít trên một pixel.
+ Kiểu ảnh: RGB, chỉ số …
b) Hiển thị ảnh
Dùng hàm imview
- Để hiển thị một ảnh sử dụng hàm imview, dùng hàm imview, chỉ rõ ảnh mà
ta muốn hiển thị. Ta có thể sử dụng imview để hiển thị một ảnh mà đã được
nhập vào trong không gian làm việc của Matlab.
moonfig = imread('moon.tif');
imview(moonfig);
Ta cũng có thể chỉ định tên của file ảnh như trong ví dụ sau:
imview('moon.tif');
- File ảnh phải có mặt trong thư mục hiện tại hoặc trong đường dẫn của
Matlab. Cấu trúc này có thể hữu ích cho việc quét qua nhiều ảnh. Tuy nhiên,
lưu ý, khi sử dụng cấu trúc này, dữ liệu ảnh không được lưu trong không
gian làm việc của Matlab.
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
17
- Nếu ta gọi hàm imview mà không chỉ ra mất kì tham số nào, nó sẽ hiển thị
một hộp chọn file cho phép ta chỉ ra tên file muốn hiển thị.
Xem nhiều ảnh
- Nếu ta chỉ ra một file mà chứa nhiều ảnh, hàm imview chỉ hiển thị ảnh đầu
tiên trong file đó. Để xem tất cả các ảnh trong file, sử dụng hàm imread để
nhập mỗi ảnh vào trong không gian làm việc của Matlab sau đó gọi hàm
imview nhiều lần để hiển thị mỗi ảnh riêng biệt.
Dùng hàm imshow
- Để xem ảnh, ta có thể sử dụng hàm imshow thay cho imview. Ta sử dụng
imshow để hiển thị một ảnh đã được nhập vào trong không gian làm việc
như ví dụ sau:
moon = imread('moon.tif');
imshow(moon);
Ta cũng có thể chỉ ra tên của file ảnh như một tham số truyền vào cho hàm
như ví dụ sau: imshow('moon.tif');
Khi sử dụng cấu trúc này thì dữ liệu ảnh không được nhập vào trong không
gian làm việc. Tuy nhiên, ta có thể mang ảnh vào trong không gian làm việc bằng
cách sử dụng hàm getimage. Hàm này sẽ nhận dữ liệu ảnh từ handle của một đối
tượng ảnh hiện tại. Chẳng hạn: moon = getimage; Sẽ gán dữ liệu ảnh từ moon.tif
vào biến moon.
c) 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 màu ảnh được lưu trữ
dưới dạng ảnh chỉ 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 độ trong
ảnh tương ứng. Nếu ta cố gắng lọc ảnh chỉ số, Matlab đơn giản chỉ áp đặt
phép lọc tới ma trận ảnh chỉ 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
kiểu ảnh:
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
18
+ 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.
+ 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ể chuyển đổi 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.
- Thêm vào những công cụ chuyển đổi chuẩn đã nói ở trên, cũng có một số
hàm mà trả lại kiểu ảnh khác như một phần trong thao tác mà chúng thực
hiện.
Chuyển đổi không gian màu
- Toolbox xử lý ảnh biểu diễn màu sắc như các giá trị RGB ( trực tiếp trong
ảnh RGB hoặc gián tiếp trong ảnh chỉ số ). Tuy nhiên, có các phương pháp
khác cho việc biểu diễn màu sắc. Chẳng hạn, một màu có thể được đại diện
bởi các giá trị hue, saturation và các giá trị thành phần (HSV). Các phương
pháp khác cho việc biểu diễn màu được gọi là không gian màu.
- Toolbox cung cấp một tập các thủ tục để chuyển đổi giữa các không gian
màu. Các hàm xử lý ảnh tự chúng coi dữ liệu màu sắc dưới dạng RGB tuy
nhiên, ta có thể xử lý một ảnh mà sử dụng các không gian màu khác nhau
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
19
bằng cách chuyển đổi nó sang RGB sau đó chuyển đổi ảnh đã được xử lý trở
lại không gian màu ban đầu.
d) Chuyển đổi định dạng các file ảnh
- Để thay đổi định dạng đồ hoạ của một ảnh, sử dụng hàm imread để đọc một
ảnh và sau đó lưu nó với hàm imwrite đồng thời chỉ ra định dạng tương ứng.
- Để minh hoạ, ví dụ sau đây sử dụng hàm imread để đọc một file BMP vào
không gian làm việc.Sau đó, hàm imwrite lưu ảnh này dưới định dạng PNG
bitmap = imread('mybitmap.bmp','bmp');
imwrite(bitmap,'mybitmap.png','png');
e) Số học ảnh
- Số học ảnh sự ứng dụng của các phép toán số học chuẩn như: cộng, trừ,
nhân, chia lên ảnh. Số học ảnh được sử dụng nhiều trong xử lý ảnh trong cả
các bước ban đầu lẫn các thao tác phức tạp hơn. Chẳng hạn, trừ ảnh có thể
được sử dụng để phát hiện sự khác nhau giữa hai hoặc nhiều ảnh của cùng
một cảnh hoặc một vật.
- Ta có thể thực hiện số học ảnh sử dụng các toán tử số học của Matlab.
Toolbox xử lý ảnh bao gồm một tập hợp các hàm ứng dụng các phép toán số
học trên tất cả các con số không lấp đầy. Hàm số học của toolbox chấp nhận
bất kì kiểu dữ liệu số nào bao gồm uint8, uint16 hay double và trả lại ảnh kết
quả trong cùng định dạng. Các hàm thực hiện các phép toán với độ chính xác
kép trên từng phần tử nhưng không chuyển đổi ảnh tới giá trị chính xác kép
trong không gian làm việc của Matlab. Sự tràn số được điều khiển tự động.
Hàm sẽ cắt bỏ giá trị trả về để vừa với kiểu dữ liệu.
Luật cắt bỏ trong số học ảnh
- Kết quả của số học nguyên có thể dễ dàng tràn số dùng cho lưu trữ. Chẳng
hạn, giá trị cực đại ta có thể lưu trữ trong uint8 là 255. Các phép toán số học
có thể trả về giá trị phân số - không được biểu diễn bởi một chuỗi số nguyên.
- Các hàm số học ảnh sử dụng những luật này cho số học nguyên:
+ Giá trị vượt quá khoảng của kiểu số nguyên bị cắt bỏ tới khoảng đó
+ Giá trị phân số được làm tròn
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
20
Chẳng hạn, nếu dữ liệu có kiểu uint8, kết quả trả về nếu lớn hơn 255 ( bao
gồm Inf ) thì được gán là 255.
Lời gọi lồng nhau tới hàm số học ảnh
- Ta có thể sử dụng các hàm số học ảnh kết hợp để thực hiện một chuỗi các
phép toán. Chẳng hạn để tính giá trị trung bình của hai ảnh:
C=(A+B) /2
Ta có thể nhập vào như sau:
I = imread('rice.png');
I2 = imread('cameraman.tif');
K = imdivide(imadd(I,I2), 2); % not recommended
- Khi được sử dụng với kiểu uint8 hay uint16, mỗi hàm số học cắt kết quả của
nó trước khi truyền nó cho hàm thiếp theo. Sự cắt bỏ này có thể giảm đáng
kể lượng thông tin trong ảnh cuối cùng. Một cách làm tốt hơn để thực hiện
một chuỗi các tính toán là sử dụng hàm imlincomb. Hàm này thi hành tất cả
các phép toán số học trong sự kết hợp tuyến tính của độ chính xác kép và chỉ
cắt bỏ kết quả cuối cùng:
K = imlincomb(.5,I,.5,I2); % recommended
1.3.3.3 Biến đổi không gian ảnh
Biến đổi không gian ảnh là thực hiện ánh xạ giữa vị trí các pixel trong ảnh
vào với các pixel trong ảnh ra.
a) Bảng thuật ngữ
Tên thuật ngữ Diễn giải
Aliasing
Răng cưa - xuất hiện khi giảm kích thước
ảnh. Khi kích thước của một ảnh bị giảm,
các pixel gốc bị lấy mẫu giảm để tạo ra ít
pixel hơn. Aliasing xảy ra như kết quả của
việc giảm kích thước ảnh thường xuất hiện
dưới dạng bậc thang ( đặc biệt trong các
ảnh có độ tương phản cao )
Antialiasing Các biện pháp chống răng cưa cho ảnh
Bicubic interpolation Giá trị của các pixel ra được tính toán từ
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
21
giá trị trung bình của 4x4 pixel lân cận
Bilinear interpolation Gía trị của pixel ra được tính toán từ giá
trị trung bình của 2x2 pixel lân cận
Geometric operation
Một thao tác sửa đổi quan hệ hình học gữa
các pixel trong một ảnh. Chẳng hạn thay
đổi kích thước ảnh, quay ảnh và xén ảnh
Interpolation Quá trình được sử dụng để ước lượng giá
trị ảnh ở một vị trí giữa các pixel
Nearest-neighbor
interpolation
Các giá trị pixel ra được gán giá trị của
pixel nằm trong một vùng gần pixel đó.
b) Nội suy
Nội suy là quá trình sử dụng để ước lượng một giá trị ảnh ở một vị trí giữa
các pixel. Chẳng hạn, nếu ta thay đổi kích thước một ảnh, nó sẽ chứa nhiều pixel
hơn ảnh gốc, toolbox sử dụng sự nội suy để tính giá trị cho các pixel thêm vào. Hàm
imresize và imrotate sử dụng nội suy hai chiều để thực hiện thao tác của mình.
Hàm improfile cũng sử dụng sự nội suy hoá.
Các phương pháp nội suy
- Toolbox sử lý ảnh cung cấp 3 cách nội suy hoá
+ Nội suy các pixel gần nhất ( nearest –neighbor interpolation )
+ Nội suy song tuyến tính ( Bilinear interpolation )
+ Nội suy song khối ( Bicubic interpolation )
Các phương pháp nội suy làm việc theo một cách giống nhau. Trong mỗi
trường hợp, để tính giá trị của một pixel đã được nội suy, chúng tìm điểm trong ảnh
ra mà pixel nằm tại đó. Sau đó, chúng gán một giá trị tới các pixel ra bằng cách tính
toán giá trị trung bình có trọng số của một số pixel lân cận. Trọng số dựa trên cơ sở
khoảng cách tới điểm đang xét.
- Các phương pháp này khác nhau ở tập các pixel mà chúng xem xét:
+ Với nội suy các pixel gần nhất: pixel ra được gán giá trị của các pixel ở
gần nó nhất. Các pixel khác không được xem xét.
+ Nội suy song tuyến tính, giá trị của pixel ra là giá trị trung bình theo trọng
số của 2x2 pixel lân cận.
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
22
+ Nội suy song khối: giá trị của pixel ra là trung bình có trọng số của 4x4
pixel lân cận.
Số lượng các pixel được xem xét ảnh hưởng đến độ phức tạp tính toán. Vì
vậy, phương pháp song tuyến tính mất nhiều thời gian hơn phương pháp thứ nhất và
phương pháp song khối mất nhiều thời gian hơn song tuyến tính. Tuy nhiên, số
lượng pixel lớn hơn, độ chính xác sẽ tốt hơn.
Kiểu ảnh
- Các hàm sử dụng tuyến tính yêu cầu một tham số chỉ ra phương pháp nội
suy. Với hầu hết các hàm, phương pháp mặc định được sử dụng là nearest-neighbor
interpolation. Phương pháp này tạo ra một kết quả có thể chấp nhận được cho hầu
hết các ảnh và là phương pháp duy nhất thích hợp với ảnh chỉ số. Với ảnh cường độ
hay RGB, tuy nhiên ta thường chỉ ra kiểu song tuyến tính hoặc song khối bởi vì
những phương pháp này cho kết quả tốt hơn
Với ảnh RGB, nội suy thường được thực hiện trên mặt phẳng R,B,G một
cách riêng biệt
Với ảnh nhị phân, nội suy gây ra những ảnh hưởng mà ta có thể nhận thấy
được. Nếu sử dụng nội suy song tuyến tính hoặc song khối, giá trị tính toán được
cho pixel trong ảnh ra sẽ không hoàn toàn là 0 hoặc 1. Ảnh hưởng trên ảnh kết quả
phụ thuộc vào lớp của ảnh vào:
+ Nếu lớp ảnh vào là double, ảnh ra là một ảnh đen trắng thuộc lớp double.
Ảnh ra không là ảnh nhị phân bởi vì nó bao gồm các giá trị khác 0 và 1.
+ Nếu ảnh vào là uint8, ảnh ra là một ảnh nhị phân thuộc lớp uint8. Giá trị
của các pixel được nội suy được làm tròn thành 0 hoặc 1. Vì vậy , ảnh ra thuộc lớp
uint8.
Nếu sử dụng phương pháp nearest-neighbor interpolation, ảnh ra luôn là ảnh
nhị phân bởi vì những giá trị của pixel được nội suy được lấy trực tiếp từ ảnh vào.
c) Thay đổi kích thước ảnh
- Để thay đổi kích thước của một ảnh, sử dụng hàm imresize. Sử dụng hàm
này ta có thể:
+ Chỉ ra kích thước của ảnh kết quả.
+ Chỉ ra phương pháp nội suy được sử dụng.
+ Chỉ ra bộ lọc được sử dụng để ngăn ngừa hiện tượng răng cưa.
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
23
Chỉ ra kích thước cho ảnh kết quả
- Sử dụng hàm imresize, ta chó thể chỉ ra kích thước của ảnh kết quả theo
hai cách:
+ Bằng cách chỉ ra hệ số phóng đại được sử dụng trên ảnh.
+ Bằng cách chỉ ra chiều của ảnh kết quả.
Sử dụng hệ số phóng đại ảnh
- Để mở rộng một ảnh, chỉ ra hệ số phóng đại lớn hơn 1. Để thu nhỏ một ảnh,
chỉ ra hệ số phóng đại nằm giữa 0 và 1. Chẳng hạn, lệnh sau tăng kích thước của
ảnh I lên 1.25 lần:
Hình 1.5 Ảnh trước và sau khi imresize
I = imread('circuit.tif');
J = imresize(I,1.25);
imshow(I)
figure, imshow(J)
Chỉ định kích thước của ảnh ra
- Ta có thể chỉ ra kích thước của ảnh ra bằng cách truyền một véc tơ chứa số
lượng hàng và cột của ảnh sau cùng. Những lệnh sau đây tạo một ảnh ra Y với 100
hàng và 150 cột.
Y = imresize(X,[100 150])
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
24
Chú ý: Nếu kích thước được chỉ ra không có cùng tỉ lệ với ảnh vào, ảnh ra
sẽ bị biến dạng
Chỉ định phương pháp nội suy được sử dụng.
- Theo mặc định, hàm imresize sử dụng phương pháp nội suy các pixel gần
nhất (nearest – neighbor interpolation) để tính giá trị các pixel của ảnh ra. Tuy
nhiên, ta có thể chỉ định các phương pháp nội suy khác. Bảng sau đây liệt kê các
phương pháp nội suy được trợ giúp theo thứ tự của độ phức tạp.
Giá trị tham số Phương pháp nội suy
‘nearest’ Nội suy các phixel gần nhất ( mặc định )
‘bilinear’ Nội suy song tuyến tính
‘biculic’ Nội suy song khối
Trong ví dụ sau, hàm imresize sử dụng phương pháp nội suy song tuyến tính:
Y=imresize(X, [100 150],’bilinear’);
Sử dụng bộ lọc để ngăn chặn hiện tượng răng cưa
- Việc giảm kích thước (hình học) của một ảnh có thể gây ra những ảnh
hưởng nhất định lên ảnh chẳng hạn như hiện tượng xuất hiện răng cưa tại biên của
ảnh . Điều này là do thông tin luôn bị mất khi ta giảm kích thước một ảnh. Răng cưa
xuất hiện như những gợn sóng trong ảnh sau cùng.
- Khi giảm kích thước của ảnh sử dụng nội suy song tuyến tính hoặc song
khối, hàm imresize tự động áp đặt một bộ lọc thông thấp lên ảnh trước khi nội suy.
Điều này để giảm ảnh hưởng của răng cưa trong ảnh ra. Ta có thể chỉ ra kích thước
của bộ lọc này hoặc chỉ ra một bộ lọc khác thay thế.
Chú ý: Thậm chí đã sử dụng một bộ lọc thông thấp, chất lượng của ảnh vẫn
bị ảnh hưởng do thông tin luôn bị mất trong quá trình nội suy
- Hàm imresize không áp đặt một bộ lọc thông thấp lên ảnh nếu phương pháp
nội suy các pixel gần nhất được sử dụng. Phương pháp nội suy này ban đầu được sử
dụng với các ảnh chỉ số và bộ lọc thông thấp không thích hợp cho kiểu ảnh này.
- Ta cũng có thể chỉ ra một bộ lọc tự tạo thay cho các bộ lọc có sẵn.
Hàm imresize
Cú pháp của hàm này như sau:
B = imresize(A,m)
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
25
B = imresize(A,m,method)
B = imresize(A,[mrows ncols],method)
B = imresize(...,method,n)
B = imresize(...,method,h)
Diễn giải
+ B=imresize(A,m): Trả lại một ảnh B lớn gấp m lần ảnh A (kích thước hình
học) sử dụng phương pháp nội suy mặc định (nearest - neighbor interpolcation). A
có thể là một ảnh chỉ số, ảnh đen trắng, RGB hoặc ảnh nhị phân. Nếu m nằm giữa 0
và 1, B sẽ nhỏ hơn A. Nếu m lớn hơn 1, B sẽ lớn hơn A.
+ B=imresize(A,m,method): Trả lại một ảnh lớn gấp m lần ảnh A sử dụng
phương pháp nội suy method. method là một chuỗi chỉ ra phương pháp nội suy nào
được sử dụng chẳng hạn: ‘nearest’,’bilinear’,’bicubic’.
+ B=imresize(A, [mrows ncols],method): Trả lại một ảnh với kích thước
được chỉ ra bởi vector [mrows ncols]. Nếu kích thước được chỉ ra không cùng tỉ lệ
với ảnh vào, ảnh sẽ bị biến dạng
Khi kích thước của ảnh ra nhỏ hơn kích thước của ảnh vào và phương pháp
nội suy được sử dụng là ‘bilinear’ hoặc ‘bicubic’, hàm imresize áp đặt một bộ lọc
thông thấp trước khi tuyến tính hoá để giảm hiện tượng răng cưa. Kích thước mặc
định là 11x11.
Ta có thể chỉ ra một thứ tự khác cho bộ lọc mặc định sử dụng cấu trúc:
B=imresize(…,method,n): n là một số nguyên chỉ ra kích thước của bộ lọc –
nxn. Nếu n=0, hàm imresize bỏ qua bước lọc. Ta cũng có thể chỉ ra bộ lọc riêng sử
dụng cú pháp:
B=imresize(…,method,h): Trong đó h là một bộ lọc FIR hai chiều ( có thể
được trả về bởi các hàm ftrans2, fwind1, fwind2 hoặc fsamp2 ).
d) Quay ảnh
- Để quay một ảnh, sử dụng hàm imrotate. Hàm này chấp nhận hai tham số
chính:
+ Ảnh cần quay
+ Góc quay
- Góc quay tính theo độ. Nếu ta chỉ ra một giá trị dương, hàm imrotate quay
ảnh theo chiều ngược chiều kim đồng hồ. Nếu chỉ ra giá trị âm, hàm quay ảnh theo
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
26
chiều kim đồng hồ. Ví dụ sau quay một ảnh 35 độ theo chiều ngược chiều kim đồng
hồ:
J=imrotate(I,35 ) ;
- Một số tham số tuỳ chọn ta có thể truyền vào cho hàm bao gồm:
+ Phương pháp nội suy được sử dụng
+ Kích thước của ảnh ra
Chỉ định phương pháp nội suy được sử dụng
- Theo mặc định, hàm imrotate sử dụng phương pháp nội suy thứ nhất
(nearest-neighbor interpolation) để tính giá trị các pixel trong ảnh ra. Tuy nhiên, ta
có thể chỉ ra các phương pháp nội suy khác như: ‘bilinear ‘,’bicubic’
Ví dụ sau quay một ảnh 35 độ ngược chiều kim đồng hồ sử dụng nội suy song tuyến
tính:
I = imread('circuit.tif');
J = imrotate(I,35,'bilinear');
imshow(I)
figure, imshow(J)
Hình 1.7 Ảnh trước và sau khi imrotate
Chỉ định kích thước của ảnh ra
Theo mặc định, hàm imrotate tạo một ảnh ra đủ lớn để có thể bao gồm toàn
bộ các pixel của ảnh gốc. Các pixel nằm ngoài biên của ảnh gốc được gán giá trị 0
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
27
như thể nền màu đen trong ảnh ra. Nếu ta chỉ ra chuỗi ‘crop’ như một tham số, hàm
imrotate sẽ xén ảnh ra tới kích thước như ảnh vào.
Hàm imrotate
Cú pháp của nó như sau:
B = imrotate(A,angle)
B = imrotate(A,angle,method)
B = imrotate(A,angle,method,bbox)
Diễn giải
+ B=imrotate(A,angle): Quay ảnh A một góc angle độ theo chiều ngược
chiều kim đồng hồ, sử dụng phương pháp nội suy các pixel gần nhất. Để quay theo
chiều kim đồng hồ hãy truyền giá trị âm cho tham số angle
+ B=imrotate(A,angle,method): Quay ảnh A một góc angle độ theo chiều
kim đồng hồ sử dụng phương pháp nội suy được chỉ ra trong method.
+ B=imrotate(A,angle,method,bbox): Quay ảnh A một góc angle độ. Tham
số bbox chỉ ra hộp biên của ảnh trả về. bbox là một chuỗi có thể nhận các giá trị
sau:
‘crop’: Ảnh ra B chỉ bao gồm phần trung tâm của ảnh được quay và có cùng
kích thước với ảnh A
‘loose’: ( Mặc định ): Ảnh ra B bao gồm toàn bộ ảnh được quay và lớn hơn
ảnh A. Hàm imrotate thiết lập giá trị 0 cho các pixel ngoài biên của ảnh gốc.
Ví dụ
- Ví dụ này đọc một ảnh quang phổ ánh sáng mặt trời được lưu trong định
dạng FITS và quay nó và căn nó theo chiều ngang.
I = fitsread('solarspectra.fts');
I = mat2gray(I);
J = imrotate(I,-1,'bilinear','crop');
imshow(I)
figure, imshow(J)
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
28
Hình 1.8 Ảnh được quay theo chiều ngang
e) Xén ảnh (image cropping)
- Để trích một vùng chữ nhật của một ảnh, sử dụng hàm imcrop. Hàm
imcrop chấp nhận hai tham số chính:
+ Ảnh cần xén
+ Các góc của hình chữ nhật xác định vùng xén
- Nếu ta gọi hàm imcrop mà không chỉ ra hình chữ nhật, ta có thể xén ảnh
theo các tương tác. Trong trường hợp này, ta sử dụng trỏ chuột để chọn vùng chữ
nhật cần xén bằng cách nhấn và giữ phím chuột trái và di chuyển để chọn vùng xén.
Khi chọn xong thì nhả chuột. Trong ví dụ sau, ta hiển thị một ảnh và gọi hàm
imcrop. Hàm imcrop hiển thị ảnh trong một hình và đợi ta vẽ vùng chữ nhật cần
xén trên ảnh.
imshow circuit.tif
I=imcrop;
Imshow(I);
Hình 1.9 Ảnh trước và sau khi imcrop
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
29
Hàm imcrop
- Cú pháp của nó như sau:
I2 = imcrop(I)
X2 = imcrop(X,map)
RGB2 = imcrop(RGB)
I2 = imcrop(I,rect)
X2 = imcrop(X,map,rect)
RGB2 = imcrop(RGB,rect)
[...] = imcrop(x,y,...)
[A,rect] = imcrop(...)
[x,y,A,rect] = imcrop(...)
Diễn giải
- Hàm imcrop xén một ảnh theo một hình chữ nhật được chỉ định.
I2=imcrop(I) ;
X2=imcrop(X,map);
RGB2=imcrop(RGB);
Hàm imcrop sẽ hiển thị ảnh I và đợi ta chỉ ra hình chữ nhật cần xén bằng
chuột
- Nếu ta bỏ qua các tham số, hàm imcrop thao tác trên ảnh của trục hiện tại.
- Để chỉ định một hình chữ nhật ta dùng trỏ chuột như đã nói ở trên
- Ta cũng có thể chỉ ra kích thước của hình chữ nhật mà không thao tác trực
tiếp như các cú pháp sau:
I2 = imcrop(I,rect)
X2 = imcrop(X,map,rect)
RGB2 = imcrop(RGB,rect)
Trong đó: rect là một vector bốn phần tử dạng [xmin ymin width height],
những giá trị này được chỉ ra trong toạ độ không gian. Để chỉ định các toạ độ không
theo toạ độ không gian cho ảnh vào, đặt trước các tham số khác với 2 vector hai
phần tử chỉ ra Xdata và Ydata. Chẳng hạn:
[…]=imcrop(x,y,…)
- Nếu ta cung cấp các tham số ra phụ, hàm imcrop sẽ trả lại thông tin về
vùng chữ nhật được chọn và hệ toạ độ của ảnh vào. Chẳng hạn:
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
30
[A,rect] = imcrop(...)
[x,y,A,rect] = imcrop(...)
A là ảnh ra, x và y là Xdata và Ydata của ảnh vào
Chú ý:
- Do rect là một tập hợp các toạ độ không gian, các phần tử width và height
trong rect không luôn luôn tương ứng chính xác với kích thước của ảnh ra. Chẳng
hạn, giả sử rect là [20 20 40 30], sử dụng hệ toạ độ không gian theo mặc định. Góc
trên trái của vùng chữ nhật được chọn là tâm của pixel (20,20) và góc dưới phải của
vùng chữ nhật là tâm của pixel (50,60). Ảnh ra là một ảnh có kích thước 31x41 chứ
không phải 30x40. Điều này là do ảnh ra bao gồm tất cả các pixel trong ảnh vào
hoàn toàn hoặc một phần được bao bọc bởi vùng chữ nhật trên.
Ví dụ
I = imread('circuit.tif');
I2 = imcrop(I,[75 68 130 112]);
imview(I), imview(I2)
Hình 1.10 Ảnh trước và sau khi imcrop theo 1 tọa độ cho trước
f) Các biến đổi ảnh thông dụng
- Để thực hiện các biến đổi không gian ảnh 2 chiều, sử dụng hàm
imtransform. Hàm này chấp nhận hai tham số chính:
+ Ảnh cần biến đổi
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
31
+ Một cấu trúc biến đổi được gọi là TFORM chỉ ra kiểu biến đổi ta muốn
thực hiện
Chỉ ra kiểu biến đổi
- Ta chỉ ra kiểu biến đổi trong cấu trúc TFORM. Có hai cách để tạo một cấu
trúc TFORM:
+ Sử dụng hàm maketform
+ Sử dụng hàm cp2tform
Sử dụng hàm maketform
- Khi sử dụng hàm này, ta chỉ ra kiểu biến đổi ta muốn thực hiện. Các kiểu
biến đổi mà maketform trợ giúp bao gồm:
+’ affine’: Biến đổi có thể bao gồm: translation ( dịch ), rotation ( quay ),
scaling, stretching và shearing. Các đường thẳng vẫn là đường thẳng, đường song
song vẫn song song nhưng hình chữ nhật có thể bị biến đổi
+’box’: Một trường hợp đặc biệt của affine khi mỗi chiều được dời và định tỉ
lệ độc lập
+ ‘composite ‘: Bao gồm tổ hợp của hai hay nhiều phép biến đổi
+ ‘custom ‘: Biến đổi do người dùng tự định nghĩa, nó cung cấp các hàm
thuận hoặc nghịch được gọi bởi hàm imtransform
+ ‘projective ‘: Biến đổi trong đó các đường thẳng vẫn giữ nguyên nhưng các
đường song song đồng quy lại thành một điểm.
Sử dụng cp2tform
- Ta sử dụng hàm này để tạo ra cấu trúc TFORM khi ta muốn thi hành một
biến đổi cần khít với các điểm dữ liệu như một biến đổi đa thức.
Chú ý: Khi sử dụng với hàm imtransform, cấu trúc TFORM phải định nghĩa một
biến đổi 2 chiều. Nếu một ảnh chứa nhiều hơn một chiều chẳng hạn như ảnh RGB,
cùng một biến đổi 2 chiều sẽ được áp đặt tới tất cả các mặt phẳng 2 chiều theo chiều
cao hơn. Để định nghĩa một biến đổi n chiều sử dụng hàm imformarrray
Thực hiện biến đổi
- Khi ta đã định nghĩa một cấu trúc TFORM, ta có thể thi hành một sự biến
đổi bằng cách gọi hàm imtransform. Chẳng hạn, đoạn mã sau sử dụng hàm này để
thi hành một biến đổi projective cho một ảnh bàn cờ:
I = checkerboard(20,1,1);
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
32
figure; imshow(I)
T = maketform('projective',[1 1; 41 1; 41 41; 1 41],...
[5 5; 40 5; 35 30; -10 30]);
R = makeresampler('cubic','circular');
K = imtransform(I,T,R,'Size',[100 100],'XYScale',1);
figure, imshow(K)
Hình 1.11 Ảnh trước và sau khi imtransforms
- Các tuỳ chọn của hàm imtransform cho phép ta điều khiển nhiều khía
cạnh của việc biến đổi. Chẳng hạn, chú ý rằng ảnh bị biến đổi xuất hiện nhiều bản
copy của ảnh gốc. Điều này nhận được bởi tuỳ chon ‘size’.Xem thêm Help Online
Hàm imtransform
- Áp đặt một biến đổi không gian 2 chiều lên một ảnh
Cú pháp
B = imtransform(A,TFORM)
B = imtransform(A,TFORM,INTERP)
[B,XDATA,YDATA] = imtransform(...)
[B,XDATA,YDATA] = imtransform(...,param1,val1,param2,val2,...)
Diễn giải
+ B=imtransform(A,TFORM ): biến đổi ảnh A theo cấu trúc được định nghĩa
trong TFORM. Cấu trúc này được trả về từ hàm maketform hoặc cp2tform. Nếu
ndims(A)>2 như các ảnh RGB thì cùng một biến đổi không gian 2 chiều được áp
đặt tới tất cả các mặt phẳng theo chiều cao hơn.
Khi sử dụng cú pháp này, hàm imtransform tự động dịch gốc của ảnh ra để ảnh ra
có thể được hiển thị nhiều nhất có thể.
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
33
+ B=imtransform(A,TFORM, INTERP): chỉ ra dạng của phép nội suy được
sử dụng. INTERP có thể là một trong các giá trị ‘nearest’, ‘bicubic’ hoặc ‘bilinear’.
Tương tự, INTERP có thể là một cấu trúc được trả về từ hàm
makeresampler. Tuỳ chọn này cho phép điều khiển nhiều hơn lên việc lấy mẫu lại
(resampling).
+ [B,XDATA,YDATA]= imtransform(…): trả về vị trí của ảnh ra B trong
không gian X-Y. XDATA và YDATA các vector hai thành phần. Những thành
phần của XDATA chỉ ra toạ độ x của cột đầu và cuối của B. Những thành phần của
YDATA chỉ ra toạ độ y của cột đầu và cuối của B. Bình thường, hàm imtransform
tính toán XDATA và YDATA tự động vì vậy B chứa toàn bộ ảnh đã biến đổi A.
Tuy nhiên, ta có thể đè chồng tính toán tự động này xem dưới đây:
+ [B,XDATA,YDATA] = imtransform(...,param1,val1,param2,val2,...): Chỉ
ra các tham số điều khiển nhiều khía cạnh khác nhau của biến đổi không gian. Bảng
sau liệt kê các tham số mà ta có thể chỉ ra.
Tham số Diễn giải
‘UData’
‘VData’
Cả hai tham số này là các vector hai phần tử thực. ‘Udata’ và
‘Vdata’ chỉ ra vị trí không gian của ảnh A trong không gian
vào 2 chiều U-V. Hai phần tử của ‘Udata’ cho toạ độ u (hoành
độ ) của cột đầu tiên và cuối cùng của A. Hai phần tử của
‘Vdata’ cho toạ độ v ( tung độ ) của hàng đầu tiên và cuối cùng
của A.
Giá trị mặc định cho ‘Udata’ và ‘Vdata’ tương ứng là [1
size(A,2) ] và [1 size(A,1) ]
‘Xdata’
‘Ydata’
Cả hai tham số này là các vector hai phần tử thực chỉ ra vị trí
không gian của ảnh ra B trong không gian ra 2 chiều X-Y. Hai
phần tử của ‘Xdata’ chỉ ra hoành độ x của cột đầu tiên và cuối
cùng của B. Hai phần tử của ‘Ydata’ chỉ ra tung độ của hàng
đầu tiên và cuối cùng của B.
Nếu ‘Xdata’ và ‘Ydata’ không được chỉ ra, hàm imtransform
ước lượng giá trị cho chúng để có thể chứa toàn bộ ảnh ra đã bị
biến đổi
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
34
‘XYScale’
Là vector với một hoặc hai phần tử thực. Phần tử đầu tiên của
‘XYScale’ chỉ ra chiều rộng của mỗi pixel vào trong không
gian X-Y. Phần tử thứ hai (nếu tồn tại) chỉ ra chiều cao của
mỗi pixel ra. Nếu ‘XYScale’ chỉ có một phần tử, giá trị này sẽ
được dùng cho cả chiều rộng và chiều cao.
Nếu ‘XYScale’ không được chỉ định nhưng Size được chỉ ra
thì ‘XYScale’ được tính toán từ ‘Size’,’Xdata’ và ‘Ydata’.
‘Size’
Một vector hai phần tử nguyên không âm. ‘Size’ chỉ ra số hàng
và cột trong ảnh ra B. Với chiều cao hơn, kích cỡ của B được
lấy trực tiếp từ A. Nói cách khác, size(B,k) tương đương với
size(A,k) với k>2. Nếu ‘Size’ không được chỉ định, nó sẽ được
tính từ ‘Xdata’,’Ydata’ và ‘XYScale’
‘FillValues’
Một mảng chứa một hoặc nhiều giá trị tô (fill values). Fill
values được sử dụng cho các pixel trên ảnh ra khi vị trí được
biến đổi tương ứng trên ảnh vào hoàn toàn là viền ngoài của
ảnh ra. nếu A là 2 chiều, ‘Fillvalues’ phải vô hướng. Tuy
nhiên, nếu chiều của A lớn hơn 2, ‘FillValues’ có thể là một
mảng mà kích thước của nó thoả mãn ràng buộc sau:
size(fill_values,k) phải bằng size(A,k+2) hoặc 1.
Chẳng hạn, nếu A là một ảnh RGB unit8 có kích thước
200x200x3 thì các khả năng của ‘FillValues’ bao gồm:
+ 0: Tô với màu đen
+ [0;0;0]: Tô với màu đen
+ 255: Tô với màu trắng
+ [255;255;255]: Tô với màu trắng
+ [0;0;255]: Tô với màu xanh
+ [255;255;0]: Tô với màu vàng
Nếu A là 4 chiều 200x200x3x10 thì ‘FillValues’ có thể là 1 vô
hướng 1x10,3x1,3x10
Ví dụ
Áp một phép dịch chuyển ngang tới một ảnh cường độ ;
I = imread('cameraman.tif');
Chương 1: Giới thiệu Matlab và khái quát về ảnh
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
35
tform = maketform('affine',[1 0 0;.5 1 0; 0 0 1]);
J = imtransform(I,tform);
imshow(I), figure, imshow(J)
Hình 1.12 Ảnh trước và sau khi imtransformsvới 1 cường độ ảnh
Chương 2: Các phương pháp xác định khuôn mặt
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
36
Chương 2
CÁC PHƯƠNG PHÁP
XÁC ĐỊNH KHUÔN MẶT
2.1 Định nghĩa bài toán xác định khuôn mặt người
2.2 Ứng dụng của phương pháp xác định khuôn mặt
2.3 Phương pháp xác định khuôn mặt
2.4 Khó khăn và thử thách trong bài toán xác định khuôn mặt người
Chương 2: Các phương pháp xác định khuôn mặt
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
37
Chương 2
CÁC PHƯƠNG PHÁP XÁC ĐỊNH
KHUÔN MẶT
Hơn một thập kỷ qua có rất nhiều công trình nghiên cứu về bài toán xác định
khuôn mặt người từ ảnh đen trắng, xám đến ảnh màu như ngày hôm nay. Các
nghiên cứu đi từ bài toán đơn giản, mỗi ảnh chỉ có một khuôn mặt người nhìn thẳng
vào thiết bị thu hình và đầu ở tư thế thẳng đứng trong ảnh đen trắng. Cho đến ngày
hôm nay bài toán mở rộng cho ảnh màu, có nhiều khuôn mặt trong cùng một ảnh,
có nhiều tư thế thay đổi trong ảnh. Không những vậy mà còn mở rộng cả phạm vi từ
môi trường xung quanh khá đơn giản (trong phòng thí nghiệm) cho đến môi trường
xung quanh rất phức tạp (như trong tự nhiên) nhằm đáp ứng nhu cầu thật sự và rất
nhiều của con người.
2.1 Định nghĩa bài toán xác định khuôn mặt người
Xác định khuôn mặt người (Face Detection) là một kỹ thuật máy tính để xác
định các vị trí và các kích thước của các khuôn mặt người trong các ảnh bất kỳ (ảnh
kỹ thuật số). Kỹ thuật này nhận biết các đặc trưng của khuôn mặt và bỏ qua những
thứ khác như: tòa nhà, cây cối, cơ thể, …
2.2 Ứng dụng của phương pháp xác định khuôn mặt
Có rất nhiều ứng dụng đã và đang được nghiên cứu, sau đây chúng em xin
đưa ra 1 vài ứng dụng trong thực tế:
• Hệ thống tương tác giữa người và máy: giúp những người bị tật hoặc khiếm
khuyết có thể trao đổi. Những người dùng ngôn ngữ tay có thể giao tiếp với
những người bình thường. Những người bị bại liệt thông qua một số ký hiệu
nháy mắt có thể biểu lộ những gì họ muốn, …. Đó là các bài toán điệu bộ của
bàn tay (hand gesture), điệu bộ khuôn mặt, …
Chương 2: Các phương pháp xác định khuôn mặt
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
38
• Nhận dạng người A có phải là tội phạm truy nã hay không? Giúp cơ quan an
ninh quản lý tốt con người. Công việc nhận dạng có thể ở trong môi trường bình
thường cũng như trong bóng tối (sử dụng camera hồng ngoại).
• Hệ thống quan sát, theo dõi và bảo vệ. Các hệ thống camera sẽ xác định đâu
là con người và theo dõi con người đó xem họ có vi phạm gì không, ví dụ xâm
phạm khu vực không được vào, ….
• Lưu trữ (rút tiền ATM, để biết ai rút tiền vào thời điểm đó), hiện nay có tình
trạng những người bị người khác lấy mất thẻ ATM hay mất mã số PIN và những
người ăn cắp này đi rút tiền, hoặc những người chủ thẻ đi rút tiền nhưng lại báo
cho ngân hàng là mất thẻ và mất tiền. Các ngân hàng có nhu cầu khi có giao dịch
tiền sẽ kiểm tra hay lưu trữ khuôn mặt người rút tiền để sau đó đối chứng và xử
lý.
• Thẻ căn cước, chứng minh nhân dân (Face Identification).
• Điều khiển vào ra: văn phòng, công ty, trụ sở, máy tính, Palm,…. Kết hợp
thêm vân tay và mống mắt. Cho phép nhân viên được ra vào nơi cần thiết, hay
mỗi người sẽ đăng nhập máy tính cá nhân của mình mà không cần nhớ tên đăng
nhập cũng như mật khẩu mà chỉ cần xác định thông qua khuôn mặt.
• An ninh sân bay, xuất nhập cảnh (hiện nay cơ quan xuất nhập cảnh Mỹ đã
áp dụng). Dùng để xác thực người xuất nhập cảnh và kiểm tra có phải là nhân
vật khủng bố hay không.
• Trong tương lai sẽ phát triển các loại thẻ thông minh có tích hợp sẵn đặc
trưng của người dùng trên đó, khi bất cứ người dùng khác dùng để truy cập hay
xử lý tại các hệ thống sẽ được yêu cầu kiểm tra các đặc trưng khuôn mặt so với
thẻ để biết nay có phải là chủ thẻ hay không.
• Tìm kiếm và tổ chức dữ liệu liên quan đến con người thông qua khuôn mặt
người trên nhiều hệ cơ sở dữ liệu lưu trữ thật lớn, như internet, các hãng truyền
hình,… Ví dụ: tìm các đoạn video có tổng thống Bush phát biểu, tìm các phim
có diễn viên Lý Liên Kiệt đóng, tìm các trận đá banh có Ronaldo đá, …
Chương 2: Các phương pháp xác định khuôn mặt
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
39
• Hiện nay có nhiều hướng tiếp cận để xác định một ảnh có phải là ảnh khỏa
thân hay không? Khuôn mặt người được xem như một yếu tố để xác định cho
một hướng tiếp cận mà được dùng gần đây.
• Ứng dụng trong video phone.
• Phân loại trong lưu trữ hình ảnh trong điện thoại di động. Thông qua bài toán
xác định khuôn mặt người và trích đặc trưng, rồi dựa vào đặc trưng này để sắp
xếp lưu trữ, giúp người sử dụng dễ dàng truy tìm khi cần thiết.
• Kiểm tra trạng thái người lái xe có ngủ gật, mất tập trung hay không, và hỗ
trợ thông báo khi cần thiết.
• Phân tích cảm xúc trên khuôn mặt.
• Trong lãnh vực thiết kế điều khiển robot.
• Hãng máy chụp hình Canon đã ứng dụng bài toán xác định khuôn mặt người
vào máy chụp hình thế hệ mới để cho kết quả hình ảnh đẹp hơn, nhất là khuôn
mặt người.
2.3 Phương pháp xác định khuôn mặt
Có nhiều nghiên cứu tìm phương pháp xác định khuôn mặt người, từ ảnh
xám đến ngày nay là ảnh màu. Dựa vào tính chất của các phương pháp xác định
khuôn mặt, các phương pháp này được chia làm bốn hướng tiếp cận chính:
• Hướng tiếp cận dựa trên tri thức: Mã hóa các hiểu biết của con người về các
loại khuôn mặt người thành các luật. Thông thường các luật mô tả quan hệ của
các đặc trưng.
• Hướng tiếp cận dựa trên đặc trưng không thay đổi: Mục tiêu các thuật toán đi
tìm các đặc trưng mô tả cấu trúc khuôn mặt người mà các đặc trưng này sẽ
không thay đổi khi tư thế khuôn mặt, vị trí đặt thiết bị thu hình hoặc điều kiện
ánh sáng thay đổi.
• Hướng tiếp cận dựa trên so khớp mẫu: Dùng các mẫu chuẩn của khuôn mặt
người (các mẫu này được chọn lựa và lưu trữ) để mô tả cho khuôn mặt người
hay các đặc trưng khuôn mặt (các mẫu này phải chọn làm sao cho tách biệt nhau
theo tiêu chuẩn mà các tác giả định ra để so sánh). Các mối tương quan giữa dữ
liệu ảnh đưa vào và các mẫu dùng để xác định khuôn mặt người.
Chương 2: Các phương pháp xác định khuôn mặt
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
40
• Hướng tiếp cận dựa trên diện mạo: Trái ngược hẳn với so khớp mẫu, các mô
hình (hay các mẫu) được học từ một tập ảnh huấn luyện trước đó. Sau đó hệ
thống (mô hình) sẽ xác định khuôn mặt người. Hay một số tác giả còn gọi hướng
tiếp cận này là hướng tiếp cận theo phương pháp học.
2.3.1 Hướng tiếp cận dựa trên tri thức
Trong hướng tiếp cận này, các luật sẽ phụ thuộc rất lớn vào tri thức của
những tác giả nghiên cứu về bài toán xác định khuôn mặt người. Đây là hướng tiếp
cận dạng top-down. Dễ dàng xây dựng các luật cơ bản để mô tả các đặc trưng của
khuôn mặt và các quan hệ tương ứng. Ví dụ, một khuôn mặt thường có hai mắt đối
xứng nhau qua trục thẳng đứng ở giữa khuôn mặt và có một mũi, một miệng. Các
quan hệ của các đặc trưng có thể được mô tả như quan hệ về khoảng cách và vị trí.
Thông thường các tác giả sẽ trích đặc trưng của khuôn mặt trước tiên để có được
các ứng viên, sau đó các ứng viên này sẽ được xác định thông qua các luật để biết
ứng viên nào là khuôn mặt và ứng viên nào không phải khuôn mặt. Thường áp dụng
quá trình xác định để giảm số lượng xác định sai.
Một vấn đề khá phức tạp khi dùng hướng tiếp cận này là làm sao chuyển từ
tri thức con người sang các luật một các hiệu quả. Nếu các luật này quá chi tiết (chặt
chẽ) thì khi xác định có thể xác định thiếu các khuôn mặt có trong ảnh, vì những
khuôn mặt này không thể thỏa mãn tất cả các luật đưa ra. Nhưng các luật tổng quát
quá thì có thể chúng ta sẽ xác định lầm một vùng nào đó không phải là khuôn mặt
mà lại xác định là khuôn mặt. Và cũng khó khăn mở rộng yêu cầu từ bài toán để xác
định các khuôn mặt có nhiều tư thế khác nhau.
Có hai tác giả Yang và Huang đã dùng một phương thức theo hướng tiếp cận
này để xác định các khuôn mặt. Hệ thống của hai tác giả này bao gồm ba mức luật.
Ở mức cao nhất, dùng một khung cửa sổ quét trên ảnh và thông qua một tập luật để
tìm các ứng viên có thể là khuôn mặt. Ở mức kế tiếp, hai ông dùng một tập luật để
mô tả tổng quát hình dáng khuôn mặt. Còn ở mức cuối cùng lại dùng một tập luật
khác để xem xét ở mức chi tiết các đặc trưng khuôn mặt. Một hệ thống đa độ phân
giải có thứ tự được dùng để xác định (hình 2.1).
Chương 2: Các phương pháp xác định khuôn mặt
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
41
(a) (b) (c) (d)
Hình 2.1 Độ phân giải của 1 ảnh; (a) Ảnh ban đầu có độ phân giải n=1;
(b),(c), và (d) Ảnh có độ phân giải n=4, 8, và 16.
Các luật ở mức cao nhất để tìm ứng viên như: “vùng trung tâm khuôn mặt
(phần tối hơn trong hình 2.2) có bốn phần với một mức độ đều cơ bản”, “phần xung
quanh bên trên của một khuôn mặt (phần sáng hơn trong hình 2.2) có một mức độ
đều cơ bản”, và “mức độ khác nhau giữa các giá trị xám trung bình của phần trung
tâm và phần bao bên trên là đáng kể”. Độ phân giải thấp nhất (mức mộ) của ảnh
dùng để tìm ứng viên khuôn mặt mà còn tìm ở các mức phân giải tốt hơn. Ở mức
hai, xem xét biểu đồ histogram của các ứng viên để loại bớt ứng viên nào không
phải là khuôn mặt, đồng thời dò ra cạnh bao xung quanh ứng viên. Ở mức cuối
cùng, những ứng viên nào còn lại sẽ được xem xét các đặc trưng của khuôn mặt về
mắt và miệng. Hai ông đã dùng một chiến lược “từ thô đến mịn” hay “làm rõ dần”
để giảm số lượng tính toán trong xử lý. Mặc dù tỷ lệ chính xác chưa cao, nhưng đây
là tiền đề cho nhiều nghiên cứu sau này.
Hình 2.2 Một loại trí thức của người nghiên cứu phân tích trên khuôn mặt.
2.3.2 Hướng tiếp cận dựa trên đặc trưng không thay đổi
Đây là hướng tiếp cận theo kiểu bottom-up. Các tác giả cố gắng tìm các đặc
trưng không thay đổi của khuôn mặt người để xác định khuôn mặt người. Dựa trên
nhận xét thực tế, con người dễ dàng nhận biết các khuôn mặt và các đối tượng trong
các tư thế khác nhau và điều kiện ánh sáng khác nhau, thì phải tồn tại các thuộc tính
hay đặc trưng không thay đổi. Có nhiều nghiên cứu đầu tiên xác định các đặc trưng
khuôn mặt rồi chỉ ra có khuôn mặt trong ảnh hay không. Các đặc trưng như: lông
Chương 2: Các phương pháp xác định khuôn mặt
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
42
mày, mắt, mũi, miệng, và đường viền của tóc được trích bằng phương pháp xác
định cạnh. Trên cơ sở các đặc trưng này, xây dựng một mô hình thống kê để mô tả
quan hệ của các đặc trưng này và xác định sự tồn tại của khuôn mặt trong ảnh. Một
vấn đề của các thuật tóan theo hướng tiếp cân đặc trưng cần phải điều chỉnh cho phù
hợp điều kiện ánh sáng, nhiễu, và bị che khuất. Đôi khi bóng của khuôn mặt sẽ tạo
thêm cạnh mới, mà cạnh này lại rõ hơn cạnh thật sự của khuôn mặt, vì thế nếu dùng
cạnh để xác định sẽ gặp khó khăn.
2.3.2.1 Các đặc trưng khuôn mặt
Một số phương pháp xác định các đặc trưng của khuôn mặt có tỷ lệ chính
xác cao:
+ Phương pháp xác định khuôn mặt từ một ảnh có hình nền phức tạp.
Phương pháp này dựa trên cạnh (dùng phương pháp Candy và heuristics) để loại bỏ
các cạnh để còn lại duy nhất một đường bao xung quanh khuôn mặt. Một hình
ellipse dùng để bao khuôn mặt, tách biệt vùng đầu và hình nền. Tỷ lệ chính xác của
thuật toán là 80%.
+ Phương pháp xác định khuôn mặt trong ảnh xám. Dùng bộ lọc để làm nổi
các biên, các phép toán hình thái học (morphology) được dùng để làm nổi bật các
vùng có cường độ cao và hình dáng chắc chắn (như mắt). Thông qua histogram để
tìm các đỉnh nổi bật để xác định các ngưỡng chuyển ảnh xám thành hai ảnh nhị
phân. Các thành phần dính nhau đều xuất hiện trong hai ảnh nhị phân thì được
xem là vùng của ứng viên khuôn mặt rồi phân loại xem có phải là khuôn mặt không.
Phương pháp được kiểm tra trên các ảnh chỉ có đầu và vai của người. Tuy nhiên còn
vấn đề, làm sao sử dụng các phép toán morphology và làm sao xác định khuôn mặt
trên các vùng ứng viên.
+ Phương pháp xác định khuôn mặt dựa mô hình xác suất để xác định khuôn
mặt ở trong ảnh có hình nền phức tạp trên cơ sở một bộ xác định đặc trưng cục bộ
và so khớp đồ thị ngẫu nhiên. Ý chính là xem bài toán xác định khuôn mặt như là
bài toán tìm kiếm với mục tiêu là tìm thứ tự các đặc trưng chắc chắn của khuôn mặt
để tạo thành giống nhất một mẫu khuôn mặt. Dùng năm đặc trưng (hai mắt, hai lỗ
mũi, phần nối giữa mũi và miệng) để mô tả một khuôn mặt. Luôn tính quan hệ
khoảng cách với các đặc trưng cặp (như mắt trái, mắt phải), dùng phân bố Gauss để
Chương 2: Các phương pháp xác định khuôn mặt
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
43
mô hình hóa. Một mẫu khuôn mặt được đưa ra thông qua trung bình tương ứng cho
một tập đa hướng, đa tỷ lệ của bộ lọc đạo hàm Gauss. Từ một ảnh, các đặc trưng
ứng viên được xác định bằng cách so khớp từng điểm ảnh khi lọc tương ứng với
vector mẫu (tương tự mối tương quan), chọn hai ứng viên đặc trưng đứng đầu để
tìm kiếm cho các đặc trưng khác của khuôn mặt. Giống như xây dựng một đồ thị
quan hệ mỗi node của đồ thị tương ứng như các đặc trưng của một khuôn mặt, đưa
xác suất vào để xác định. Tỷ lệ xác định chính xác là 86%.
+ Phương pháp xác định khuôn mặt dùng lý thuyết xác suất thống kê về hình
dáng. Dùng hàm mật độ xác suất (Probility Density Function- PDF) qua N điểm đặc
trưng, tương ứng (xi, yi) là đặc trưng thứ i với giả sử dựa vào phân bố Gauss có 2N-
chiều. Các tác giả áp dụng phương thức cực đại khả năng (Maximum Likelihood-
ML) để xác định vị trí khuôn mặt. Một thuận lợi của phương pháp này là các khuôn
mặt bị che khuất vẫn có thể xác định được. Nhưng phương pháp không xác định
được đa khuôn mặt trong ảnh.
+ Phương pháp xác định khuôn mặt dựa vào đặc trưng, dùng số lượng lớn
các dấu hiệu từ ảnh và cả dấu hiệu về ngữ cảnh. Đầu tiên dùng bộ lọc đạo hàm
Gauss thứ hai, xác định các điểm mấu chốt ở tại cực đại địa phương trong bộ lọc,
rồi chỉ ra nơi có thể là đặc trưng. Giai đoạn hai, kiểm tra các cạnh xung quanh điểm
mấu chốt và nhóm chúng lại thành các vùng. Tiêu chuẩn để nhóm các cạnh là gần
và tương tự hướng và cường độ. Đo lường các đặc tính vùng như: chiều dài cạnh,
cường độ cạnh, và biến thiên cường độ được lưu trong một vector đặc trưng. Từ dữ
liệu đặc trưng khuôn mặt đã được huấn luyện, sẽ tính được giá trị trung bình và ma
trận hiệp phương sai của mỗi đặc trưng khuôn mặt. Một vùng là ứng viên khuôn
mặt khi khoảng cách Mahalanobis giữa các vector đặc trưng đều dưới một ngưỡng.
Rồi thông qua mạng Bayes để xác định ứng viên có phải là khuôn mặt không. Tỷ lệ
chính xác là 85%, tuy nhiên mức độ sai là 28%, và chỉ hiệu quả với hình khuôn mặt
có kích thước 60x60 điểm ảnh. Phương pháp này được dùng thêm với mô hình
đường viền linh hoạt.
+ Phương pháp xác định khuôn mặt dựa trên tích đặc trưng võng mạc và cử
động theo dao động nhỏ của mắt. Thuật toán hoạt động trên bản đồ hay vùng của
các mấu chốt, mô hình hóa lưới võng mạc. Đầu tiên tính toán ước lượng thô vùng
Chương 2: Các phương pháp xác định khuôn mặt
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
44
khuôn mặt trên cơ sở bộ lọc. Giai đoạn thứ hai tinh chế trên độ phân giải mịn hơn.
Tỷ lệ sai là 4.69%.
+ Phương pháp xác định khuôn mặt dựa trên cơ sở hình thái học
(morphology) để trích các đoạn giống mắt (eye-analogue) để xác định khuôn mặt
người. Phương pháp này cho rằng mắt và lông mày là đặc trưng nổi bật nhất và ổn
định nhất của khuôn mặt con người, và nó rất hữu dụng để xác định khuôn mặt
người. Các đoạn giống mắt như là các cạnh trên đường viền của mắt. Đầu tiên, các
phép toán morphology như đóng, cắt bỏ sai khác, và phân ngưỡng để trích các
điểm ảnh có giá trị cường độ thay đổi đáng kể. Các điểm ảnh này sẽ trở thành các
điểm ảnh giống mắt. Sau đó một tiến trình gán nhãn để sinh các đoạn giống mắt.
Các đoạn này được dùng để chỉ dẫn tìm kiếm các vùng tiềm năng có thể là khuôn
mặt qua kết hợp các đặc tính hình học của mắt, mũi, lông mày, và miệng. Các vùng
này sẽ được một mạng neural xem xét có phải là khuôn mặt không. Tỷ lệ chính xác
là 94%.
+ Phương pháp xác định khuôn mặt dựa trên hình dáng và áp dụng cho các
khuôn mặt chụp thẳng. Có hai giai đoạn để xác định khuôn mặt người: tập trung và
phân loại chi tiết. Làm có thứ tự các mảnh cạnh, các mảnh này được trích từ bộ xác
định cạnh đơn giản thông qua sự khác biệt cường độ là quá trình tập trung. Khi có
các ứng viên từ quá trình trên, dùng thuật toán CART để xây dựng một cây phân
loại từ các ảnh để huấn luyện, để xem xét ứng viên nào là khuôn mặt người.
+ Phương pháp xác định khuôn mặt dùng cấu trúc hình học của khuôn mặt
người để tìm ứng viên khuôn mặt trong ảnh xám và hình nền không phức tạp. Mỗi
ảnh chỉ có một khuôn mặt người, nhưng tư thế điều kiện ánh sáng, không cố định.
Tỷ lệ chính xác khỏang 94.25% và thời gian khá nhanh.
+ Phương pháp xác định khuôn mặt dùng sắc màu của da người để tìm ứng
viên, bằng cách dùng mô hình màu da người trên từng phần nhỏ rồi xử lý phân
đoạn trên đó. Sau khi có ứng viên khuôn mặt, dùng một số đặc tính về hình dáng để
xác định khuôn mặt người. Tỷ lệ chính xác là 85%.
2.3.2.2 Kết cấu
Khuôn mặt con người có những kết cấu riêng biệt mà có thể dùng để phân
loại so với các đối tượng khác. Có một số nhà nghiên cứu cho rằng hình dạng của
Chương 2: Các phương pháp xác định khuôn mặt
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
45
khuôn mặt dùng làm kết cấu phân loại, gọi là kết cấu giống khuôn mặt (face-like
texture). Tính kết cấu qua các đặc trưng thống kê thứ tự thứ hai (SGLD) trên vùng
có kích thước 16x16 điểm ảnh. Có ba loại đặc trưng được xem xét: màu da, tóc, và
những thứ khác.
2.3.2.3 Sắc màu của da
Thông thường các ảnh màu không xác định trực tiếp trên toàn bộ dữ liệu ảnh
mà các tác giả dùng tính chất sắc màu của da người (khuôn mặt người) để chọn ra
được các ứng viên có thể là khuôn mặt người (lúc này dữ liệu đã thu hẹp đáng kể)
để xác định khuôn mặt người.
2.3.2.4 Đa đặc trưng
Gần đây có nhiều nghiên cứu sử dụng các đặc trưng toàn cục như: màu da
người, kích thước, và hình dáng để tìm các ứng viên khuôn mặt, rồi sau đó sẽ xác
định ứng viên nào là khuôn mặt thông qua dùng các đặc trưng cục bộ (chi tiết) như:
mắt, lông mày, mũi, miệng, và tóc.
2.3.3 Hướng tiếp cận dựa trên so khớp mẫu
Trong so khớp mẫu, các mẫu chuẩn của khuôn mặt (thường là khuôn mặt
được chụp thẳng) sẽ được xác định trước hoặc xác định các tham số thông qua một
hàm. Từ một ảnh đưa vào, tính các giá trị tương quan so với các mẫu chuẩn về
đường viền khuôn mặt, mắt, mũi và miệng. Thông qua các giá trị tương quan này
mà các tác giả quyết định có hay không có tồn tại khuôn mặt trong ảnh. Hướng tiếp
cận này có lợi thế là rất dễ cài đặt, nhưng không hiệu quả khi tỷ lệ, tư thế, và hình
dáng thay đổi (đã được chứng minh). Nhiều độ phân giải, đa tỷ lệ, các mẫu con, và
các mẫu biến dạng được xem xét thành bát biến về tỷ lệ và hình dáng.
Hình chiếu được dùng như các mẫu để xác định khuôn mặt người. Dùng
PCA (phân tích thành phần chính - Principal Component Analysis - PCA) để có một
tập hình chiếu cơ bản từ các mẫu khuôn mặt, hình chiếu được mô tả như một mảng
các bit. Dùng đặc trưng hình chiếu riêng kết hợp biến đổi Hough để xác định khuôn
mặt người. Sau đó một phương pháp xác định dựa trên đa loại mẫu để xác định các
thành phần của khuôn mặt được trình bày. Phương pháp này định nghĩa một số giả
thuyết để mô tả các khả năng của các đặc trưng khuôn mặt. Với một khuôn mặt sẽ
có một tập giả thuyết, lý thuyết DepsterShafer. Dùng một nhân tố tin cậy để kiểm
Chương 2: Các phương pháp xác định khuôn mặt
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
46
tra sự tồn tại hay không của các đặc trưng của khuôn mặt, và kết hợp nhân tố tin cậy
này với một độ đo để xem xét có hay không có khuôn mặt trong ảnh.
Hình 2.3 Một mẫu khuôn mặt, có 16 vùng và 23 quan hệ (các mũi tên).
2.3.4 Hướng tiếp cận dựa trên diện mạo
Trái ngược với các phương pháp so khớp mẫu với các mẫu đã được định
nghĩa trước bởi những chuyên gia, các mẫu trong hướng tiếp cận này được học từ
các ảnh mẫu. Một cách tổng quát, các phương pháp theo hướng tiếp cận này áp
dụng các kỹ thuật theo hướng xác suất thống kê và máy học để tìm những đặc tính
liên quan của khuôn mặt và không phải là khuôn mặt. Các đặc tính đã được học ở
trong hình thái các mô hình phân bố hay các hàm biệt số nên dùng có thể dùng các
đặc tính này để xác định khuôn mặt người. Đồng thời, bài toán giảm số chiều
thường được quan tâm để tăng hiệu quả tính toán cũng như hiệu quả xác định.
Các tiếp cận khác trong hướng tiếp cận dựa trên diện mạo là tìm một hàm
biệt số (như: mặt phẳng quyết định, siêu phẳng để tách dữ liệu, hàm ngưỡng) để
phân biệt hai lớp dữ liệu: khuôn mặt và không phải khuôn mặt. Bình thường, các
mẫu ảnh được chiếu vào không gian có số chiều thấp hơn, rồi sau đó dùng một hàm
biệt số (dựa trên các độ đo khoảng cách) để phân loại, hoặc xây dựng mặt quyết
định phi tuyến bằng mạng neural đa tầng. Hoặc dùng SVM (Support Vector
Machine) và các phương thức kernel, chiếu hoàn toàn các mẫu vào không gian có
số chiều cao hơn để dữ liệu bị rời rạc hoàn toàn và ta có thể dùng một mặt phẳng
quyết định phân loại các mẫu khuôn mặt và không phải khuôn mặt.
Chương 2: Các phương pháp xác định khuôn mặt
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
47
2.4 Khó khăn và thử thách trong bài toán xác định khuôn mặt người
Việc xác định khuôn mặt người có những khó khăn nhất định như sau:
• Hướng (pose) của khuôn mặt đối với máy ảnh, như: nhìn thẳng, nhìn nghiêng
hay nhìn từ trên xuống. Cùng trong một ảnh có thể có nhiều khuôn mặt ở những
tư thế khác nhau.
• Sự có mặt của các chi tiết không phải là đặc trưng riêng của khuôn mặt
người, như: râu quai nón, mắt kính, ….
• Các nét mặt (facial expression) khác nhau trên khuôn mặt, như: vui, buồn,
ngạc nhiên, ….
• Mặt người bị che khuất bởi các đối tượng khác có trong ảnh.
• Điều kiện ảnh, đặc biệt là về độ sáng và chất lượng ảnh, chất lượng thiết bị
thu hình.
• Trục toạ độ của máy ảnh so với ảnh.
• Kích thước khác nhau của các khuôn mặt người, và đặc biệt là trong cùng
một ảnh.
• Màu sắc của môi trường xung quanh, hay màu sắc quần áo của người được
chụp lấy ảnh.
• Xuất hiện thành phần khuôn mặt hay không.
• Nhiều khuôn mặt có vùng da dính lẫn nhau.
Các khó khăn trên chứng tỏ rằng bất cứ phương pháp giải quyết (thuật toán)
bài toán xác định khuôn mặt người sẽ không thể tránh khỏi một số khiếm khuyết
nhất định. Để đánh giá và so sánh các phương pháp xác định mặt người, người ta
thường dựa trên các tiêu chí sau:
• Tỷ lệ xác định chính xác là tỷ lệ số lượng các khuôn mặt người được xác
định đúng từ hệ thống khi sử dụng một phương pháp để xây dựng so với số
lượng khuôn mặt người thật sự có trong các ảnh (detection rate).
• Số lượng xác định nhầm là số lượng vùng trong ảnh không phải là khuôn
mặt người mà hệ thống xác định nhầm là khuôn mặt người (false positives).
• Thời gian thực hiện là thời gian để máy tính xác định khuôn mặt người trong
ảnh (running time).
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
48
Chương 3
PHÂN TÍCH THÀNH PHẦN CHÍNH PCA
(PRINCIPAL COMPONENT ANALYSIS)
3.1 Sơ lược về phân tích thành phần chính PCA
3.2 Thuật toán PCA và ứng dụng trong nhận dạng khuôn mặt người
3.3 Ứng dụng Eigenfaces trong việc nhận dạng mặt người
3.4 Nhận xét
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
49
Chương 3
PHÂN TÍCH THÀNH PHẦN CHÍNH PCA
3.1 Sơ lược về phân tích thành phần chính PCA
Phân tích thành phần chính (Principal Component Analysis - PCA) được trình
bày theo nhiều quan điểm khác nhau. Với các nhà thống kê cổ điển thì PCA là tìm các
trục chính của ellipsoid nhiều chiều bao hàm đám mây số liệu phân phối chuẩn nhiều
chiều, các trục đó được ước lượng từ một mẫu n cá thể, trên mỗi cá thể người ta đo p
chỉ tiêu. Người đầu tiên đưa ra kỹ thuật này là H.Hotelling (1933), sau đó là
T.W.Anderson (1958) và A.M.Kshirsagar (1972).
Với các nhà nhân tố học cổ điển thì kỹ thật này là phương pháp phân tích nhân
tố trong trường hợp đặc biệt, khi các phương sai này bằng không hoặc xấp xỉ bằng
không. Phương pháp này thường được sử dụng trong phân tích tâm lý, do Horst (1965)
và Harman (1966) đề xuất.
Sau cùng, theo quan điểm phổ biến hơn cả của các nhà phân tích số liệu thì PCA
là một kỹ thuật biểu diễn các số liệu một cách tối ưu theo một tiêu chuẩn đại số và hình
học đặc biệt. khi sử dụng kỹ thuật này người ta không đòi hỏi một giả thuyết thống kê
hoặc một mô hình đặc biệt nào. Quan điểm này trở nên phổ biến từ khi có máy tính
điện tử, và là quan điểm mới nhất. Những tư tưởng của phương pháp này do K.Pearson
(1901) đề xuất. Trong công trình của C.R Rao (1964) nội dung lý thuyết của phương
pháp PCA được trình bày khá đơn giản và rõ ràng.
Lĩnh vực ứng dụng của phương pháp PCA rất rộng trong công nghiệp, nông
nghiệp, kinh tế, khoa học cơ bản… với bảng số liệu mà các cột là các biến và các dòng
là các cá thể, trên đó đo giá trị của biến.
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
50
3.2 Thuật toán PCA và ứng dụng trong nhận dạng khuôn mặt người
3.2.1 Thuật toán
Khuôn mặt con người có rất nhiều nét để nhận biết, nếu như ta gặp lại một
người bạn sau một thời gian dài, ta có thể nhận ra ngay người đó dù những chi tiết cụ
thể trên mặt có thể thay đổi như da, mái tóc. Ta nhận ra không phải vì nhớ đôi mắt, hay
mũi hay môi hay tóc, lông mày người đó mà ta nhận ra vì nhớ diện mạo của người đó.
Tức là trên khuôn mặt tồn tại một nét tổng thể nào đó để có thể nhận diện, thuật toán
của ta bắt đầu từ ý tưởng này .
Phân tích thành phần chính (Principal Component Analysis ) gọi tắt là PCA là
thuật toán nhận dạng ảnh dựa trên những nét tổng thể của khuôn mặt, ta sẽ áp dụng
thuật toán này để thực hiện hai công việc sau :
• Thứ nhất là xác định vị trí những khuôn mặt người trong một bức ảnh.
• Thứ hai là tìm một khuôn mặt giống với khuôn mặt cho trước.
Ban đầu ta có một tập ảnh khuôn mặt gọi là tập ảnh huấn luyện (training set).
Giả sử mỗi ảnh có kích thước M*N, ta coi mỗi bức ảnh này là một vector trong không
gian M*N chiều. Bây giờ mỗi khuôn mặt là một vector, ta thấy những vector này không
phân bố ngẫu nhiên trong không gian ảnh mà phân bố theo một quy luật tương đối nào
đó, ta có thể nói những vector này nằm trong một không gian con gọi là không gian
khuôn mặt. Từ những vector trong tập huấn luyện, ta sẽ tìm một cơ sở trực chuẩn cho
không gian khuôn mặt. Những vector thuộc cơ sở này có thể coi là những vector mang
những nét tổng thể đặc trưng về khuôn mặt.
3.2.2 Phân tích thành phần chính PCA
Giả sử tập huấn luyện có P ảnh, khi đó ta sẽ có P vector: T1, T2, …, TP.
Tính vector ảnh trung bình :
1
1 p
ii
m Tp =
= ∑
Sự khác biệt giữa những khuôn mặt với ảnh trung bình là những vector:
i iA T m= − , i=1…P
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
51
Ý tưởng của việc phân tích thành phần chính là tìm một tập những vector trực
chuẩn uk sao cho những vector này mô tả tốt nhất sự phân bố những vector khuôn mặt
trong không gian. Những vector uk được chọn sao cho:
1 ,/
0 ,i j
ui uji j=⎧
− = ⎨ ≠⎩
2
1/
p
k k ii
u Aλ=
− =∑ lớn nhất .
Những vector uk và giá trị vô hướng kλ chính là những vector riêng và trị riêng
tương ứng của ma trận AAT.
/u v là tích vô hướng giữa hai vector u, v.
1 2... pA A A A⎡ ⎤= ⎣ ⎦
Ta thấy ma trận A có kích thước M*N × P, còn ma trận AAT có kích thước
M*N×M*N, do kích thước ma trận này quá lớn nên ta không thể tìm được những
vector riêng và những trị riêng trực tiếp được, thay vào đó ta sẽ tìm những vector riêng
của ma trận ATA có kích thước P×P .
Nếu v là một vector riêng của ATA và λ là trị riêng tương ứng, khi đó ta có:
ATA v = λv ATA Av = λAv
tức là Av là một trị riêng của ma trận AAT.
Thông thường ta chỉ lấy một số Q vector riêng ứng với Q trị riêng có giá trị lớn
nhất.
Sau khi có các vector riêng của ma trận AAT, ta sẽ chuẩn hóa chúng để thu được
một cơ sở trực chuẩn của không gian khuôn mặt .
Đặt L= ATA , tìm V là tập hợp các vector riêng của L, D là tập hợp các trị riêng
tương ứng .
V bao gồm Q vector riêng ứng với những trị riêng lớn hơn một giá trị nào đó
hoặc ứng với Q trị riêng lớn nhất trong D.
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
52
E = AV là tập các vector riêng của AAT. Do đây là những vector riêng, mà nó lại
có dạng khuôn mặt nên còn đuợc gọi là Eigenfaces. E là ma trận M*N×Q, mỗi cột là
một vector riêng.
Chuẩn hóa các vector cột trong E (chia mỗi vector cho độ dài của vector đó).
Bây giờ, ta có thể coi E là một cơ sở trực chuẩn của không gian khuôn mặt.
Với H là bức ảnh có cùng kích thước với những bức ảnh trong tập huấn luyện.
Ta sẽ xét nó có phải là bức ảnh khuôn mặt hay không, cũng như tìm bức ảnh giống với
nó nhất trong tập huấn luyện .
H được xem là một vector trong không gian M*N chiều.
Đặt K= H - m với m là vector ảnh trung bình.
Cho V là một không gian có tích vô hướng hữu hạn chiều và W là một không
gian con của V. Giả sử W có một cơ sở trực chuần là u1, …, uQ. Khi đó hình chiếu
trực giao của vector u bất kỳ lên W được xác định như sau:
01
/Q
w i ii
pr u u u u u=
= =∑
Độ dài 0u u− được gọi là khoảng cách từ u đến W .
Tập hợp /i ic u u= , i=1,…, Q được gọi là tọa độ của u0 trong không gian W.
Tìm C=ETK là tọa độ của hình chiếu Kf của K lên không gian khuôn mặt. C là
vector cột Q×1
1
Q
f i ii
K c e=
= ∑ với ci = C( i , 1) ; ei= E( : , i) .
Với Ai là một cột trong ma trận A (tương ứng với bức ảnh Ti trong tập huấn luyện). Ta
tính Ti iC E A= là tọa độ của hình chiếu Ai f của Ai lên không gian khuôn mặt.
Ta tính hai đại lượng sau:
fS K K= − xem như khoảng cách từ bức ảnh H đến không gian mặt.
i iS C C= − xem như khoảng cách từ H đến bức ảnh Ti trong tập huấn luyện.
Xét α và β là hai ngưỡng nào đó.
s < α thì H là bức ảnh khuôn mặt (do H đủ gần với không gian mặt).
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
53
si < β thì Ti là bức ảnh của cùng một người với H ( H đủ gần với Ti).
Vậy là ta đã có thể tìm bức ảnh trong tập huấn luyện giống với bức ảnh H hay xác
định đó có phải là bức ảnh khuôn mặt hay không. Tuy nhiên ảnh H phải có cùng kích
thước với những bức ảnh trong tập huấn luyện. Bây giờ trong một bức ảnh lớn H có
nhiều khuôn mặt, ta sẽ xác định vị trí những khuôn mặt trong bức ảnh.
Tại mỗi vị trí (x,y) trong H, đặt H(x,y) là một vùng trong ảnh H có kích thước M×N
tại (x,y), ta xem ảnh con H(x,y) là một vector M*N chiều.
K(x,y) = H(x,y) – m
Tìm Kf(x,y) là hình chiếu của K(x,y) lên không gian khuôn mặt .
Tính ( , ) ( , ) ( , )fs x y K x y K x y= −
Tập hợp các giá trị s(x,y) tạo thành một bản đồ khuôn mặt (face map) của H, từ đó ta có
thể xác định vị trí những khuôn mặt trong ảnh.
3.2.3 Hình ảnh minh họa
Trong ví dụ này ta có một tập huấn luyện gồm những bức ảnh khuôn mặt kích thước
180x200 pixel, dưới đây là một số hình ảnh của những eigenfaces thu được (lưu ý là
đây chỉ là các vector trực giao, những eigenfaces thực sự chính là những vector này
được chuẩn hóa).
Hình 3.1 Eigenfaces
Bây giờ ta chiếu hai bức ảnh lên không gian khuôn mặt này :
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
54
Hình 3.2 Bức ảnh kiểm tra và hình chiếu của nó
Như ta thấy nếu bức ảnh là khuôn mặt người thì hình chiếu sẽ khá giống với ảnh
gốc, còn khi bức ảnh không phải là khuôn mặt thì hình chiếu sẽ khác ảnh gốc rất nhiều,
do đó khoảng cách từ bức ảnh mặt người tới không gian mặt sẽ nhỏ hơn rất nhiều so
với khoảng cách từ bức ảnh không phải mặt người tới không gian mặt.
Dưới đây là một ví dụ khác, ta có một tập huấn luyện gồm những bức ảnh kích
thước 18x27 pixel, ta cũng tìm các Eigenface và sau đó tìm face map của một bức ảnh
kiểm tra. Trong ví dụ này thì ảnh con H(x,y) vùng hình chữ nhật có tâm tại (x,y) trên
bức ảnh và có kích thước 18x27 pixel.
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
55
Hình 3.3 Ảnh ban đầu
Hình 3.4 Face map của bức ảnh ban đầu.
Ta thấy vị trí của mỗi khuôn mặt chính là những vùng cực tiểu địa phương trên
bức ảnh (là những đốm đen trong những vùng trắng hình chữ nhật).
Bây giờ nếu ta có một cơ sở dữ liệu những ảnh không phải khuôn mặt (ta
thường tập trung vào những hình ảnh xung quanh khuôn mặt như cổ áo, một phần của
khuôn mặt …). Tìm face map của bức ảnh ban đầu với không gian không phải khuôn
mặt này, ta thu được kết quả sau:
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
56
Hình 3.5 Face map ảnh ban đầu với không gian không phải là khuôn mặt
Hình trên cũng khá giống với face map ứng với không gian khuôn mặt nhưng tại
mỗi vùng sáng hình chữ nhật thì không hề có tâm ở giữa.
Thực ra từ face map ứng với không gian khuôn mặt, nếu ta có một thuật toán tốt
để tìm những vị trí cực tiểu địa phương thì đã có thể xác định vị trí các khuôn mặt.
Face map ứng với không gian không phải khuôn mặt chỉ là một cách đơn giản để giúp
ta tìm chính xác hơn thôi.
Tất cả những điều thu được ở trên chỉ là kết quả hoàn toàn dựa trên lý thuyết,
trong thực tế những thuật toán nhận dạng mặt người đã phát triển lên rất nhiều từ ý
tưởng của PCA mới có được độ chính xác yêu cầu.
3.3 Ứng dụng Eigenfaces trong việc nhận dạng mặt người
Hầu hết việc làm trước đây trong hệ thống tự nhận dạng gương mặt đều cho
rằng việc nhận ra các góc cạnh của gương mặt trong các trạng thái khác nhau là rất
quan trọng trong việc nhận dạng, thừa nhận rằng việc xác nhận trước các khoảng cách
là rất quan trọng và cần thiết. Điều đó đề xuất chúng tôi đưa ra phương pháp lý thuyết
thông tin cho việc mã hóa và giải mã những ảnh mặt người, đưa ra bản chất nội dung
thông tin của những ảnh mặt người, nhấn mạnh những đặc trưng “cục bộ” và “toàn
cục”. Những đặc trưng có hoặc không có liên quan trực tiếp đến cách quan sát bằng
trực giác của chúng ta về các đặc trưng của gương mặt như cặp mắt, mũi, môi hoặc mái
tóc.
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
57
Trong ngôn ngữ của lý thuyết thông tin, chúng ta muốn trích xuất các thông tin
quan trọng của ảnh mặt người, mã hóa một cách hiệu quả trong phạm vi có thể, và so
sánh gương mặt mã hóa với kho dữ liệu của các mẫu được mã hóa một cách tương tự.
Một cách dễ dàng để trích xuất thông tin chứa đựng trong bức ảnh mặt người là bằng
cách nào đó chỉ ra sự khác biệt trong tập hợp ảnh mặt người, độc lập trong phân tích
các nét mặt, và sử dụng những thông tin này mã hóa và so sánh các ảnh gương mặt cá
thể.
Về mặt toán học, chúng ta tìm ra các thành phần chính trong sự phân bố của mặt
người, hoặc các vectơ riêng (eigenvectors) từ ma trận tương quan của dãy ảnh mặt
người. Những vectơ riêng này có thể được xem như là dãy những điểm đặc trưng,
chúng liên kết nhau để mô tả sự khác nhau giữa các ảnh mặt người. Mỗi vị trí của ảnh
góp phần tạo ra mỗi vectơ riêng, vì vậy ta có thể trình bày vectơ riêng bằng một loại
mặt ma “ghostly face” mà ta còn gọi là eigenface. Một số mặt loại này được trình bày
trong hình 3.7.
Hình 3.6 a) Những gương mặt dùng để huấn luyện b) Ảnh trung bình ψ
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
58
Hình 3.7 Bảy Eigenfaces được tính toán từ dãy huấn luyện của hình 4.6, phông nền đã
được loại bỏ
Mỗi ảnh mặt người trong dãy huấn luyện có thể được tái hiện chính xác thông
qua eigenfaces. Số lượng eigenfaces tương đương với số ảnh mặt người được đưa vào
huấn luyện. Tuy nhiên các gương mặt có thể xấp xỉ bằng cách chỉ sử dụng “best
eigenfaces”, được tạo ra từ các giá trị riêng lớn nhất và từ đó có thể tính toán độ sai
biệt lớn nhất với chuỗi ảnh mặt người. Lý do chính cho việc sử dụng ít eigenfaces là
nhờ sự hiệu qủa trong quá trình tính toán. M’ eigenfaces sẽ mở rộng ra không gian con
M’ chiều - “không gian mặt người”- của tất cả ảnh có thể. Đường hình sin biểu thị các
pha và tần số khác nhau là hàm cơ bản của phân bố Fourier (là hàm riêng của hệ thống
tuyến tính).
Ý tưởng sử dụng eigenfaces được thúc đẩy bởi sự phát triển kỹ thuật của
Sirvokick và Kirby - những bức hình miêu tả hiệu qủa các gương mặt sử dụng phương
pháp phân tích các thành phần chính (principal component analysis - PCA). Họ chứng
minh rằng các bộ sưu tập ảnh mặt người có thể được tạo lại một cách gần đúng bằng
việc lưu trữ bộ trọng số cho mỗi gương mặt và một chuỗi nhỏ bức hình chuẩn (có thể
nhỏ hơn rất nhều so với bộ sưu tập ban đầu).
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
59
Quá trình nhận dạng có thể tóm tắt như sau:
• Chuẩn bị: Thu thập dãy huấn luyện của ảnh mặt người và tính toán các
eigenfaces, xác định không gian mặt người.
• Khi nhận được bức ảnh mới, tính toán dãy trọng số dựa vào ảnh đầu vào và M
eigenfaces bằng cách chiếu ảnh đầu vào với từng eigenface.
• Có thể xác định ảnh đầu vào có phải là gương mặt hay không dưa vào việc kiểm
tra ảnh đó có gần không gian mặt người hay không.
• Nếu đã là gương mặt thi phân loại các trọng số xem đó có phải người đã biết
trước hay chưa.
• (không bắt buộc) Nếu gương mặt chưa biết xuất hiện vài lần thì tính toán các
trọng số thành phần và sát nhập vào những gương mặt đã biết (học nhận dạng).
3.3.1 Tính toán Eigenfaces
Lấy bức ảnh mặt người I(x,y) là ma trận 2 chiều N×N (các giá trị trong ma trận
thể hiện mức xám tại từng điểm ảnh), hoặc là vectơ N2. Bức ảnh chuẩn có kích thước
256x256 mô tả vectơ có 65536 chiều, hoặc có thể xem mỗi bức ảnh là một điểm trong
không gian 65536 chiều. Với một chuỗi ảnh thì ta sẽ có một bản đồ mô tả tập hợp các
điểm (mỗi điểm đặc trưng cho 1 ảnh) trong không gian rộng lớn này.
Ảnh của các gương mặt, có thể xem như tương tự nhau trong dạng tổng quát,
chứ không phải sự phân bố ngẫu nhiên trong không gian ảnh rộng lớn do đó ta có thể
mô tả chúng trong không gian con ít chiều hơn. Ý tưởng chính của phương pháp phân
tích các thành phần chính (PCA) là tìm kiếm các vectơ tính toán sự phân bố ảnh mặt
người theo hướng tốt nhất đối với vùng ảnh đầu vào cho trước. Những vectơ này xác
định không gian con của ảnh mặt người, chúng còn được gọi là không gian mặt (face
space).
Những vectơ này có chiều dài là N2, mô tả bức ảnh N×N, và nó là sự kết hợp
tuyến tính từ các ảnh gốc đầu vào. Bởi vì các vectơ là các eigenvectơ của ma trận
tương quan (covariance matrix) thu được từ các ảnh gốc đầu vào, bởi vì chúng cũng có
hình dạng như gương mặt, nên thường được gọi là eigenfaces. Một số ví dụ về
eigenfaces được chỉ ra ở hình 3.7.
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
60
Lấy một chuỗi huấn luyện của ảnh mặt người là 1 2 3 4, , , ,..., nΓ Γ Γ Γ Γ . Mỗi bức ảnh
khác với ảnh trung bình theo vectơ i iΦ = Γ −Ψ . Gương mặt “trung bình” của chuỗi
được tính bằng công thức.
1
1 M
nnM =
Ψ = Γ∑
Hình 3.6 thể hiện dãy huấn luyện, ảnh trung bình chỉ ra ở hình 3.6b. Dãy này là
các vectơ có kích thước lớn được tính toán PCA, tìm kiếm dãy M các vectơ trực giao
và các giá trị riêng thích hợp. Các vectơ và thang đo là các vectơ riêng và trị riêng
tương ứng của ma trận tương quan.
1
1 MT T
n nn
C AAM =
= Φ Φ =∑
Trong đó ma trận [ ]1 2 3, , ,..., nA = Φ Φ Φ Φ , ma trận C có kích thước là N2 x N2 và
phải xác định N vectơ riêng và trị riêng, đó là nhiệm vụ rất khó làm đối với kích thước
của một ảnh chuẩn. Chúng ta cần phải có phương pháp tính toán hợp lý để tìm ra các
vectơ riêng này. Thật may mắn khi ta có thể xác định các vectơ riêng bằng việc tính
toán trong ma trận có kích thước nhỏ hơn nhiều M x M, sau đó dùng kết hợp tuyến tính
của các vectơ tính được ở trên.
Với sự phân tích trên thì việc tính toán đã được giảm bớt rất nhiều, từ bậc của
các điểm ảnh N2 chuyển sang bậc của các ảnh trong dãy huấn luyện M. Thực tế những
ảnh gương mặt trong dãy huấn luyện sẽ tương đối nhỏ (M<< N2) và việc tính toán có
thể kiểm soát được. Những trị riêng thích hợp cho phép chúng ta sắp xếp các trị riêng
theo hướng có lợi cho việc mô tả sự khác nhau giữa các bức ảnh. Hình 3.7 chỉ ra 7
eigenfaces đầu tiên đã tính tóan từ các ảnh đầu vào ở hình 3.6. Thông thường nền bức
ảnh sẽ được loại bỏ khỏi ảnh được luyện, do đó eigenfaces sẽ có giá trị không ở không
gian phía ngoài gương mặt.
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
61
3.3.2 Dùng Eigenfaces để phân loại ảnh mặt người.
Khi các eigenfaces được tạo ra, việc nhận dạng trở thành nhận ra các mẫu.
Eigenfaces sẽ mở ra không gian con M’ chiều từ không gian gốc N2. M’ vectơ riêng
cần thiết của ma trận L được chọn ra từ các giá trị riêng thích hợp lớn nhất. Trong
trường hợp kiểm tra này, dựa trên M=16 ảnh gương mặt, chọn ra M’= 7 eigenfaces. Số
eigenfaces được sử dụng ở đây là chọn ra từ các trị riêng.
Một gương mặt mới được biến đổi về các thành phần eigenface của chính nó (chiếu
vào không gian mặt) bởi phép tính đơn giản
( )k kW u= Γ −Ψ với k=1,2…M’
Điều này mô tả một dãy phép nhân và phép cộng điểm đến điểm ảnh. Hình 3.8
chỉ ra 3 bức ảnh và hình chiếu của chúng vào không gian mặt người.
Hình 3.8 Ảnh và hình chiếu của nó vào không gian mặt người xác định bởi các
Eigenfaces từ hình 3.7
Các trọng số thu được từ vectơ [ ]1 2 3 ', , ,...,TMw w w wΩ = , chúng mô tả sự phân bố
của từng eigenface trong mối tương quan của ảnh đầu vào, mô tả eigenfaces như là
phần cơ bản của ảnh mặt người. Các vectơ này được dùng để tìm kiếm là cái nào trong
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
62
số lớp ảnh mặt người được xác định trước, mô tả gương mặt mới này theo hướng tốt
nhất. Giải thuật đơn giản nhất là xác định lớp ảnh mô tả các thông tin gần giống ảnh
đầu vào, Chính là đi tìm lớp ảnh thứ k có khoảng cách euclid nhỏ nhất k kε = Ω−Ω ,
trong đó kΩ là vectơ mô tả lớp gương mặt thứ k. Gương mặt được phân loại thuộc lớp
thứ k khi giá trị kε nhỏ hơn ngưỡng cho trước là τθ . Ngược lại gương mặt sẽ đươc
phân loại là chưa biết.
3.3.3 Ứng dụng Eigenfaces để phát hiện gương mặt
Chúng ta có thể sử dụng kiến thức không gian mặt người để dò tìm và định vị mặt
người trong bức ảnh. Chúng ta có thể nhận dạng hình dáng của các thành phần của
gương mặt. Tạo ra các vectơ trọng số của bức ảnh tương đương với việc chiếu bức ảnh
vào không gian mặt đã được lược bỏ các chiều dư thừa. Khoảng cách giữa bức ảnh và
hình chiếu của nó vào không gian mặt người chỉ đơn giản là khoảng cách giữa ảnh đầu
vào điều chỉnh về giá trị trung bình Φ = Γ−Ψ và 1
M
i k ki
w μ=
Φ =∑ , hình chiếu của ảnh vào
không gian mặt.
Như được chỉ ra ở hình 3.9, các bức ảnh mặt người hoàn toàn không có sự thay
đổi khi chiếu vào không gian mặt, trong khi các bức ảnh không có dạng mặt người thì
sự khác biệt là khá nhiều, ý tưởng cơ bản cho việc dò tìm hình dáng mặt người trong
một khung cảnh là: tại mọi vị trí của bức ảnh tính toán khoảng cách giữa các vùng ảnh
nhỏ với không gian mặt. Khoảng cách từ không gian mặt được dùng như giá trị đo
“khả năng là mặt người”, kết quả tính toán khoảng cách từ không gian mặt người đến
mọi điểm trên bức ảnh là bản đồ mặt (“face map”) ( ),x yε . Hình 3.9 chỉ ra bức ảnh và
bản đồ mặt của nó - vùng giá trị thấp (vùng tối) chỉ ra hình dáng của gương mặt. Điểm
cực tiểu trong bản đồ mặt chính là vị trí gương mặt trong ảnh.
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
63
Hình 3.9 a) Ảnh gốc b) Bản đồ mặt người, vùng tối chỉ ra hình dạng khuôn mặt
3.3.3.1 Xem xét lại không gian mặt
Một bức ảnh mặt người, và trong số những gương mặt trong chuỗi huấn luyện,
nên tuyến tính với không gian mặt, tổng quát là nó mô tả những bức ảnh xem như
giống mặt người. Nói một cách khác, khoảng cách hình chiếu δΦ nên nằm trong phạm
vi ngưỡng.
Có 4 trường hợp có thể xảy ra đối với ảnh đầu vào và các vectơ thành phần của
nó:
• Gần không gian mặt và thuộc một lớp mặt .
• Gần không gian mặt nhưng không thuộc lớp mặt
• Xa không gian mặt nhưng thuộc 1 lớp mặt.
• Xa không gian mặt và không thuộc lớp mặt nào.
Hình 3.10 chỉ ra 4 trường hợp trên trong ví dụ đơn giản là chỉ có 2 eigenfaces.
Hình 3.10 Ví dụ đơn giản thể hiện 4 hình chiếu của ảnh lên không gian mặt người.
Trong trường hợp này sử dụng 2 eigenfaces là µ1, µ2 và 3 lớp mặt người (cá thể) đã
biết trước (Ω1, Ω2, Ω3)
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
64
Trong trường hợp đầu tiên, cá thể sẽ được nhận dạng và xác định. Trong trường
hợp 2 sẽ nhận ra cá thể thuộc lớp mặt người nhưng chưa biết.
Hai trường hợp còn lại chỉ ra ảnh không phải là ảnh mặt người. Riêng trường
hợp thứ ba sẽ bị nhận diện sai trong hầu hết hệ thống nhận dạng hiện nay; tuy nhiên sự
nhận dạng sai này sẽ bị phát hiện trong hệ thống của chúng tôi bởi vi khoảng cách cần
thiết giữa ảnh và không gian con của ảnh mặt người.
3.3.3.2 Nhận dạng theo thời gian thực
Con người luôn không ngừng chuyển động. Ngay cả khi đang ngồi họ cũng cựa
quậy, và điều chỉnh vị trí cơ thể, chớp mắt nhìn xung quanh. Đối với người chuyển
động trong không gian tĩnh, chúng tôi sẽ xây dựng hệ thống dò tìm và định vị các
chuyển động đơn giản, mô tả hình 6, cho phép dò tìm và định vị trí đầu nhân vật. Bộ
lọc không gian - thời gian (spatio-temporal) theo dõi và nhấn mạnh các vị trí ảnh không
tuyến tính mà cường độ thay đổi theo thời gian, do đó người chuyển động sẽ hiện lên
trên ảnh đã được lọc.
Hình 3.11 Hệ thống dò tìm và định vị mặt người
Sau khi lấy ngưỡng ảnh đã được lọc để tạo ra ảnh chuyển động dạng nhị phân,
chúng ta sẽ phân tích chuyển động khối theo thời gian để xác định chuyển động do con
người để từ đó xác định vị trí đầu người. Một số luật đơn giản được sử dụng, chẳng hạn
như “đầu người là khối nhỏ hơn nằm phía trên khối chính (thân người)” chuyển động
của đẩu người là chậm và liền kề nhau.
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
65
Chúng ta sẽ sử dụng kỹ thuật được mô tả ở trên để xây dựng hệ thống có thể dò
tìm và nhận dạng mặt người theo thời gian thực. Khi chương trình nhận dạng và dò tìm
chuyển động kiếm được phần đầu người, một bức ảnh con, trung tâm là phần đầu
người, sẽ được chuyển vào module nhận dạng. Dùng khoảng cách từ không gian mặt
người xác định, bức ảnh sẽ bị loại bỏ nếu không phải mặt người, nhận dạng xem gương
mặt có phải thuộc nhóm đã biết trước không, hoặc xác định đó là gương mặt chưa biết.
Quá trình nhận dạng bằng hệ thống này sẽ mất từ 2 đến 3 giây.
3.4 Nhận xét
PCA là phương pháp dùng để xây dựng đặc trưng khuôn mặt, nó là một nền
tảng để phát triển những thuật toán khác. Thực tế có rất nhiều tác giả áp dụng PCA, kết
hợp với những phương pháp như mạng neural, xác suất thống kê để xây dựng những
thuật toán có độ chính xác cao.
3.4.1 Ưu điểm của phương pháp PCA
• Dễ cài đặt, nếu ta xét bài toán tìm khuôn mặt giống nhau thì chỉ cần áp dụng
hoàn toàn theo lý thuyết là đã có độ chính xác khá cao, nếu áp dụng cho bài
toán tìm vị trí khuôn mặt thì cần phải có một thuật toán nữa để sử dụng face
map thu được theo lý thuyết.
• Tìm được các đặc tính tiêu biểu của đối tượng cần nhận dạng mà không cần
phải xác định các thành phần và mối quan hệ giữa các thành phần đó.
• Thuật toán có thể thực hiện tốt với các ảnh có độ phân giải cao, do PCA sẽ
thu gọn ảnh thành một ảnh có kích thước nhỏ hơn.
• PCA có thể kết hợp với các phương pháp khác như mạng Noron, Support
Vector Machine … để mang lại hiệu quả nhận dạng cao hơn.
3.4.2 Nhược điểm của PCA
• Các mẫu khuôn mặt hoàn toàn phụ thuộc vào tập huấn luyện, có nghĩa là các
khuôn mặt trong ảnh kiểm tra phải giống với các ảnh huấn luyện về kích
thước, tư thế, độ sáng. Thực tế trong tập huấn luyện thường gồm nhiều nhóm
hình, mỗi nhóm là hình của một người với tư thế, độ sáng khác nhau.
Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
66
• PCA phân loại theo chiều phân bố lớn nhất của tập vector. Tuy nhiên, chiều
phân bố lớn nhất không phải lúc nào cũng mang lại hiệu quả tốt nhất cho bài
toán nhận dạng. Đây là nhược điểm cơ bản của PCA.
• PCA rất nhạy với nhiễu.
Có rất nhiều thuật toán nhận dạng mặt người dựa trên những chi tiết của khuôn
mặt như đôi mắt, lông mày, cấu trúc của khuôn mặt, hay màu da… Khác hoàn toàn với
những thuật toán trên, PCA nhận dạng dựa trên những nét tổng thể của khuôn mặt. Còn
hơn một thuật toán, PCA đã cung cấp một cơ sở rất rõ ràng cho việc mô tả đặc trưng
của khuôn mặt, để từ đó có thể phát triển những thuật toán nhận dạng khác. Vì vậy có
thể PCA không là thuật toán tốt nhất, nhưng là thuật toán phổ biến nhất được áp dụng
trong bài toán nhận diện mặt người.
Chương 4: Chương trình mô phỏng 67
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
Chương 4
CHƯƠNG TRÌNH
MÔ PHỎNG
4.1 Chương trình mô phỏng
4.2 Nhận xét kết quả đạt được
Chương 4: Chương trình mô phỏng 68
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
Chương 4
CHƯƠNG TRÌNH MÔ PHỎNG
4.1 Chương trình mô phỏng
4.1.1 Cơ sở dữ liệu ảnh
Cơ sở dữ liệu ảnh bao gồm có 3 tập ảnh: ảnh face, ảnh nface, ảnh mẫu. Trong đó
2 tập là ảnh face và ảnh nface được dùng trong chương trình dò tìm và cắt ảnh mặt
người, còn chương trình nhận dạng mặt người dùng 2 tập ảnh là ảnh face và ảnh mẫu.
4.1.1.1 Tập ảnh huấn luyện
a) Ảnh face
Tập ảnh face bao gồm những tập ảnh khuôn mặt người, dùng trong thuật toán
PCA, để xác định các thành phần đặc trưng của khuôn mặt người, dùng để dò tìm, xác
định khuôn mặt người và nhận dạng mặt người.
Hình 4.1 Tập ảnh Face
Chương 4: Chương trình mô phỏng 69
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
b) Ảnh nface
Tập ảnh nface bao gồm những tập ảnh không phải là khuôn mặt người, dùng
trong thuật toán PCA, để xác định các thành phần đặc trưng không phải là của khuôn
mặt người, đó là không gian ảnh môi trường bên ngoài: cây cối, không gian ngoại
cảnh, … giúp cho việc dò tìm khuôn mặt người chính xác hơn, bằng cách loại bỏ các
điểm đánh dấu không phải khuôn mặt người, từ đó chúng ta sẽ đễ dàng dò tìm khuôn
mặt người trong một bức ảnh cần xác định.
Hình 4.2 Tập ảnh nface
4.1.1.2 Tập ảnh mẫu
Tập ảnh mẫu bao gồm các ảnh đưa vào tập ảnh cơ sở dữ liệu, khi ta dò tìm và
cắt ảnh khuôn mặt, từ đó sẽ xác định các thành phần đặc trưng, dò tìm trong ảnh cơ sở
dữ liệu, xác định tọa độ khoảng cách sai lệch giữa các thông số điểm ảnh, tìm ra những
ảnh tương đồng, gần với ảnh được xác định, từ đó truy xuất ra thông tin dữ liệu của ảnh
cần nhận dạng.
Chương 4: Chương trình mô phỏng 70
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
Hình 4.3 Tập ảnh mẫu
4.1.2 Các bước thực hiện chương trình
Khi chạy chương trình “Dò tìm và cắt ảnh mặt người dùng PCA” ta thao tác
theo trình tự các bước sau:
Bước 1: Đưa ảnh vào để xử lý
Ở bước này chúng ta có hai cách để chọn ảnh nguồn để xử lý là từ một nguồn có
sẵn và từ một nguồn đưa ảnh trực tiếp ở ngoài vào thông qua webcam.
- Cách thứ nhất: Đưa ảnh vào từ một nguồn có sẵn. Ta chọn nút chọn ảnh để
tìm nguồn ảnh gốc đưa ảnh vào xử lý cụ thể là tập ảnh trong thư mục ảnh test. Sau khi
chọn ảnh cần kiểm tra ta chọn nút open để chọn ảnh đã chọn.
- Cách thứ hai: Đưa ảnh trực tiếp thu từ ngoài vào nhờ thiết bị thu hình đó là
webcam. Ta nhấn nút camera để mở chương trình chạy webcam, sau khi đã điều chỉnh
khoảng cách và kích thước ảnh đầu vào hợp lý ta nhấn vào nút chụp ảnh để đưa ảnh
chụp vào xử lý các công đoạn tiếp theo.
Bước 2: Dò tìm ảnh mặt người.
Để thực hiện bước này ta cần điều kiện là phải có ảnh kiểm tra mới chạy được
chương trình dò tìm ảnh mặt người. Khi đã có đủ điều kiện ta nhấn nút nhận dạng thì
chương trình sẽ bắt đầu thực hiện: lấy ảnh chọn làm ảnh ban đầu đưa vào chương trình
Chương 4: Chương trình mô phỏng 71
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
nhận dạng ảnh tìm và xác định vị trí của những khuôn mặt có trong tấm ảnh. Đây là
đoạn chương trình chính của bài toán, đoạn chương trình sử dụng thuật toán PCA và là
giai đoạn chiếm thời gian nhiều nhất của bài toán “Dò tìm và cắt ảnh mặt người dùng
PCA”.
Bước 3: Cắt ảnh mặt người.
Là quá trình tách những khuôn mặt có trong tấm ảnh đầu vào chia thành những
tấm ảnh nhỏ riêng lẻ để giúp ta có thể lưu lại từng khuôn mặt một cách dể dàng hay để
dùng những tấm ảnh đó vào những công việc khác một cách nhanh chóng và chính xác
hơn.
Bước 4: Lưu ảnh khuôn mặt.
Sau tất cả các quá trình thực hiện phương pháp tìm và tách ảnh mặt người thì
cuối cùng kết quả cũng đạt được dù không chuẩn xác nhưng mục đích cuối cùng là ta
phải lưu trữ lại những gì mà ta đã làm được, khi ta nhấn vào nút save thì sẽ hiện lên thư
mục để lưu ảnh và thực hiện thao tác lưu ảnh.
Bước 5: Nhận dạng khuôn mặt.
Quá trình nhận dạng khuôn mặt cũng được thực hiện dựa vào thuật toán PCA,
sau khi cắt ảnh mặt người, từ ảnh đó ta đặt làm ảnh test, ảnh test này sẽ được xử lý
bằng cách xác định khoảng cách của ảnh test đến ảnh cơ sở dữ liệu. Nếu ảnh test có
nằm trong cơ sở dữ liệu ảnh, thì ảnh test sẽ được nhận dạng bằng một bức ảnh khác
nằm trong cơ sở dữ liệu ảnh, còn nếu ảnh test không nằm trong cơ sở dữ liệu ảnh, thì sẽ
không nhận dạng được.
Chương 4: Chương trình mô phỏng 72
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
4.1.3 Lưu đồ giải thuật
4.1.3.1 Lưu đồ giải thuật chính
Hình 4.4 Lưu đồ giải thuật chính
4.1.3.2 Lưu đồ giải thuật chi tiết
a) Lưu đồ giải thuật chọn ảnh
Chọn ảnh có hai cách:
• Cách 1: Chọn ảnh tĩnh (ảnh có sẵn).
• Cách 2: Chọn ảnh động (nhận ảnh từ webcam).
Chọn ảnh
Chương trình dò tìm và cắt ảnh mặt người
Chương trình nhận dạng ảnh mặt người
Bắt đầu
Kết thúc
Chương 4: Chương trình mô phỏng 73
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
Hình 4.5 Lưu đồ giải thuật chọn ảnh
Chọn ảnh động
Bắt đầu
Chạy chương trình mở webcam
Chọn và chụp ảnh
Chọn thư mục chứa ảnh cần kiểm tra
Chọn ảnh
Hiển thị ảnh đã chọn
Kết thúc
Chọn ảnh tĩnh
Chương 4: Chương trình mô phỏng 74
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
b) Lưu đồ giải thuật chương trình dò tìm ảnh mặt người
Hình 4.6 Lưu đồ giải thuật chương trình dò tìm ảnh mặt người
S
Bắt đầu
Kết thúc
Đánh dấu
Tập ảnh huấn luyện Face và Nface Ảnh dò tìm
Dò tìm ảnh mặt người bằng PCA
Mặt người
Đóng khung
Tách mặt
Lưu
Đ
Không đánh dấu
Không đóng khung
Chương 4: Chương trình mô phỏng 75
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
c) Lưu đồ giải thuật chương trình nhận dạng
Hình 4.7 Lưu đồ giải thuật chương trình nhận dạng
Thuật toán nhận dạng PCA
Ảnh mẫu để so sánh nhận dạng
Ảnh có trong tập dữ liệu
Truy xuất thông tin ảnh nhận dạng
Hiển thị thông tin và ảnh nhận dạng
Chọn ảnh nhận dạng
Dò tìm thông tin từ file Excel “hoso1.xls”
Có
Không có
Bắt đầu
Kết thúc
Chương 4: Chương trình mô phỏng 76
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
d) Lưu đồ thuật toán PCA
Hình 4.8 Lưu đồ giải thuật PCA
Thuật toán PCA
Tạo cơ sở dữ liệu
Chuyển ảnh thành vector
Tạo ma trận ảnh
Tính giá trị ảnh trung bình
Tính các giá trị Eigenface
Xác định Eigenface của ảnh chọn ban đầu
Bắt đầu
Kết thúc
Chương 4: Chương trình mô phỏng 77
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
4.1.4 Kết quả mô phỏng
a) Giao diện của chương trình
Hình 4.9 Giao diện chính
Hình 4.10 Giao diện chương trình 1 (ảnh tĩnh)
Chương 4: Chương trình mô phỏng 78
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
Hình 4.11 Giao diện chương trình 2 (ảnh động)
b) Giao diện của kết quả dò tìm và nhận dạng
Ảnh 1 khuôn mặt:
Hình 4.12 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 1 khuôn mặt
Chương 4: Chương trình mô phỏng 79
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
Hình 4.13 Giao diện kết quả chương trình 2 (ảnh động)với 1 khuôn mặt
Ảnh 2 khuôn mặt:
Hình 4.14 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 2 khuôn mặt
Ảnh 4 khuôn mặt:
Chương 4: Chương trình mô phỏng 80
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
Hình 4.15 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 4 khuôn mặt nữ
Hình 4.16 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 4 khuôn mặt nam
4.1.5 Tốc độ thực hiện
Tốc độ thực hiện chương trình thể hiện thời gian mà chương trình tính toán
trong quá trình xử lý, tùy theo giá trị kích thước ảnh đưa vào lớn hay nhỏ mà tốc độ
Chương 4: Chương trình mô phỏng 81
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
thực hiện nhanh hay chậm. Nếu ảnh đầu vào có kích thước nhỏ, quá trình xử lý của
chương trình sẽ thực hiện nhanh chóng, nếu ảnh đầu vào có kích thước lớn, quá trình
xử lý của chương trình sẽ thực hiện chậm, mặc khác tốc độ thực hiện cũng tùy thuộc
vào tốc độ xử lý của máy tính, vì vậy, yêu cầu cần có một cấu hình thích hợp để thực
hiện chương trình một cách nhanh chóng, tạo điều kiện thuận lợi cho việc dò tìm và
nhận dạng khuôn mặt.
Tốc độ thực hiện là quá trình đo đạc thời gian xử lý chương trình, đó là chương
trình dò tìm ảnh mặt người và chương trình nhận dạng ảnh mặt người.
4.2 Nhận xét kết quả đạt được
Qua quá trình tìm hiểu và nghiên cứu, chúng em đã xây dựng được một cái nhìn
khái quát về bài toán nhận dạng, đặc biệt là nhận dạng mặt người. Đồng thời, nắm bắt
được một số vấn đề về xử lý ảnh: các dạng ảnh, tính chất ảnh, không gian, tọa độ ảnh,
ma trận ảnh,… và vận dụng nó kết hợp với các công cụ xử lý ảnh trong Matlab (Image
Processing Toolbox).
Từ kết quả thu được, ta nhận thấy: ta có thể dò tìm được 1 khuôn mặt, 2 khuôn
mặt, 3 khuôn mặt và tối đa là 4 khuôn mặt trong 1 bức ảnh, nguyên nhân do sự hạn
chế về kích thước của khuôn mặt và bức ảnh, và những khuôn mặt này có thể có hoặc
không có trong tập ảnh huấn luyện, đây chính là ưu điểm của bài toán. Tuy chưa có sự
chuẩn xác trong quá trình dò tìm và nhận dạng mặt người, nhưng bài toán phần nào đã
được giải quyết. Trong quá trình thao tác, có thể có những ưu và khuyết điểm, nhưng
bài luận văn này của chúng em cũng đã hoàn thành tương đối có thể chấp nhận được,
sau đây là một số ưu điểm và khuyết điểm của bài toán cũng như trong quá trình thực
hiện luận văn.
Ưu điểm
- Ta có thể nhận dạng được một bức ảnh với 1 khuôn mặt, 2 khuôn mặt, 3 khuôn mặt
và 4 khuôn mặt.
- Khuôn mặt người được dò tìm và cắt ra rất rõ nét, có thể nhận dạng được.
Chương 4: Chương trình mô phỏng 82
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
- Đối với thuật toán PCA, đây là một thuật toán được sử dụng trong rất nhiều lĩnh vực,
đối với lĩnh vực chuyên ngành điện tử, thuật toán được vận dụng trong Matlab với
nhiều công cụ xử lý, tạo điều kiện thuận lợi cho việc thực hiện đề tài.
Khuyết điểm
- Nội dung của bài toán là dò tìm và nhận dạng mặt người, nên sử dụng rất nhiều khuôn
mặt của nhiều đối tượng với các trạng thái khác nhau, nên khuyết điểm của bài toán
này là cần một số lượng lớn nguồn tài nguyên của khuôn mặt của nhiều đối tượng, từ
đó mới có thể tạo ra được một khối lượng cơ sở dữ liệu phong phú. Cho nên có những
trường hợp chúng ta sẽ không dò tìm được một vài khuôn mặt trong bức ảnh, vì không
tìm được những nét đặc trưng cơ bản của khuôn mặt.
- Chương trình được thực hiện nhờ vào hoạt động của máy tính, nên cần có một cấu
hình cần thiết để xử lý và tính toán, từ đó mới có thể áp dụng trong công nghệ hiện đại,
điều này ảnh hưởng đến tốc độ thực hiện của chương trình. Ví dụ như nhận dạng khuôn
mặt người qua một thiết bị quan sát, nếu tốc độ xử lý nhanh ta có thể có một kết quả
mỹ mãn và hài lòng hơn.
- Về nội dung của bài toán, việc chọn lọc đưa ảnh vào để xử lý, thì có hai cách: sử
dụng một ảnh tĩnh có sẵn và sử dụng nguồn dữ liệu đưa vào từ webcam. Đối với
webcam, hay một thiết bị thu hình nào, thì điều đầu tiên là cần phải có độ phân giải tốt
để ảnh đưa vào rõ nét, như vậy khả năng xử lý sẽ cao hơn và chính xác hơn.
- Đồng thời khó khăn về cách xác định khoảng cách và tọa độ khuôn mặt người trong
quá trình đưa ảnh vào xử lý, cụ thể là kích thước ảnh mặt người so với kích thước của
ảnh huấn luyện (quá lớn hoặc quá bé). Vì phương pháp nhận dạng PCA là phương
pháp dò quét ảnh nhận dạng theo khối cho nên vấn đề khoảng cách và kích thước của
khuôn mặt ảnh đưa vào so với kích thước của tập ảnh huấn luyện (tập ảnh face) là rất
quan trọng. Cho nên thuật toán thường gặp khó khăn nhiều về vấn đề này.
- Khó khăn trong việc xử lý dò tìm và nhận dạng, điều kiện ảnh đưa vào xử lý phải phù
hợp: độ sáng, góc lệch, cảm xúc, biến dạng,… Chính vì điều này, đôi khi có những
khuôn mặt mà không đủ điều kiện về ánh sáng (ảnh bị tối) hoặc khuôn mặt bị sai khác
quá nhiều so với ảnh dữ liệu (méo dạng, khuôn mặt nhăn nhó, nhiều cảm xúc,…)
Chương 4: Chương trình mô phỏng 83
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
Như vậy, dựa vào xác suất thống kê trong quá trình làm việc, có một vài trường
ảnh không nhận dạng được, với nhiều lí do khách quan.
Một số trường hợp bị lỗi, không dò tìm được khuôn mặt, do nhiều nguyên nhân
khác nhau:
- Ảnh có nhiều điểm đặc trưng khác: râu quai nón…
Hình 4.17 Ảnh lỗi do quá nhiều chi tiết không phân biệt được
Chương 4: Chương trình mô phỏng 84
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
- Ảnh không phải là ảnh ảnh thật: tranh vẽ…, làm cho độ sắc nét của ảnh không
cao.
Hình 4.18 Lỗi do ảnh không được sắc nét
Chương 5: Kết luận
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
85
Chương 5
KẾT LUẬN
5.1 Kết luận
Trong quá trình thực hiện đồ án tốt nghiệp gặp rất nhiều khó khăn và thử thách,
đòi hỏi sự cố gắng và tập trung cao độ trong quá trình thực hiện, nhưng chúng em cũng
đã cố gắng hoàn thành đúng tiến độ làm việc theo yêu cầu đề ra, tuy nhiên bài luận này
cũng chỉ đạt được một số kết quả tương đối, và còn nhiều sai sót trong vấn đề dò tìm
cũng như nhận dạng mặt người.
Kết quả đạt được của chúng em là đã dò tìm và nhận dạng được một số ảnh đã
có trong cơ sở dữ liệu và một số ảnh nằm ngoài cơ sở dữ liệu, đó là những bức ảnh có
độ sắc nét và tương phản cao, còn những ảnh không có độ sắc nét cao thì vẫn chưa xử
lý được, đó chính là khuyết điểm của đề tài cũng như thuật toán PCA. Đối với ảnh
động, việc xử lý ảnh đưa vào đã gây ra rất nhiều khó khăn, nó không chỉ đòi hỏi sự sắc
nét của bức ảnh, mà còn yêu cầu về khoảng cách…
5.2 Hướng phát triển đề tài
- Nhận diện mặt người qua tập dữ liệu có sẵn từ camera.
- Nhận diện danh tính của người phạm tội qua ảnh chụp.
- Có thể kết hợp với nhiều thuật toán khác như: ICA, Neural,… để xử lý một cách
chính xác hơn.
- Dò tìm và nhận dạng đối tượng vi phạm kỷ luật từ xa qua một thiết bị quan sát.
- Bảo mật hệ thống bằng cách nhận dạng khuôn mặt khi một hay nhiều đối tượng muốn
ra vào một công ty, xí nghiệp, hay một cơ quan nào đó.
- Quản lý thời gian làm việc của các nhân viên của một xí nghiệp mà chỉ cần một
camera quan sát.
Tài Liệu Tham Khảo
[1]. Ngô Hoàng Khắc Tiến, Trần Xuân Bách, Đồ án tốt nghiệp Dò tìm ảnh mặt
người dùng PCA, Khoa Công nghệ điện tử, trường Đại học Công Nghiệp TP HCM,
2009.
[2]. Lương Mạnh Bá, Nguyễn Thanh Thủy, Nhập Môn Xử lý ảnh số, Nxb Khoa học
và Kỹ thuật, 2002.
[3]. Võ Đức Khánh, Hoàng Văn Kiếm. Giáo trình xử lý ảnh số, Nhà xuất bản Đại
học Quốc gia Thành phố Hồ Chi Minh, 2003.
[4]. Phạm Thế Bảo, Tổng quan các phương pháp xác định khuôn mặt người, Tạp
chí bưu chính viễn thông.
[5]. Ngô Quốc Tạo, Ngô Phương Đông, Nguyễn Thanh Hòa, Phạm Việt Bình
(2003), Báo cáo “Nhận dạng mặt người trong môi trường độ sáng không đồng
nhất”, Hội thảo Công nghệ thông tin quốc gia lần thứ VIII, Thái Nguyên, 29-
31/8/2003.
[6]. Nguyễn Hoài Sơn, Giáo trình Matlab căn bản, Khoa Xây dựng và Cơ học ứng
dụng, trường ĐHSPKT.
[7]. Burce A. Draper, Kyungim Baek, Marian Stewart Bartlett, J. Ross Beveridge,
“Recognizing Faces with PCA and ICA”.
[8]. Stan Z. Li , Anil K. Jain, “Handbook of Face Recognition”, 2006.
[9]. IEEE Computer Society, “Automatic face and gesture recognition”, 2004
[10]. Các Wedsite:
http://www.mathworks.com/matlabcentral/fileexchange/?term=Variable
http://www.picvietnam.com/forum//showthread.php?t=387
www. diendandientu. com
www. dientuvienthong. net
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
PHỤ LỤC ************ Chương trình chính*************** function varargout = luanvantotnghiep(varargin) % LUANVANTOTNGHIEP M-file for luanvantotnghiep.fig gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @luanvantotnghiep_OpeningFcn, ... 'gui_OutputFcn', @luanvantotnghiep_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin1) gui_State.gui_Callback = str2func(varargin1); end if nargout [varargout1:nargout] = gui_mainfcn(gui_State, varargin:); else gui_mainfcn(gui_State, varargin:); end % End initialization code - DO NOT EDIT % Executes just before luanvantotnghiep is made visible. function luanvantotnghiep_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; % Update handles structure guidata(hObject, handles); function varargout = luanvantotnghiep_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output; function THOAT_Callback(hObject, eventdata, handles) close1; % --- Executes on button press in pushbutton6. function pushbutton6_Callback(hObject, eventdata, handles) chuongtrinh1; delete(handles.figure1); % --- Executes during object creation, after setting all properties. function axes1_CreateFcn(hObject, eventdata, handles) imshow('anhnen.jpg'); % --- Executes during object creation, after setting all properties. function axes3_CreateFcn(hObject, eventdata, handles) imshow('vo.jpg'); % --- Executes during object creation, after setting all properties. function sxes2_CreateFcn(hObject, eventdata, handles)
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
imshow('logo.bmp'); **************************************************** **************Chương trình cắt ảnh tĩnh********* function varargout = chuongtrinh1(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @chuongtrinh1_OpeningFcn, ... 'gui_OutputFcn', @chuongtrinh1_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin1) gui_State.gui_Callback = str2func(varargin1); end if nargout [varargout1:nargout] = gui_mainfcn(gui_State, varargin:); else gui_mainfcn(gui_State, varargin:); end % --- Executes just before chuongtrinh1 is made visible. function chuongtrinh1_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; % Update handles structure guidata(hObject, handles); % --- Outputs from this function are returned to the command line. function varargout = chuongtrinh1_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output; % --- Executes on button press in CHONANH. function CHONANH_Callback(hObject, eventdata, handles) xoaanh; chonanh; % --- Executes on button press in TACHMAT. function TACHMAT_Callback(hObject, eventdata, handles) axes(handles.axes4); imshow('anhluu/anh1.jpg'); axes(handles.axes5); imshow('anhluu/anh2.jpg'); axes(handles.axes6); imshow('anhluu/anh3.jpg'); axes(handles.axes7); imshow('anhluu/anh4.jpg'); % --- Executes on button press in Timmat. function Timmat_Callback(hObject, eventdata, handles) tic % tic là hàm đếm thời gian bắt đầu đếm thuchien; % gọi hàm thuchien.m axes(handles.axes2); imshow('anhluu/anh_kq.jpg'); %hiện ảnh kết quả set(handles.times,'string',toc); %kết thúc đếm thời gian và cho nó hiện
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
% --- Executes on button press in NHANDANG. function NHANDANG_Callback(hObject, eventdata, handles) tic nhandang; set(handles.times,'string',toc); % --- Executes on button press in save1. function save1_Callback(hObject, eventdata, handles) s=imread('anhluu/anh1.jpg'); save1; % --- Executes on button press in save2. function save2_Callback(hObject, eventdata, handles) s=imread('anhluu/anh2.jpg'); save1; % --- Executes on button press in save3. function save3_Callback(hObject, eventdata, handles) s=imread('anhluu/anh3.jpg'); save1; % --- Executes on button press in save4. function save4_Callback(hObject, eventdata, handles) s=imread('anhluu/anh4.jpg'); save1; % --- Executes on button press in chon1. function chon1_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) photo=imread('anhluu\anh1.jpg'); a = strcat('anhluu/anhtest.jpg'); imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in chon2. function chon2_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) photo=imread('anhluu\anh2.jpg'); a = strcat('anhluu/anhtest.jpg'); imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in chon3. function chon3_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) photo=imread('anhluu\anh3.jpg'); a = strcat('anhluu/anhtest.jpg');
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in chon4. function chon4_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) photo=imread('anhluu\anh4.jpg'); a = strcat('anhluu/anhtest.jpg'); imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in back. function back_Callback(hObject, eventdata, handles) xoaanh; luanvantotnghiep; delete(handles.figure1); % --- Executes on button press in close. function close_Callback(hObject, eventdata, handles) xoaanh; luanvantotnghiep; delete(handles.figure1); % --- Executes on button press in next. function next_Callback(hObject, eventdata, handles) xoaanh; chuongtrinh2; delete(handles.figure1); **************************************************** **********Chương trình cắt ảnh động**************** function varargout = chuongtrinh2(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @chuongtrinh2_OpeningFcn, ... 'gui_OutputFcn', @chuongtrinh2_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin1) gui_State.gui_Callback = str2func(varargin1); end if nargout [varargout1:nargout] = gui_mainfcn(gui_State, varargin:); else gui_mainfcn(gui_State, varargin:);
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
end % End initialization code - DO NOT EDIT % --- Executes just before chuongtrinh2 is made visible. function chuongtrinh2_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; % Update handles structure guidata(hObject, handles); % --- Outputs from this function are returned to the command line. function varargout = chuongtrinh2_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output; % --- Executes on button press in chupanh. function chupanh_Callback(hObject, eventdata, handles) xoaanh; global vid photo a photo = getsnapshot(vid); selection = questdlg(['Ban muon chup anh gan hay xa?'],... ['Chuong trinh chup anh!'],... 'Gan','Xa','Yes'); if strcmp(selection,'Gan') axes(handles.axes1); photo=imresize(photo,0.5); imshow(photo); a = strcat('anhluu/anh_goc.jpg'); imwrite(photo,a); elseif strcmp(selection,'Xa') axes(handles.axes1); imshow(photo); a = strcat('anhluu/anh_goc.jpg'); imwrite(photo,a); end % --- Executes on button press in CAMERA. function CAMERA_Callback(hObject, eventdata, handles) global vid info = imaqhwinfo; info = imaqhwinfo('winvideo'); info.DeviceInfo; info.DeviceInfo.SupportedFormats; vid = videoinput('winvideo',1,'YUY2_640x480'); set(vid,'ReturnedColorSpace','RGB'); preview(vid); % --- Executes on button press in TACHMAT. function TACHMAT_Callback(hObject, eventdata, handles) axes(handles.axes4); imshow('anhluu/anh1.jpg'); axes(handles.axes5); imshow('anhluu/anh2.jpg'); axes(handles.axes6); imshow('anhluu/anh3.jpg'); axes(handles.axes7); imshow('anhluu/anh4.jpg'); % --- Executes on button press in Timmat.
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
function Timmat_Callback(hObject, eventdata, handles) tic thuchien; axes(handles.axes2); imshow('anhluu/anh_kq.jpg'); set(handles.times,'string',toc); % --- Executes on button press in NHANDANG. function NHANDANG_Callback(hObject, eventdata, handles) tic nhandang; set(handles.times,'string',toc); % --- Executes on button press in save1. function save1_Callback(hObject, eventdata, handles) s=imread('anhluu/anh1.jpg'); save1; %thực hiện chương trình để lưu ảnh chọn % --- Executes on button press in save2. function save2_Callback(hObject, eventdata, handles) s=imread('anhluu/anh2.jpg'); save1; %thực hiện chương trình để lưu ảnh chọn % --- Executes on button press in save3. function save3_Callback(hObject, eventdata, handles) s=imread('anhluu/anh3.jpg'); save1; %thực hiện chương trình để lưu ảnh chọn % --- Executes on button press in save4. function save4_Callback(hObject, eventdata, handles) s=imread('anhluu/anh4.jpg'); save1; %thực hiện chương trình để lưu ảnh chọn % --- Executes on button press in chon1. function chon1_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) % nếu đánh dấu nó mang “Max” photo=imread('anhluu\anh1.jpg'); % chọn ảnh thực hiện cho chương trình nhận dạng a = strcat('anhluu/anhtest.jpg'); % con nếu không thì thôi không là gì hết imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in chon2. function chon2_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) % nếu đánh dấu nó mang “Max” photo=imread('anhluu\anh2.jpg'); % chọn ảnh thực hiện cho chương trình nhận dạng a = strcat('anhluu/anhtest.jpg'); % còn nếu không thì thôi không là gì hết imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in chon3. function chon3_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) % nếu đánh dấu nó mang “Max”
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
photo=imread('anhluu\anh3.jpg'); % chọn ảnh thực hiện cho chương trình nhận dạng a = strcat('anhluu/anhtest.jpg'); % con nếu không thì thôi không là gì hết imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in chon4. function chon4_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) % nếu đánh dấu nó mang “Max” photo=imread('anhluu\anh4.jpg'); % chọn ảnh thực hiện cho chương trình nhận dạng a = strcat('anhluu/anhtest.jpg'); % còn nếu không thì thôi không là gì hết imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in back. function back_Callback(hObject, eventdata, handles) xoaanh; % thực hiện xóa những tấm ảnh cũ trước khi thực chuongtrinh1; %hiện chương trình xử lý ảnh mới delete(handles.figure1); % --- Executes on button press in close. function close_Callback(hObject, eventdata, handles) xoaanh; % thực hiện xóa những tấm ảnh cũ trước khi thực luanvantotnghiep; %hiện chương trình xử lý ảnh mới delete(handles.figure1); ********* Đoạn code thực hiện chương trình dò tìm và cắt ảnh************* face='face'; nface='nface'; %********************** TAO MATRAN CSDL************ [T1,T2] = taoCSDL(face,nface); %******************* TAO EF ************ [m1,m2,E1,E2] = taoEF(T1,T2); %******************LOAD ANH DE XU LY********** im1=imread('anhluu/anh_goc.jpg'); im= imresize(im1,0.2); % nén ảnh lại chỉ còn 20% im =rgb2gray(im); % chuyển về ảnh xám chỉ mang giá trị 0 và 1 %***************** XAC DINH ************** [dong cot] = size(im); anh1=im*255; % nhận toàn bộ ảnh với gí trị 255 anh2=im*255; for i=1:1:dong for j=1:1:cot tam=subim(im,i,j); tam1=tam-m1; % m1 là giá trị trung bình của ảnh face tam2=tam-m2; % m2 là giá trị trung bình của ảnh nace sochieu1=size(E1,2); sochieu2=size(E2,2);
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
hinhchieu1=tam*0; hinhchieu2=hinhchieu1; for k=1:sochieu1 toado=(E1(:,k))'*tam1; hinhchieu1=hinhchieu1+toado*E1(:,k); end for k=1:sochieu2 toado=(E2(:,k))'*tam2; hinhchieu2=hinhchieu2+toado*E2(:,k); end kc1=norm(tam1-hinhchieu1)/20; kc2=norm(tam2-hinhchieu2)/20; anh1(i,j)=kc1; anh2(i,j)=kc2; end end b=strcat('anhluu/anh_face.jpg'); imwrite(anh1,b); %******************* DANH DAU ANH *********** %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ xacdinh(im1,im1,anh1,anh2); anh1=im1; anh=im1; face=anh1; nface=anh2; ******* Đoạn code tạo cơ sở dữ liệu cho chương trình dò tìm ảnh mặt********** function [T1,T2] = taoCSDL(face,nface) csdl1 = dir(face); csdl2=dir(nface); soanh1 = 0; soanh2=0; % đếm tất cả các file ảnh có trong thư mục face và nface for i = 1:size(csdl1,1) if not(strcmp(csdl1(i).name,'.')|strcmp(csdl1(i).name,'..')|strcmp(csdl1(i).name,'Thumbs.db')) soanh1 = soanh1 + 1; end end for i = 1:size(csdl2,1) if not(strcmp(csdl2(i).name,'.')|strcmp(csdl2(i).name,'..')|strcmp(csdl2(i).name,'Thumbs.db')) soanh2 = soanh2 + 1 ; end end T1 = []; % Tạo ma trận ảnh T1 chứa tập ảnh face for i = 1 : soanh1 str = int2str(i); % hàm strcat nhằm liên kết các giá trị thành chuỗi str = strcat('\',str,'.png'); % tiện cho quá trình truy xuất hay lưu lại giá trị mới str = strcat(face,str); img = imread(str); try img = rgb2gray(img); % chuyển tất cả về ảnh xám 0 1 catch
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
end [dong cot] = size(img); % mỗi tấm ảnh huấn luyện có kích thước 18*27 tam = reshape(img',dong*cot,1); % biến 1 ảnh thành 1 vecto có 1cột và 18*27 hàng T1 = [T1 tam]; % tăng dần kích thước ma trận T1 End
% kết thúc ma trận T1 có kích thước 18*27x P với P là số cột của ma trận củng chính là số ảnh trong thư mục ảnh %huấn luyện face 18*27=486 chính là số dòng của ma trận ảnh T1 và tương tự ma trận T2 cũng vậy
T2 = []; % Bước này làm tương tự như tạo ma trận T1 for i = 1 : soanh2 % nhưng đối với ma trận ảnh nface str = int2str(i); str = strcat('\',str,'.png'); str = strcat(nface,str); img = imread(str); try img = rgb2gray(img); catch end [dong cot] = size(img); %dong 27 cot 18 tam = reshape(img',dong*cot,1); T2 = [T2 tam]; end *********Đoạn code tạo enginface ************** function [m1,m2,E1,E2] = taoEF(T1,T2) m1 = mean(T1,2); % Tính toán giá trị ảnh trung bình soanh1 = size(T1,2); m2 = mean(T2,2); soanh2=size(T2,2); %Tính độ lệch giửa các bước ảnh huấn luyện với giá trị ảnh trung bình sau đó trừ đi giá trị trung bình của ảnh trung bình và lưu các sai khác đó lại làm một ma trận ảnh mới ma trận đó là ma trận vecto riêng của ảnh huấn luyện, nhân ma trận vector riêng với ma trận nghịch đảo của nó và dùng hàm “eig” để tìm các vector riêng cho tập ảnh huấn luyện A1 = []; for i = 1 : soanh1 temp = double(T1(:,i)) - m1; % T(:,i): vector cột thứ i chính là một bức ảnh A1 = [A1 temp]; end A2 = []; for i = 1 : soanh2 temp = double(T2(:,i)) - m2; A2 = [A2 temp]; end L1 = A1'*A1; [V1 D1] = eig(L1); %tìm vector riêng và trị riêng L2 = A2'*A2; [V2 D2] = eig(L2); %V chứa ma trận những vecto riêng, còn D chứa những trị riêng của các vector riêng đó, vector riêng V(:,i) ứng với trị riêng là D(i,i) D=diag(D1); D=sort(D); % sắp sếp theo chiều tăng dần s=size(D); s=s(1); D=D(s-20); % chỉ giữ lại 20 trị riêng lớn nhất LeigV1 = []; % và 20 vector riêng lớn nhất của tập ảnh huấn luyện for i = 1 : size(V1,2) if( D1(i,i)>D ) LeigV1 = [LeigV1 V1(:,i)]; % tạo một ma trận mới chỉ gồm 20 vecto riêng End %tại các vị trí của chính nó còn các vị trí khác
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
End %đều cho giá trị bằng 0 D=diag(D2); D=sort(D); s=size(D);s=s(1); D=D(s-30); LeigV2 = []; for i = 1 : size(V2,2) if( D2(i,i)>D ) LeigV2 = [LeigV2 V2(:,i)]; end end E1 = A1 * LeigV1; E2 = A2 * LeigV2; sovector=size(E1,2); for i=1:sovector dodai=norm(E1(:,i)); E1(:,i)=E1(:,i)/dodai; end sovector=size(E2,2); % sovector chính là số cột của ma trận for i=1:sovector dodai=norm(E2(:,i)); % “norm” la tính giá trị bình phương trung bình E2(:,i)=E2(:,i)/dodai; End ****** doan code xac dinh va cat anh khuon mat******** function xacdinh(anh1,anh,face,nface) [dong,cot]=size(face); % vì phương pháp PCA là phương pháp xử lý ảnh theo khối for i=15:1:dong-13; % do vậy khi xử lý ảnh ta thường cắt ảnh lớn ra thành từng for j=8:1:cot-8; % tấm ảnh con để xử lý mà tấm ảnh xử lý phải có kích thước s1=0.001; % bằng kích thước tấm ảnh trong tập ảnh huấn luyện s2=0.001; % do vậy khi xử lý ta phải tính giá trị từ tâm của tấm ảnh for i1=i-13:i+13 % để quét cho nên khi truy xuất ra hình Eigenface thường for j1=j-7:j+7 % mất đi các đường viền xung quanh là vậy if abs(i1-i)<3 && abs(j1-j)<2 s1=s1+double(face(i1,j1)); else s2=s2+double(face(i1,j1)); end end end if s2/s1>21.8 && (nface(i,j)+nface(i-1,j)+nface(i+1,j))>89 && face(i,j)<31 && face(i-1,j)<31 && face(i+1,j)<31 && face(i-2,j)<31 && face(i+2,j)<31 kq(i,j)=255; % gán tại điểm ảnh phù hợp với các thông số else % của khuôn mặt là 255 và các vị trí khác kq(i,j)=0; % mang giá trị bằng 0 end end end %----------------------------- d=strcat('anhluu/anh_danhdau.jpg'); imwrite(kq,d); I=kq; anhkq=anh; anhkq1=anh1; [d,c]=size(I); % d là số dòng còn c là số cột của ma trận ảnh I i1=1; i2=1; i3=1; i4=1; j1=1; j2=1; j3=1; j4=1; % khi tính toán ở hàm này thì i là cột và j là dòng if d>50
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
d1=d*2/3; else d1=d-5; end for i=1:c-5 % trong thuật toán này ta dùng vòng lặp for để for j=1:d1 % tìm giá trị tại đó là 255 sau đó lưu nó lại if I(j,i)>200 && i>10 % để tiện bề cho tính toán tách mặt sau này i1=i; % vòng lặp for có một khuyết điểm là nó j1=j; % chỉ dừng lại tại điểm cuối cho nên vấn đề end % tìm kiếm được nhiều khuôn mặt gặp nhiều end % khó khăn vòng lệnh lặp lại nhiều lẩn end % tốn kém thời gian khi chạy chương trình if i1-30>0 for i=1:i1-30 for j=1:d*2/3 if I(j,i)==255 && i>10 i2=i; j2=j; end end end end if i2-30>0 for i=1:i2-30 for j=1:d/2 if I(j,i)==255 && i>10 i3=i; j3=j; end end end end if i3-30>0 for i=1:i3-20 for j=1:d/2 if I(j,i)==255 && i>10 i4=i; j4=j; end end end end [d,c]=size(anhkq); if j1>1 &&i1>1 [j12,i12]=do(I,j1,i1); % gọi đến chương trình dò tìm tâm ảnh khuôn mặt i1=i12-16; j1=j12-20; if i1<1 % điều kiện này nhằm tránh lỗi khi cắt ảnh i1=1; % mà cắt ảnh lấn ra ngoài khung ảnh end if j1<1 j1=1; end i1=i1*5; j1=j1*5; i11=i1+149; j11=j1+199; if i11>c
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
i11=c; end if j11>d j11=d; end anh1=imcrop(anhkq1,[i1 j1 i11-i1 j11-j1]); a1=strcat('anhluu/anh1.jpg'); imwrite(anh1,a1); for c1=i1:i11 anhkq(j1,c1)=255; anhkq(j11,c1)=255; anhkq(j1-1,c1)=255; anhkq(j11-1,c1)=255; anhkq(j1-2,c1)=255; anhkq(j11-2,c1)=255; anhkq(j1-3,c1)=255; anhkq(j11-3,c1)=255; end for d1=j1:j11 anhkq(d1,i1)=255; anhkq(d1,i11)=255; anhkq(d1,i1-1)=255; anhkq(d1,i11-1)=255; anhkq(d1,i1-2)=255; anhkq(d1,i11-2)=255; anhkq(d1,i1-3)=255; anhkq(d1,i11-3)=255; end end if j2>1 &&i2>1 [j22,i22]=do(I,j2,i2); i2=i22-16; j2=j22-20; if i2<1 i2=1; end if j2<1 j2=1; end i2=i2*5; j2=j2*5; i21=i2+149; j21=j2+199; if i21>c i21=c; end if j21>d j21=d; end anh1=imcrop(anhkq1,[i2 j2 i21-i2 j21-j2]); a1=strcat('anhluu/anh2.jpg'); imwrite(anh1,a1); for c1=i2:i21 anhkq(j2,c1)=255; anhkq(j21,c1)=255; anhkq(j2-1,c1)=255; anhkq(j21-1,c1)=255; anhkq(j2-2,c1)=255; anhkq(j21-2,c1)=255; anhkq(j2-3,c1)=255; anhkq(j21-3,c1)=255; end for d1=j2:j21 anhkq(d1,i2)=255; anhkq(d1,i21)=255; anhkq(d1,i2-1)=255; anhkq(d1,i21-1)=255; anhkq(d1,i2-2)=255; anhkq(d1,i21-2)=255; anhkq(d1,i2-3)=255; anhkq(d1,i21-3)=255; end end if j3>1 &&i3>1 [j32,i32]=do(I,j3,i3); i3=i32-16; j3=j32-20; if i3<1 i3=1; end if j3<1 j3=1; end i3=i3*5; j3=j3*5; i31=i3+149; j31=j3+199; if i31>c i31=c; end if j31>d j31=d; end
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
anh1=imcrop(anhkq1,[i3 j3 i31-i3 j31-j3]); a1=strcat('anhluu/anh3.jpg'); imwrite(anh1,a1); for c1=i3:i31 anhkq(j3,c1)=255; anhkq(j31,c1)=255; anhkq(j3-1,c1)=255; anhkq(j31-1,c1)=255; anhkq(j3-2,c1)=255; anhkq(j31-2,c1)=255; anhkq(j3-3,c1)=255; anhkq(j31-3,c1)=255; end for d1=j3:j31 anhkq(d1,i3)=255; anhkq(d1,i31)=255; anhkq(d1,i3-1)=255; anhkq(d1,i31-1)=255; anhkq(d1,i3-2)=255; anhkq(d1,i31-2)=255; anhkq(d1,i3-3)=255; anhkq(d1,i31-3)=255; end end if j4>1 &&i4>1 [j42,i42]=do(I,j4,i4); i4=i42-16; j4=j42-20; if i4<1 i4=1; end if j4<1 j4=1; end i4=i4*5; j4=j4*5; i41=i4+149; j41=j4+199; if i41>c i41=c; end if j41>d j41=d; end anh1=imcrop(anhkq1,[i4 j4 i41-i4 j41-j4]); a1=strcat('anhluu/anh4.jpg'); imwrite(anh1,a1); for c1=i4:i41 anhkq(j4,c1)=255; anhkq(j41,c1)=255; anhkq(j4-1,c1)=255; anhkq(j41-1,c1)=255; anhkq(j4-2,c1)=255; anhkq(j41-2,c1)=255; anhkq(j4-3,c1)=255; anhkq(j41-3,c1)=255; end for d1=j4:j41 anhkq(d1,i4)=255; anhkq(d1,i41)=255; anhkq(d1,i4-1)=255; anhkq(d1,i41-1)=255; anhkq(d1,i4-2)=255; anhkq(d1,i41-2)=255; anhkq(d1,i4-3)=255; anhkq(d1,i41-3)=255; end end e=strcat('anhluu/anh_kq.jpg'); imwrite(anhkq,e); ****Đoạn code xác định vị trí trung tâm khuôn mặt******* function [a1,b1]= do(anh,a,b) % b la gia tri cot a la gia tri dong mini=b; minj=a; maxj=a; [d,c]=size(anh); b1=b-20; a1=a-15; a2=a+15; if b1<1 b1=1; end if a1<1 a1=1; end if a2>d a2=d; end for i1=b1:b for j1=a1:a2 if anh(j1,i1)>200
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
if i1<mini mini=i1; end if j1<minj minj=j1; end if j1>maxj maxj=j1; end end end end a1=round((minj+maxj)/2); b1=round((mini+b)/2); ******Đoạn code nhận dạng Enginface*********** function kq=subim(anh,y,x) [dong,cot]=size(anh); % hàm này có hai mục đích d=27;c=18; % thứ 1: xóa bỏ các ảnh lỗi i1=y-13;i2=y+13; % thứ hai biến đổi ảnh thành vector và làm tròn số if i1<1 % trong thuật toán PCA xử lý ảnh theo khối do đó khi i1=1; % cắt ảnh thì củng sẽ có những tấm ảnh bị lỗi end % nên hàm này sẽ xóa tất cả các ảnh lỗi về giá trị if i2>dong % chỉ giữ lại các ảnh có kích thước đúng với ảnh mẫu i2=dong; end j1=x-8;j2=x+9; if j1<1 j1=1; end if j2>cot j2=cot; end im=anh(i1:i2,j1:j2); kt=(i2-i1+1)*(j2-j1+1); if kt==486 im=reshape(im',486,1); kq=double(im); else im=reshape(im,kt,1); kq=zeros(486,1); for i=1:kt kq(i,1)=im(i,1); end kq=double(kq); end *******Đoạn code nhận dạng và truy xuất thông tin cá nhân ảnh nhận dạng******** ******Đoạn code chương trình chính********** anhtest=imread('anhluu/anhtest.jpg'); %đọc ảnh chọn để nhận dạng if anhtest==255 % kiểm tra có phải là ảnh trắng hay không axes(handles.axes3); % nếu là ảnh trắng thông tin nhận dạng sẽ là imshow('hoso/0.jpg'); % tấm hình không nhận dạng được set(handles.ten,'string','Khoâng bieát'); % và các thông tin khác đều “không biết” set(handles.ns,'string','Khoâng bieát'); set(handles.mssv,'string','Khoâng bieát'); set(handles.lop,'string','Khoâng bieát'); set(handles.quequan,'string','Khoâng bieát');
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
else % nếu có tấm ảnh nhận dạng thì chương trình sẽ anhtest=imresize(anhtest,[200 150]); % resize ảnh về đúng kích thước của ảnh mẫu mau='anhmau'; %tạo cơ sở dữ liệu ảnh mẫu T = taoCSDL1(mau); % tính giá trị eigenface của tập ảnh mẫu [m, A, E] = taoEF1(T); anhtim = nhandien1(anhtest, m, A, E); %gọi đến chương trình nhandien1 để nhận diện ảnh anhtim1=anhtim+1; % ******* Đọc và truy xuất dữ liệu của tấm ảnh nhận dạng được từ file Excel ************ file = [pwd '\hoso1.xls']; % khởi động chương trình Excel đọc file hoso1.xls range = 'A2:E100'; h = actxserver('Excel.Application'); % chỉ khởi động nhưng không cho hiện lên bản Excel h.Visible = 0; % Visible = 0 là ẩn Visible = 1 là cho nó hiện lên workbook = h.Workbooks.Open( file ); Sheets = h.ActiveWorkBook.Sheets; Sheets.Item(1).Activate; s1=strcat('A',num2str(anhtim1)); % gọi ô nhớ chứa thông tin trong file EXCEL s2=strcat('B',num2str(anhtim1)); s3=strcat('C',num2str(anhtim1)); s4=strcat('D',num2str(anhtim1)); s5=strcat('E',num2str(anhtim1)); h.Range(s1).Select; % Truy xuất thông tin cá nhân của tấm ảnh nhận t1 = h.get('Selection').Value; % dạng trong flie Excel(hoso1. xls) theo đúng tên của h.Range(s2).Select; % bức ảnh mẫu nhận dạng t2 = h.get('Selection').Value; h.Range(s3).Select; t3 = h.get('Selection').Value; h.Range(s4).Select; t4 = h.get('Selection').Value; h.Range(s5).Select; t5 = h.get('Selection').Value; set(handles.ten,'string',t1); %hiện thông tin cá nhân của tấm ảnh nhận dạng set(handles.ns,'string',t2); set(handles.mssv,'string',t3); set(handles.lop,'string',t4); set(handles.quequan,'string',t5); axes(handles.axes3); % Hiện ảnh vừa nhận diện imshow(strcat('hoso\',t3,'.jpg')); workbook.Close(false); % Đóng và thoát chương trình Excel h.Quit; delete(h); end *******Đoạn code tạo cơ sở dữ liệu của chương trình nhận dạng***** function T = taoCSDL1(mau) csdl = dir(mau); soanh = 0; for i = 1:size(csdl,1) if not(strcmp(csdl(i).name,'.')|strcmp(csdl(i).name,'..')|strcmp(csdl(i).name,'Thumbs.db')) soanh = soanh + 1; end end T = []; % tạo ma trận ảnh trong thư mục ảnh mẫu for i = 1 : soanh str = int2str(i); str = strcat('\',str,'.jpg'); str = strcat(mau,str); % Lấy đầy đủ tên của bức ảnh img = imread(str);
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
img = rgb2gray(img); [dong cot] = size(img); tam = reshape(img',dong*cot,1); % Biến ảnh thành vector T = [T tam]; % Tăng dần kích thước ma trận ảnh T end *********Đoạn code tính Eigenface trung bình************ function [m, A, E] = taoEF1(T) m = mean(T,2); %Tính toán giá trị ảnh trung bình soanh = size(T,2); %%%%%%%%%%%%%% Tính độ lệch của bức ảnh với gí trị trung bình của ảnh trung bình A = []; for i = 1 : soanh temp = double(T(:,i)) - m; % T(:,i): vector cột thứ i chính là 1 bức A = [A temp]; end L = A'*A; % Tính ma trận A*A’ [V D] = eig(L); % tim các vector riêng và trị riêng %V chứa những vector riêng, còn D chứa những trị riêng trong đó vector riêng V(:,i) ứng với trị riêng D(i,i) D1=diag(D); D1=sort(D1); s=size(D1);s=s(1); D1=D1(s-10); LeigV = []; for i = 1 : size(V,2) if( D(i,i)>D1 ) LeigV = [LeigV V(:,i)]; end end E = A * LeigV; sovector=size(E,2); for i=1:sovector dodai=norm(E(:,i)); E(:,i)=E(:,i)/dodai; end *****Đoạn code nhandien1 của chuong trình nhận dạng khuôn mặt************* function anhtim = nhandien1(anhtest, m, A, E) toado = []; %Tập tọa độ hình chiếu của các bức ảnh trong csdl sovector = size(E,2); %số vector riêng trong E là số for i = 1 : sovector tam = E'*A(:,i); %tọa đô hình chiếu của bức ảnh Ai toado = [toado tam]; end tam = rgb2gray(anhtest); % chuyển ảnh màu thành ảnh trắng đen [dong cot] = size(tam); InImage = reshape(tam',dong*cot,1); dolech = double(InImage)-m; toadoKT = E'*dolech; khoangcach = []; % tính khoảng cách của tấm ảnh so với các ảnh mẫu for i = 1 : sovector % xác định khoảng cách ngắn nhất q = toado(:,i); tam = ( norm( toadoKT - q ) )^2; khoangcach = [khoangcach tam];
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
end [minKC , vitri] = min(khoangcach); if minKC<50000000 anhtim=vitri; elseif minKC>50000000 anhtim =100; end %%********Đoạn code liên quan*******%% ******* Đoạn code lưu ảnh********* if s==255 % kiểm tra ảnh chọn lưu có phải là ảnh hay không selection = questdlg(['No la anh trang do ban co luu khong?'],... ['Luu ' 'anh da chon!'],... 'Yes','No','Yes'); %Đưa ra bản thông báo nếu nó lá ảnh trắng if strcmp(selection,'No') % chọn “No” để quay lại chương trình return; elseif strcmp(selection,'Yes') [filename,pathname]=uiputfile('*.jpg','JPEG Files(*.jpg)';... '*.bmp','Bitmap Files(*.bmp)';'*.gif','GIF Files(*.gif)';... '*.tif','TIFF Files(*.tif)';... '*.*','all image file','Luu anh da chon!','anhkq/'); imwrite(s,[pathname,filename]); end else % nếu ảnh lưu không phải là ảnh trắng [filename,pathname]=uiputfile('*.jpg','JPEG Files(*.jpg)';... '*.bmp','Bitmap Files(*.bmp)';'*.gif','GIF Files(*.gif)';... '*.tif','TIFF Files(*.tif)';... %đặt tên và chọn loại ảnh muốn lưu '*.*','all image file','Luu anh da chon!','anhkq/'); %thực hiện lưu ảnh imwrite(s,[pathname,filename]); end ********* Đoạn code chọn ảnh ******* [filename,pathname]=uigetfile('*.jpeg;*.jpg;*.gif;*.tif;*.tiff;*.bmp;*.png',... 'all image file';'*.jpg;*.jpeg','JPEG Files(*.jpg,*.jpeg)';... % chọn đường dẫn nơi chứa ảnh test '*.gif','GIF Files(*.gif)';'*.tif;*.tiff','TIFF Files(*.tif,*.tiff)';... '*.bmp','Bitmap Files(*.bmp)';'*.png','PNG Files(*.png)','Chon anh kiem tra! ','anhtest/1.png'); anhchon=imread([pathname,filename]); % đọc ảnh đã chọn axes(handles.axes1); imshow(anhchon); % hiện ảnh chọn a=strcat('anhluu/anh_goc.jpg'); imwrite(anhchon,a); **********Đoạn code xóa ảnh ******** a=255; % tạo ra ảnh trắng a1=strcat('anhluu/anh_goc.jpg'); imwrite(a,a1); % biến tát cả các ảnh đang hiện thành ảnh trắng a1=strcat('anhluu/anh1.jpg'); imwrite(a,a1); a1=strcat('anhluu/anh2.jpg'); imwrite(a,a1); a1=strcat('anhluu/anh3.jpg'); imwrite(a,a1); a1=strcat('anhluu/anh4.jpg'); imwrite(a,a1); a1=strcat('anhluu/anh_face.jpg'); imwrite(a,a1); a1=strcat('anhluu/anh_kq.jpg'); imwrite(a,a1); a1=strcat('anhluu/anhtest.jpg'); imwrite(a,a1); a1=255; axes(handles.axes1); imshow(a1); % hiện ảnh trắng lên các ô ảnh axes(handles.axes2); imshow(a1); axes(handles.axes3); imshow(a1); axes(handles.axes4); imshow(a1); axes(handles.axes5); imshow(a1);
Phụ lục
GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm
axes(handles.axes6); imshow(a1); axes(handles.axes7); imshow(a1); set(handles.ten,'string',' '); % xóa các dòng dữ liệu thông tin nhận dạng set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); ******* Đoạn code thoát******** selection = questdlg(['Close ' get(handles.figure1,'Name') '?'],... % Đưa ra câu hỏi ['Close ' get(handles.figure1,'Name') '...'],... 'Yes','No','Yes'); % tạo bản lựu chọn có hai nút hỏi “Yes”, “No” if strcmp(selection,'No') % nếu chọn “No” quay laị chương trình return; end % Nếu chọn Yes thoát khỏi chương trình delete(handles.figure1)