SlideShare a Scribd company logo
1 of 35
ĐẠI HỌC BÁCH KHOA HÀ NỘI 
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG 
BÁO CÁO 
Project2 
NHẬN DẠNG ẢNH SỬ DỤNG THUẬT TOÁN PCA 
Nhóm sinh viên thực hiện : 
Đỗ Hồng Cường mssv: 20101209 
Bùi Văn Cường mssv: 20101002 
Giảng viên hướng dẩn : ThS. Đỗ Văn Uy 
Hà Nội: 04-2013
Nhận dạng ảnh sử dụng thuật toán PCA 
MỤC LỤC 
LỜI MỞ ĐẦU ....................................................................................................4 
CHƯƠNG I : THƯ VIỆN OPENCV..................................................................5 
I. Thư viện mã nguồn mở Opencv. ......................................................... 5 
II. Tổ chức thư viện OpenCV ................................................................... 7 
III. Hàm cho một số chức năng cụ thể .................................................... 9 
1.1. Load ảnh.................................................................................................9 
1.2. Chức năng Lọc Nhiễu............................................................................ 10 
1.3. Đổi màu ảnh. ........................................................................................ 12 
1.4. Đọc ảnh từ VIDEO................................................................................ 12 
1.5. Đọc ảnh từ Camara................................................................................ 13 
CHƯƠNG II : THUẬT TOÁN PCA .............................................................. 14 
I. Ý tưởng................................................................................................. 14 
II. Phân tích thành phần chính PCA ..................................................... 15 
III. Hình ảnh minh họa ............................................................................ 19 
CHƯƠNG III : MÔ PHỎNG CHƯƠNG TRÌNH .............................................. 24 
I. Công cụ sử dụng và một số file liên quan.......................................... 24 
1.1. Thư viện Opencv 2.4.3......................................................................... 24 
1.2. Công cụ Visual studio C++ 2010 Express ............................................. 24 
1.3. Bộ dữ liệu sử dụng............................................................................... 24 
Project2 – GVHD : Đỗ Văn Uy Page 2
Nhận dạng ảnh sử dụng thuật toán PCA 
II, Các biến , hàm trong sử dụng trong chương trình ............................ 26 
2.1. Chức năng tìm khuôn mặt giống với khuôn mặt cho trước ...................... 26 
2.2. Chức năng tìm và đánh dấu khuôn mặt có trong ảnh............................. 27 
III. Chạy thử chương trình ....................................................................... 28 
KẾT LUẬN ...................................................................................................... 34 
TÀI LIỆU THAM KHẢO ................................................................................. 35 
Project2 – GVHD : Đỗ Văn Uy Page 3
Nhận dạng ảnh sử dụng thuật toán PCA 
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, đồ vật .... được ra đời và phát triển với độ tin cậy 
ngày càng cao . Với cách tiếp cận đối tượng nhận dạng theo phương 
pháp này , chúng ta có thể thu nhận được nhiều thông tin từ đối tượng 
hơn, mà không cần tác động nhiều đến đối tượng cũng vẫn đảm bảo tính 
chính xác , an toàn , thuận tiện . 
Một trong những bài toán được xã hội quan tâm hiện nay là nhận 
dạng khuôn mặt . Chúng ta có thể liệt kê ra một số thuật toán cụ thể để 
giải quyết vấn đề nhận dạng như : PCA, LDA, ICA, EP, EBGM .... Tuy 
nhiên vì điều kiện thời gian nên nhóm em chỉ tập trung vào tìm hiểu và 
làm một ứng dụng nhỏ sử dụng thuật toán đang khá nổi tiếng và thông 
dụng hiện nay là thuật toán PCA (Principal component analysis) – phân 
tích thành phần chính . 
Nội dung trình bày trong báo cáo này ,nhóm em sẽ đi sâu khai thác 
thuật toán PCA để giải quyết hai vấn đề chính : 
Thứ nhất : Xác định vị trí những khuôn mặt trong một bức ảnh 
Thứ hai : Tìm một khuôn mặt giống với khuôn mặt cho trước . 
Project2 – GVHD : Đỗ Văn Uy Page 4
Nhận dạng ảnh sử dụng thuật toán PCA 
CHƯƠNG I : THƯ VIỆN OPENCV 
I. Giới Thiệu Về Thư Viện Mã Nguồn Mở OpenCV. 
OpenCV (Open Computer Vision library) do Intel phát triển, được 
giới thiệu năm 1999 và hoàn thiện thành phiên bản 1.0 năm 2006. Thư 
viện OpenCV - gồm khoảng 500 hàm – được viết bằng ngôn ngữ lập 
trình C và tương thích với các hệ điều hành Windows, Linux, Mac OS... 
đóng vai trò xác lập chuẩn giao tiếp, dữ liệu, thuật toán cho lĩnh vực CV 
và tạo điều kiện cho mọi người tham gia nghiên cứu và phát triển ứng 
dụng. 
Trước OpenCV không có một công cụ chuẩn nào cho lĩnh vực xử 
lý ảnh. Các đoạn code đơn lẻ do các nhà nghiên cứu tự viết thường 
không thống nhất và không ổn định. Các bộ công cụ thương mại như 
Matlab, Simulink, Halcon, v.v... lại có giá cao chỉ thích hợp cho các 
công ty phát triển các ứng dụng lớn. Ngoài ra còn có các giải pháp kèm 
theo thiết bị phần cứng mà phần lớn là mã đóng và được thiết kế riêng 
cho từng thiết bị, rất khó khăn cho việc mở rộng ứng dụng. 
OpenCV là công cụ hữu ích cho những người bước đầu làm quen 
với xử lý ảnh số vì các ưu điểm sau: 
Project2 – GVHD : Đỗ Văn Uy Page 5
Nhận dạng ảnh sử dụng thuật toán PCA 
- OpenCV là công cụ chuyên dụng: Được Intel phát triển theo 
hướng tối ưu hóa cho các ứng dụng xử lí và phân tích ảnh, với cấu trúc 
dữ liệu hợp lý, thư viện tạo giao diện, truy xuất thiết bị phần cứng được 
tích hợp sẵn. OpenCV thích hợp để phát triển nhanh ứng dụng. 
- OpenCV là công cụ mã nguồn mở: Không chỉ là công cụ miễn phí 
(với BSD license), việc được xây dựng trên mã nguồn mở giúp OpenCV 
trở thành công cụ thích hợp cho nghiên cứu và phát triển, với khả năng 
thay đổi và mở rộng các mô hình, thuật toán. 
- OpenCV đã được sử dụng rộng rãi: Từ năm 1999 đến nay, 
OpenCV đã thu hút được một lượng lớn người dùng, trong đó có các 
công ty lớn như Microsoft, IBM, Sony, Siemens, Google và các nhóm 
nghiên cứu ở Standford, MIT, CMU, Cambridge... Nhiều forum hỗ trợ 
và cộng đồng người dùng đã được thành lập, tạo nên kênh thông tin rộng 
lớn hữu ích cho việc tham khảo tra cứu. 
Project2 – GVHD : Đỗ Văn Uy Page 6
Nhận dạng ảnh sử dụng thuật toán PCA 
Hình 1.8 Nhận dạng khuôn mặt với Haar classifier 
II. Tổ chức thư viện OpenCV 
Hình 1.7 Tổ chức thư viện OpenCV 
- CXCORE chứa các định nghĩa kiểu dữ liệu cơ sở. Ví dụ, các cấu 
trúc dữ liệu cho ảnh, điểm và hình chữ nhật được định nghĩa trong 
cxtypes.h . CXCORE cũng chứa đại số tuyến tính và phương pháp thống 
kê, chức năng duy trì và điều khiển chuỗi. Một số ít, các chức năng đồ 
họa để vẽ trên ảnh cũng được đặt ở đây. 
- CV chứa các thuật toán về xử lý ảnh và định kích cỡ camera. Các 
chức năng hình họa máy tính cũng được đặt ở đây. 
Project2 – GVHD : Đỗ Văn Uy Page 7
Nhận dạng ảnh sử dụng thuật toán PCA 
- CVAUX được mô tả trong tài liệu của OpenCV như chứa các mã 
cũ và thứ nghiệm. Tuy nhiên, các giao diện đơn cho sự nhận diện ảnh ở 
trong module này. Code sau này chúng được chuyên dụng cho nhận 
diện mặt và chúng được ứng dụng rộng rãi cho mục đích đó. 
- HIGHGUI và CVCAM được đặt trong cùng thư mục là 
“otherlibs”. 
+ HIGHGUI : chứa các giao diện vào ra cơ bản, nó cũng chứa các 
khả năng cửa sổ mở rộng và vào ra video. 
+ CVCAM : chứa các giao diện cho video truy cập qua DirectX 
trên nền Windows 32 bits. 
Kèm theo thư viện là tài liệu hướng dẫn và các ví dụ mẫu thể hiện 
một phần các chức năng của công cụ OpenCV. 
Các chức năng của openCV tập trung vào thu thập ảnh, xử lí ảnh và 
các thuật toán phân tích dữ liệu ảnh, bao gồm: 
- Truy xuất ảnh và phim: đọc ảnh số từ camera, từ file, ghi ảnh và 
phim 
- Cấu trúc dữ liệu ảnh số và các dữ liệu hỗ trợ cần thiết: ma trận, 
vector, chuỗi, xâu và cây 
- Xử lí ảnh căn bản: các bộ lọc có sẵn, tìm chi tiết cạnh, góc, chỉnh 
đổi màu, phóng to thu nhỏ, và hiệu chỉnh histograms 
- Xử lí cấu trúc: tìm viền, nhận chuyển động, thay đổi trong không 
gian 3D, đối chiếu bản mẫu, xấp xỉ các đơn vị hình học cơ sở - mặt 
phẳng, đa giác, ellipse, đường thẳng... 
Project2 – GVHD : Đỗ Văn Uy Page 8
Nhận dạng ảnh sử dụng thuật toán PCA 
- Phân tích dữ liệu ảnh: nhận dạng thực thể, theo dõi các chi tiết và 
phân tích chuyển động 
- Tạo giao diện đơn giản: hiển thị ảnh, thao tác bàn phím, chuột, 
thanh trượt để chỉnh thông số (nếu cần thiết các bạn có thể tự tạo thêm 
các phím điều khiển thông qua thao tác chuột, hoặc tích hợp thêm các 
thư viện về giao diện như wxWidgets) 
- Chức năng vẽ, chú thích lên ảnh. 
III. Hàm cho một số chức năng cụ thể 
1.1. Load ảnh. 
IplImage: kiểu cấu trúc lưu giữthông tin file ảnh cần load, như: định 
dạng, kích thước, dung lượng, màu sắc,… 
cvLoadImage(): Hàm load ảnh. 
cvNamedWindow():Thiết lập cửa sổ để hiện thị ảnh. 
cvShowImage():Hiển thi ảnh. 
cvWaitKey(0):Chờ bấm phím bất kỳ để kết thúc chương trình. 
cvReleaseImage( ):Xóa ảnh 
cvDestroyWindow( ):Xóa cửa sổ. 
Project2 – GVHD : Đỗ Văn Uy Page 9
Nhận dạng ảnh sử dụng thuật toán PCA 
1.2. Chức năng Lọc Nhiễu. 
cvCreateImage():Tạo 1 ảnh mới có các thông số tương ưng với ảnh 
gốc. 
cvSmooth():Thưc hiện bộ lọc trung bình. 
cvNamedWindow():Tạo cửa sổ hiển thị ảnh. 
Project2 – GVHD : Đỗ Văn Uy Page 10
Nhận dạng ảnh sử dụng thuật toán PCA 
Project2 – GVHD : Đỗ Văn Uy Page 11
Nhận dạng ảnh sử dụng thuật toán PCA 
1.3. Đổi màu ảnh. 
cvCvtColor():Đổi màu ảnh. 
1.4. Đọc ảnh từ VIDEO. 
cvNamedWindow( ):Tạo cửa sổ để hiển thị ảnh. 
CvCapture:cấu trúc chứa thông tin của File AVI. 
cvCreateFileCapture(): Lấy thông số từ File Avi được Load. 
Project2 – GVHD : Đỗ Văn Uy Page 12
Nhận dạng ảnh sử dụng thuật toán PCA 
hệ thống sẽ đọc các ảnh từ đoạn VIDEO và xếp chúng thành một dãy 
các ảnh động liên tiếp nhau nên ta cũng có cảm giác như đang xem một 
VIDEO. 
1.5. Đọc ảnh từ Camara 
cvCreateCameraCapture(0): hoạt động tương tự như hàm 
cvCreateFileCapture() 
Webcam máy tính sẽ bật lên,hệ thống sẽ nhận ảnh từ CAMERA. 
Project2 – GVHD : Đỗ Văn Uy Page 13
Nhận dạng ảnh sử dụng thuật toán PCA 
CHƯƠNG II : THUẬT TOÁN PCA 
I. Ý tưởng 
Khuôn mặt người có rất nhiều nét để nhận biết , nếu như ta gặp 
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 người đó có thể thay đổi như da , mái 
tóc. Ta nhận ra ngay người đó không phải vì nhớ được đôi mắt , mũi , 
hay môi , tóc , lông mày mà ta nhận ra vì nhớ được diện mạo của 
người đó. Tức là 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 . 
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 cI.ó thể nói những vector này nằm trong một không 
gian còn 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 
Project2 – GVHD : Đỗ Văn Uy Page 14
Nhận dạng ảnh sử dụng thuật toán PCA 
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 . 
II. 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ẽ sở P vector : T1, T2 .. 
Tp . 
Tính vector ảnh trung bình : 
Sự khác biệt giữa những khuôn mặt với ảnh trung bình là những 
vector : 
Ai = Ti – m , i = 1 ... P 
Ý 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 vetor 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 : 
Project2 – GVHD : Đỗ Văn Uy Page 15
Nhận dạng ảnh sử dụng thuật toán PCA 
Những vector uk và giá trị vô hướng , chính là những vector riêng 
và trị riêng tương ứng của ma trận AAT có kích thước M*N x 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à 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 PxP . 
Nếu v là một vector riêng của ATA và là trị riêng tương ứng, khi 
đó ta có : 
ATAv = v <=> AATAv = Av 
Tức 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 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 tương ứng với Q trị riêng lớn nhất trong D . 
Project2 – GVHD : Đỗ Văn Uy Page 16
Nhận dạng ảnh sử dụng thuật toán PCA 
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 gọi là Eigenfaces . E là 
ma trận M*NxQ , 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 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 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 : 
Độ dài || u – u0 || được gọi là khoảng cách từ u đến W . 
Project2 – GVHD : Đỗ Văn Uy Page 17
Nhận dạng ảnh sử dụng thuật toán PCA 
Tập hợp ci = <u / ui>, i = 1,...Q được gọi là tọa độ của u0 trong không 
gian W . 
Tìm C = ETAi 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 x 1 
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 Ci = ETAi là tọa độ của hình chiếu Aif của A 
lên không gian khuôn mặt . 
Ta tính hai đại lượng sau : 
 S = || K – Kf || xem như là khoảng cách từ bức ảnh H đến không 
gian khuôn mặt 
 Si = || C- Ci || xem như là khoảng cách từ H đến bức ảnh Ti trong 
tập huấn luyện 
Xét a và b là hai ngưỡng nào đó : 
 s < a thì H là bức ảnh khuôn mặt (do H đủ gần với không 
gian khuôn mặt ) 
 si < b thì Ti là bức ảnh của cùng một người với H (đủ gần với 
Ti) . 
Vậy là ta có thể tìm được 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 
trong tập huấn luyện . 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ờ 
Project2 – GVHD : Đỗ Văn Uy Page 18
Nhận dạng ảnh sử dụng thuật toán PCA 
trong một bức ảnh lớn hơn H có nhiều khuôn mặt ta sẽ xác 
định vị trí của 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 H có kích thước M x 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 s(x, y) = || K(x, y) - Kf (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 . 
III. 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 khuôn mặt có 
kích thước 180 x 200 pixel , dưới đây là một số hình ảnh của những 
eigenfaces thu được (lưu ý đâ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 ) 
Project2 – GVHD : Đỗ Văn Uy Page 19
Nhận dạng ảnh sử dụng thuật toán PCA 
Bây giờ ta chiếu hai bức ảnh lên không gian khuôn mặt này : 
Như ta đã thấy nếu bức ảnh là khuân mặt người thì hình chiếu của nó 
sẽ khá giống với ảnh gốc , còn khi bức ảnh không phải là người thì hình 
Project2 – GVHD : Đỗ Văn Uy Page 20
Nhận dạng ảnh sử dụng thuật toán PCA 
chiếu sẽ khác với ả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 có kích thước 18 x 27 pixel , ta cũng tìm các Eigenfaces và sau đó 
tìm các face map của một bứa ả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 18 x 27 pixel . 
Project2 – GVHD : Đỗ Văn Uy Page 21
Nhận dạng ảnh sử dụng thuật toán PCA 
Hình trên là map của bức ảnh ban đầu 
Ta thấy vị trí mỗi khuân mặt 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 của khuôn mặt này , ta thu được kết quả như sau 
Project2 – GVHD : Đỗ Văn Uy Page 22
Nhận dạng ảnh sử dụng thuật toán PCA 
Hình trên cũng khá giống với face map ứng không gian khuôn mặt 
nhưng tại mỗi vùng sáng trên 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 thuật toán PCA mới có được độ chính 
xác yêu cầu . 
. 
Project2 – GVHD : Đỗ Văn Uy Page 23
Nhận dạng ảnh sử dụng thuật toán PCA 
CHƯƠNG III : MÔ PHỎNG CHƯƠNG TRÌNH 
I. Công cụ sử dụng và một số file liên quan 
1.1. Thư viện Opencv 2.4.3 
- Là thư viện hỗ trợ xử lý hình ảnh 
1.2. Công cụ Visual studio C++ 2010 Express 
- Chúng ta sẽ sử dụng công cụ này để viết ứng dụng bằng 
C . 
- Công cụ này cần được cộng thêm thư viện của opencv 
2.4.3 
1.3. Bộ dữ liệu sử dụng 
- Hai file : 
+ train.txt : lưu thông tin những ảnh được đưa ra để 
huấn luyện (bao gồm chỉ số ảnh và đường dẫn đến ảnh) 
Project2 – GVHD : Đỗ Văn Uy Page 24
Nhận dạng ảnh sử dụng thuật toán PCA 
+ test.txt : Lưu chỉ số và đường dẫn các ảnh dùng để 
kiểm tra . 
- File facedata.xml chứa các dữ liệu trong quá trình nhận 
dạng .như số ảnh huấn luyện , vector ảnh trung bình .... 
- Các thư mục ảnh S1 , S2 , S3 ..... , S40 , trong mỗi thư 
mục có chứa 10 ảnh của cùng một người trong các 
trạng thái khác nhau . chương trình sẽ lấy một số ảnh 
trong các thư mục này để làm đầu vào trong việc huấn 
luyện và tìm khuôn mặt giống với khuôn mặt cho trước. 
Project2 – GVHD : Đỗ Văn Uy Page 25
Nhận dạng ảnh sử dụng thuật toán PCA 
- Các ảnh để chúng ta tìm và đánh dấu các khuôn mặt có 
trong nó test1.jpg, test2.jpg ... 
II. Các biến , hàm trong sử dụng trong chương trình 
2.1. Chức năng tìm khuôn mặt giống với khuôn mặt cho trước 
Sử dụng các biến toàn cục : 
- int nTrainFaces : số ảnh được đưa ra để huấn luyện 
- int nEigens : số các giá trị riêng 
- IplImage **faceImgArr : mảng chứa các ảnh 
- IplImage *pAvgTrainImg : ảnh trung bình 
- IplImage **eigenVecArr : vector riêng 
- CvMat *personNumTruthMat : mảng chứa các chỉ số 
ảnh 
- Cv *projectedTrainFaceMat : lưu trữ các khuôn mặt 
huấn luyện sau khi chiếu lên không gian con PCA 
Sử dụng các hàm : 
- learn() : thực hiện công việc 
+ load dữ liệu (chỉ số và đường dẫn ảnh để huấn 
luyện trong file train.txt) 
+ thực hiện thuật toán PCA để tìm không gian con 
+ chiếu dữ liệu huấn luyện lên không gian con 
Project2 – GVHD : Đỗ Văn Uy Page 26
Nhận dạng ảnh sử dụng thuật toán PCA 
+ lưu lại tất cả các thông tin (giá trị riêng, vector riêng, 
ảnh trung bình, chỉ số ảnh , khuôn mặt được chiếu) 
- recognize() : thực hiện công việc : 
+ load dữ liệu (chỉ số và đường dẫn ảnh để kiểm tra 
trong file “test.txt”) . 
+ chiếu ảnh cần kiểm tra lên không gian con PCA 
(dùng hàm cvEigenDecomposite(.....)) 
+ đưa ra kết quả là chỉ số ảnh nhận dạng được theo 
chương trình và ảnh thực . 
- doPCA() : khởi tạo các biến số , ma trận ...để làm đầu 
vào và nhận kết quả đầu ra khi gọi hàm xử lý theo thuật 
toán PCA (cvCalcEigenObjects(......)) 
- storeTrainingData() : lưu tất cả dữ liệu vào file 
“facedata.xml” 
- loadTrainingData( Cv **pTrainPersonNumMat) : 
load dữ liệu trong file “facedata.xml” 
- findNearestNeighbor ( float *projectedTestFace ) : so 
sánh từng ảnh test với từng ảnh train , tìm và trả lại chỉ 
số của ảnh train có khoảng cách nhỏ nhất với nó . 
- loadFaceImgArray(char *filename) : load ảnh cũng 
như chỉ sổ của nó lưu trữ vào mảng . 
2.2. Chức năng tìm và đánh dấu khuôn mặt có trong ảnh 
Sử dụng các biến toàn cục: 
- CvHaarClassifierCascade *pCascade : load dữ liệu từ 
file XML trong opencv 
- CvMemStorage *pStorage : Bộ nhớ đệm tự động 
Project2 – GVHD : Đỗ Văn Uy Page 27
Nhận dạng ảnh sử dụng thuật toán PCA 
- CvSeq *pFaceRectSeq : Lưu danh sách các khuôn mặt 
được xác định trong ảnh 
- IplImage *pInpImg : lưu ảnh dùng để xác định khuôn 
mặt 
Sử dụng các hàm : 
- cvHaarDetectObjects() : tìm kiếm khuôn mặt có trong 
ảnh . 
III. Chạy thử chương trình 
Sau khi chạy chương trình , màn hình xuất hiện 
Project2 – GVHD : Đỗ Văn Uy Page 28
Nhận dạng ảnh sử dụng thuật toán PCA 
Ta chọn chức năng 1, màn hình yêu cầu nhập tên file ảnh 
Nhập tên file ảnh , chương trình cho kết quả 
Project2 – GVHD : Đỗ Văn Uy Page 29
Nhận dạng ảnh sử dụng thuật toán PCA 
Tắt cửa sổ ảnh , chương trình hỏi bạn có muốn tiếp tục tìm kiếm 
khuôn mặt nữa không , bạn chọn “y” và nhập tên file ảnh và lặp lại quá 
trình trên . 
Nếu không muốn thực hiện thao tác này ta chọn “n” , chương trình 
hỏi bạn có muốn tiếp tục với chức năng khác không , nếu chon “n” 
chương trình sẽ dừng , chọn “y” chương trình trở về menu ban đầu . 
Project2 – GVHD : Đỗ Văn Uy Page 30
Nhận dạng ảnh sử dụng thuật toán PCA 
Ta chọn chức năng 2 
Project2 – GVHD : Đỗ Văn Uy Page 31
Nhận dạng ảnh sử dụng thuật toán PCA 
Chọn tiếp chức năng 1. 
Chương trình hỏi tiếp ta nhập “n” 
sau đó nhập “y” để đồng ý nhận dạng ảnh, chương trình hiển thị kết quả 
. 
Chức năng 2 trong Mục lựa chọn tiếp cũng cho kết quả tương tự . 
Project2 – GVHD : Đỗ Văn Uy Page 32
Nhận dạng ảnh sử dụng thuật toán PCA 
Project2 – GVHD : Đỗ Văn Uy Page 33
Nhận dạng ảnh sử dụng thuật toán PCA 
KẾT LUẬN 
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 các thuật toán khác . Thực tế có rất 
nhiều tác giả đã áp dụng thuật toán PCA , kết hợp với những phương 
pháp như mạng neuralb , xác xuất thông kê để xây dựng những thuật 
toán có độ chính xác cao . Ưu điểm của thuật toán PCA là nó 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 vào 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 . Khuyết điểm của PCA 
là các mẫu khuôn mặt luâ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 gồm 
nhiều nhóm hình , mỗi nhóm hình là hình của một người với tư thế và 
độ sáng khác nhau . 
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 đễ dàng cho việc mô tả đặc trưng 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ó 
Project2 – GVHD : Đỗ Văn Uy Page 34
Nhận dạng ảnh sử dụng thuật toán PCA 
thể PCA không phải là 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 dạng mặt người . 
TÀI LIỆU THAM KHẢO 
https://en.wikipedia.org/wiki/Principal_component_analysis 
http://www.cognotics.com/opencv/servo_2007_series/part_2/index.html 
http://www.bytefish.de/blog/pca_in_opencv/ 
http://www.pages.drexel.edu/~nk752/tutorials.html 
http://dphtuan.uphero.com/dphtuannews/posts 
Project2 – GVHD : Đỗ Văn Uy Page 35

More Related Content

What's hot

Giáo trình xử lý ảnh
Giáo trình xử lý ảnhGiáo trình xử lý ảnh
Giáo trình xử lý ảnhTùng Trần
 
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...nataliej4
 
Xử lý ảnh PTIT
Xử lý ảnh PTITXử lý ảnh PTIT
Xử lý ảnh PTITTran Tien
 
Slide bài giảng về lập trình Scratch dành cho GV
Slide bài giảng về lập trình Scratch dành cho GVSlide bài giảng về lập trình Scratch dành cho GV
Slide bài giảng về lập trình Scratch dành cho GVBùi Việt Hà
 
Ky thuat-truyen-so-lieu
Ky thuat-truyen-so-lieuKy thuat-truyen-so-lieu
Ky thuat-truyen-so-lieuNguyen Vong
 
đồ áN xây dựng website bán laptop 1129155
đồ áN xây dựng website bán laptop 1129155đồ áN xây dựng website bán laptop 1129155
đồ áN xây dựng website bán laptop 1129155nataliej4
 
Giáo trình bảo mật thông tin
Giáo trình bảo mật thông tinGiáo trình bảo mật thông tin
Giáo trình bảo mật thông tinjackjohn45
 
Báo cáo thực tập công nghệ thông tin.
Báo cáo thực tập công nghệ thông tin.Báo cáo thực tập công nghệ thông tin.
Báo cáo thực tập công nghệ thông tin.ssuser499fca
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinVõ Phúc
 
ỨNG DỤNG DEEP LEARNING ĐỂ ĐẾM SỐ LƯỢNG XE ÔTÔ TRONG NỘI THÀNH ĐÀ NẴNG 51920ed2
ỨNG DỤNG DEEP LEARNING ĐỂ ĐẾM SỐ LƯỢNG XE ÔTÔ TRONG NỘI THÀNH ĐÀ NẴNG 51920ed2ỨNG DỤNG DEEP LEARNING ĐỂ ĐẾM SỐ LƯỢNG XE ÔTÔ TRONG NỘI THÀNH ĐÀ NẴNG 51920ed2
ỨNG DỤNG DEEP LEARNING ĐỂ ĐẾM SỐ LƯỢNG XE ÔTÔ TRONG NỘI THÀNH ĐÀ NẴNG 51920ed2nataliej4
 

What's hot (20)

Giáo trình xử lý ảnh
Giáo trình xử lý ảnhGiáo trình xử lý ảnh
Giáo trình xử lý ảnh
 
Luận văn: Nhận dạng cảm xúc khuôn mặt người, HAY, 9đ
Luận văn: Nhận dạng cảm xúc khuôn mặt người, HAY, 9đLuận văn: Nhận dạng cảm xúc khuôn mặt người, HAY, 9đ
Luận văn: Nhận dạng cảm xúc khuôn mặt người, HAY, 9đ
 
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
 
Xử lý ảnh PTIT
Xử lý ảnh PTITXử lý ảnh PTIT
Xử lý ảnh PTIT
 
Slide bài giảng về lập trình Scratch dành cho GV
Slide bài giảng về lập trình Scratch dành cho GVSlide bài giảng về lập trình Scratch dành cho GV
Slide bài giảng về lập trình Scratch dành cho GV
 
Đề tài: Xây dựng website giới thiệu sản phẩm phần mềm, HOT
Đề tài: Xây dựng website giới thiệu sản phẩm phần mềm, HOTĐề tài: Xây dựng website giới thiệu sản phẩm phần mềm, HOT
Đề tài: Xây dựng website giới thiệu sản phẩm phần mềm, HOT
 
Ky thuat-truyen-so-lieu
Ky thuat-truyen-so-lieuKy thuat-truyen-so-lieu
Ky thuat-truyen-so-lieu
 
đồ áN xây dựng website bán laptop 1129155
đồ áN xây dựng website bán laptop 1129155đồ áN xây dựng website bán laptop 1129155
đồ áN xây dựng website bán laptop 1129155
 
Đề tài: Thiết kế bãi giữ xe ứng dụng công nghệ RFID và xử lý ảnh
Đề tài: Thiết kế bãi giữ xe ứng dụng công nghệ RFID và xử lý ảnhĐề tài: Thiết kế bãi giữ xe ứng dụng công nghệ RFID và xử lý ảnh
Đề tài: Thiết kế bãi giữ xe ứng dụng công nghệ RFID và xử lý ảnh
 
Đề tài: Xây dựng hệ thống Chatbots tự động, HAY, 9đ
Đề tài: Xây dựng hệ thống Chatbots tự động, HAY, 9đĐề tài: Xây dựng hệ thống Chatbots tự động, HAY, 9đ
Đề tài: Xây dựng hệ thống Chatbots tự động, HAY, 9đ
 
Giáo trình bảo mật thông tin
Giáo trình bảo mật thông tinGiáo trình bảo mật thông tin
Giáo trình bảo mật thông tin
 
Luận văn: Bài toán nhận dạng biển số xe, HAY
Luận văn: Bài toán nhận dạng biển số xe, HAYLuận văn: Bài toán nhận dạng biển số xe, HAY
Luận văn: Bài toán nhận dạng biển số xe, HAY
 
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đĐề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
 
Ảnh hưởng của việc sử dụng internet đến học tập của sinh viên
Ảnh hưởng của việc sử dụng internet đến học tập của sinh viênẢnh hưởng của việc sử dụng internet đến học tập của sinh viên
Ảnh hưởng của việc sử dụng internet đến học tập của sinh viên
 
Báo cáo thực tập công nghệ thông tin.
Báo cáo thực tập công nghệ thông tin.Báo cáo thực tập công nghệ thông tin.
Báo cáo thực tập công nghệ thông tin.
 
Đề tài: Thiết kế vòng tay đo nhịp tim sử dụng công nghệ IoTs, HAY
Đề tài: Thiết kế vòng tay đo nhịp tim sử dụng công nghệ IoTs, HAYĐề tài: Thiết kế vòng tay đo nhịp tim sử dụng công nghệ IoTs, HAY
Đề tài: Thiết kế vòng tay đo nhịp tim sử dụng công nghệ IoTs, HAY
 
Đề tài: Áp dụng kỹ thuật trong Big data vào lưu trữ dữ liệu, HOT
Đề tài: Áp dụng kỹ thuật trong Big data vào lưu trữ dữ liệu, HOTĐề tài: Áp dụng kỹ thuật trong Big data vào lưu trữ dữ liệu, HOT
Đề tài: Áp dụng kỹ thuật trong Big data vào lưu trữ dữ liệu, HOT
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tin
 
Luận văn: Phân loại sản phẩm dùng Kit Raspberry, HAY, 9đ
Luận văn: Phân loại sản phẩm dùng Kit Raspberry, HAY, 9đLuận văn: Phân loại sản phẩm dùng Kit Raspberry, HAY, 9đ
Luận văn: Phân loại sản phẩm dùng Kit Raspberry, HAY, 9đ
 
ỨNG DỤNG DEEP LEARNING ĐỂ ĐẾM SỐ LƯỢNG XE ÔTÔ TRONG NỘI THÀNH ĐÀ NẴNG 51920ed2
ỨNG DỤNG DEEP LEARNING ĐỂ ĐẾM SỐ LƯỢNG XE ÔTÔ TRONG NỘI THÀNH ĐÀ NẴNG 51920ed2ỨNG DỤNG DEEP LEARNING ĐỂ ĐẾM SỐ LƯỢNG XE ÔTÔ TRONG NỘI THÀNH ĐÀ NẴNG 51920ed2
ỨNG DỤNG DEEP LEARNING ĐỂ ĐẾM SỐ LƯỢNG XE ÔTÔ TRONG NỘI THÀNH ĐÀ NẴNG 51920ed2
 

Viewers also liked

Nhận diện khuôn mặt và phát hiện khuôn mặt
Nhận diện khuôn mặt và phát hiện khuôn mặtNhận diện khuôn mặt và phát hiện khuôn mặt
Nhận diện khuôn mặt và phát hiện khuôn mặtThường Nguyễn
 
PháT HiệN KhuôN MặT Trong ẢNh
PháT HiệN KhuôN MặT Trong ẢNhPháT HiệN KhuôN MặT Trong ẢNh
PháT HiệN KhuôN MặT Trong ẢNhchuma nguyen
 
Pca + Eigen Face [VN]
Pca + Eigen Face [VN]Pca + Eigen Face [VN]
Pca + Eigen Face [VN]An Khuong
 
ỨNG DỤNG MẠNG NƠRON TRONG DỰ BÁO TỶ LỆ NGHỈ HỌC
ỨNG DỤNG MẠNG NƠRON TRONG DỰ BÁO TỶ LỆ NGHỈ HỌC ỨNG DỤNG MẠNG NƠRON TRONG DỰ BÁO TỶ LỆ NGHỈ HỌC
ỨNG DỤNG MẠNG NƠRON TRONG DỰ BÁO TỶ LỆ NGHỈ HỌC Trịnh Nguyễn
 
Ung dung xu ly anh trong thuc te voi thu vien open cv
Ung dung xu ly anh trong thuc te voi thu vien open cvUng dung xu ly anh trong thuc te voi thu vien open cv
Ung dung xu ly anh trong thuc te voi thu vien open cvNguyen An
 
[Fablab Hanoi] 20161211_Talk: Trí tuệ nhân tạo và ứng dụng_Chương 1: Tổng quan
[Fablab Hanoi] 20161211_Talk: Trí tuệ nhân tạo và ứng dụng_Chương 1: Tổng quan[Fablab Hanoi] 20161211_Talk: Trí tuệ nhân tạo và ứng dụng_Chương 1: Tổng quan
[Fablab Hanoi] 20161211_Talk: Trí tuệ nhân tạo và ứng dụng_Chương 1: Tổng quanFablab Hanoi
 
MẠNG NƠRON VÀ QUÁ TRÌNH HỌC CỦA MẠNG NƠRON
MẠNG NƠRON VÀ QUÁ TRÌNH HỌC CỦA MẠNG NƠRON MẠNG NƠRON VÀ QUÁ TRÌNH HỌC CỦA MẠNG NƠRON
MẠNG NƠRON VÀ QUÁ TRÌNH HỌC CỦA MẠNG NƠRON Bông Bông
 
Mạng neuron, trí tuệ nhân tạo
Mạng neuron, trí tuệ nhân tạoMạng neuron, trí tuệ nhân tạo
Mạng neuron, trí tuệ nhân tạoKien Nguyen
 
Bài giảng Trí Tuệ Nhân Tạo
Bài giảng Trí Tuệ Nhân TạoBài giảng Trí Tuệ Nhân Tạo
Bài giảng Trí Tuệ Nhân TạoDự Nguyễn Quang
 
Bai toan va thuat toan
Bai toan va thuat toanBai toan va thuat toan
Bai toan va thuat toanHữu Duy Duy
 

Viewers also liked (12)

Nhận diện khuôn mặt và phát hiện khuôn mặt
Nhận diện khuôn mặt và phát hiện khuôn mặtNhận diện khuôn mặt và phát hiện khuôn mặt
Nhận diện khuôn mặt và phát hiện khuôn mặt
 
PháT HiệN KhuôN MặT Trong ẢNh
PháT HiệN KhuôN MặT Trong ẢNhPháT HiệN KhuôN MặT Trong ẢNh
PháT HiệN KhuôN MặT Trong ẢNh
 
Pca + Eigen Face [VN]
Pca + Eigen Face [VN]Pca + Eigen Face [VN]
Pca + Eigen Face [VN]
 
ỨNG DỤNG MẠNG NƠRON TRONG DỰ BÁO TỶ LỆ NGHỈ HỌC
ỨNG DỤNG MẠNG NƠRON TRONG DỰ BÁO TỶ LỆ NGHỈ HỌC ỨNG DỤNG MẠNG NƠRON TRONG DỰ BÁO TỶ LỆ NGHỈ HỌC
ỨNG DỤNG MẠNG NƠRON TRONG DỰ BÁO TỶ LỆ NGHỈ HỌC
 
Ung dung xu ly anh trong thuc te voi thu vien open cv
Ung dung xu ly anh trong thuc te voi thu vien open cvUng dung xu ly anh trong thuc te voi thu vien open cv
Ung dung xu ly anh trong thuc te voi thu vien open cv
 
[Fablab Hanoi] 20161211_Talk: Trí tuệ nhân tạo và ứng dụng_Chương 1: Tổng quan
[Fablab Hanoi] 20161211_Talk: Trí tuệ nhân tạo và ứng dụng_Chương 1: Tổng quan[Fablab Hanoi] 20161211_Talk: Trí tuệ nhân tạo và ứng dụng_Chương 1: Tổng quan
[Fablab Hanoi] 20161211_Talk: Trí tuệ nhân tạo và ứng dụng_Chương 1: Tổng quan
 
Chuong+1 2-3-4
Chuong+1 2-3-4Chuong+1 2-3-4
Chuong+1 2-3-4
 
Ada boost
Ada boostAda boost
Ada boost
 
MẠNG NƠRON VÀ QUÁ TRÌNH HỌC CỦA MẠNG NƠRON
MẠNG NƠRON VÀ QUÁ TRÌNH HỌC CỦA MẠNG NƠRON MẠNG NƠRON VÀ QUÁ TRÌNH HỌC CỦA MẠNG NƠRON
MẠNG NƠRON VÀ QUÁ TRÌNH HỌC CỦA MẠNG NƠRON
 
Mạng neuron, trí tuệ nhân tạo
Mạng neuron, trí tuệ nhân tạoMạng neuron, trí tuệ nhân tạo
Mạng neuron, trí tuệ nhân tạo
 
Bài giảng Trí Tuệ Nhân Tạo
Bài giảng Trí Tuệ Nhân TạoBài giảng Trí Tuệ Nhân Tạo
Bài giảng Trí Tuệ Nhân Tạo
 
Bai toan va thuat toan
Bai toan va thuat toanBai toan va thuat toan
Bai toan va thuat toan
 

Similar to Báo cáo

Giaotrinhcoreldraw 111029085418-phpapp01
Giaotrinhcoreldraw 111029085418-phpapp01Giaotrinhcoreldraw 111029085418-phpapp01
Giaotrinhcoreldraw 111029085418-phpapp01Hoang Ty
 
Ky thuat do_hoa
Ky thuat do_hoaKy thuat do_hoa
Ky thuat do_hoaDee Dee
 
tong quan ve cam (milling) tren mastercam
tong quan ve cam (milling) tren mastercamtong quan ve cam (milling) tren mastercam
tong quan ve cam (milling) tren mastercamHọc Cơ Khí
 
Ung dung xu ly anh trong thuc te voi thu vien open cv
Ung dung xu ly anh trong thuc te voi thu vien open cvUng dung xu ly anh trong thuc te voi thu vien open cv
Ung dung xu ly anh trong thuc te voi thu vien open cvTrinh Giang
 
manguonmo_lavarel_webbanmipham.docx
manguonmo_lavarel_webbanmipham.docxmanguonmo_lavarel_webbanmipham.docx
manguonmo_lavarel_webbanmipham.docxNgnHng26
 
Thiết kế chuyển động (Inventor)
Thiết kế chuyển động (Inventor)Thiết kế chuyển động (Inventor)
Thiết kế chuyển động (Inventor)Nguyen Van Phuong
 
vedc12al1yl4h5tc5y0fuqvqmhs8g24r.oastify.com.pdf
vedc12al1yl4h5tc5y0fuqvqmhs8g24r.oastify.com.pdfvedc12al1yl4h5tc5y0fuqvqmhs8g24r.oastify.com.pdf
vedc12al1yl4h5tc5y0fuqvqmhs8g24r.oastify.com.pdf-->"test--> -->"test-->
 
Nhóm-13-CVE-2021-40444-CVE-2018-0802.pdf
Nhóm-13-CVE-2021-40444-CVE-2018-0802.pdfNhóm-13-CVE-2021-40444-CVE-2018-0802.pdf
Nhóm-13-CVE-2021-40444-CVE-2018-0802.pdf-->"test--> -->"test-->
 
8w5pjfsyjb3hzibpnbisc3d34ualyco0d.oastify.com.pdf
8w5pjfsyjb3hzibpnbisc3d34ualyco0d.oastify.com.pdf8w5pjfsyjb3hzibpnbisc3d34ualyco0d.oastify.com.pdf
8w5pjfsyjb3hzibpnbisc3d34ualyco0d.oastify.com.pdfnamno
 
giới thiệu phần mềm thiết kế cơ khí miễn phí mã nguồn mở FreeCAD
giới thiệu phần mềm thiết kế cơ khí miễn phí mã nguồn mở FreeCADgiới thiệu phần mềm thiết kế cơ khí miễn phí mã nguồn mở FreeCAD
giới thiệu phần mềm thiết kế cơ khí miễn phí mã nguồn mở FreeCADĐạt Minh
 
Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...
Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...
Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...Man_Ebook
 

Similar to Báo cáo (20)

Giaotrinhcoreldraw 111029085418-phpapp01
Giaotrinhcoreldraw 111029085418-phpapp01Giaotrinhcoreldraw 111029085418-phpapp01
Giaotrinhcoreldraw 111029085418-phpapp01
 
Phân Tích Dữ Liệu Phân Hạng Tín Dụng Dựa Trên Bộ Dữ Liệu Xyz Bằng Phần Mềm Or...
Phân Tích Dữ Liệu Phân Hạng Tín Dụng Dựa Trên Bộ Dữ Liệu Xyz Bằng Phần Mềm Or...Phân Tích Dữ Liệu Phân Hạng Tín Dụng Dựa Trên Bộ Dữ Liệu Xyz Bằng Phần Mềm Or...
Phân Tích Dữ Liệu Phân Hạng Tín Dụng Dựa Trên Bộ Dữ Liệu Xyz Bằng Phần Mềm Or...
 
Ky thuat do_hoa
Ky thuat do_hoaKy thuat do_hoa
Ky thuat do_hoa
 
Ktdh (1)
Ktdh (1)Ktdh (1)
Ktdh (1)
 
tong quan ve cam (milling) tren mastercam
tong quan ve cam (milling) tren mastercamtong quan ve cam (milling) tren mastercam
tong quan ve cam (milling) tren mastercam
 
Đề tài: Nội dung về ảnh panorama và kỹ thuật ghép ảnh, HOT
Đề tài: Nội dung về ảnh panorama và kỹ thuật ghép ảnh, HOTĐề tài: Nội dung về ảnh panorama và kỹ thuật ghép ảnh, HOT
Đề tài: Nội dung về ảnh panorama và kỹ thuật ghép ảnh, HOT
 
Đề tài: Bài toán phát hiện trạng thái mắt của mặt người trong ảnh
Đề tài: Bài toán phát hiện trạng thái mắt của mặt người trong ảnhĐề tài: Bài toán phát hiện trạng thái mắt của mặt người trong ảnh
Đề tài: Bài toán phát hiện trạng thái mắt của mặt người trong ảnh
 
Luận văn: Kiểm tra lỗi in trên Rearcase sử dụng mạng nơron
Luận văn: Kiểm tra lỗi in trên Rearcase sử dụng mạng nơronLuận văn: Kiểm tra lỗi in trên Rearcase sử dụng mạng nơron
Luận văn: Kiểm tra lỗi in trên Rearcase sử dụng mạng nơron
 
Ung dung xu ly anh trong thuc te voi thu vien open cv
Ung dung xu ly anh trong thuc te voi thu vien open cvUng dung xu ly anh trong thuc te voi thu vien open cv
Ung dung xu ly anh trong thuc te voi thu vien open cv
 
Giao trinh corel draw
Giao trinh corel drawGiao trinh corel draw
Giao trinh corel draw
 
manguonmo_lavarel_webbanmipham.docx
manguonmo_lavarel_webbanmipham.docxmanguonmo_lavarel_webbanmipham.docx
manguonmo_lavarel_webbanmipham.docx
 
Luận văn: Xây dựng chương trình xác thực ảnh số, HOT
Luận văn: Xây dựng chương trình xác thực ảnh số, HOTLuận văn: Xây dựng chương trình xác thực ảnh số, HOT
Luận văn: Xây dựng chương trình xác thực ảnh số, HOT
 
Thiết kế chuyển động (Inventor)
Thiết kế chuyển động (Inventor)Thiết kế chuyển động (Inventor)
Thiết kế chuyển động (Inventor)
 
Math lab p
Math lab pMath lab p
Math lab p
 
Math lab p
Math lab pMath lab p
Math lab p
 
vedc12al1yl4h5tc5y0fuqvqmhs8g24r.oastify.com.pdf
vedc12al1yl4h5tc5y0fuqvqmhs8g24r.oastify.com.pdfvedc12al1yl4h5tc5y0fuqvqmhs8g24r.oastify.com.pdf
vedc12al1yl4h5tc5y0fuqvqmhs8g24r.oastify.com.pdf
 
Nhóm-13-CVE-2021-40444-CVE-2018-0802.pdf
Nhóm-13-CVE-2021-40444-CVE-2018-0802.pdfNhóm-13-CVE-2021-40444-CVE-2018-0802.pdf
Nhóm-13-CVE-2021-40444-CVE-2018-0802.pdf
 
8w5pjfsyjb3hzibpnbisc3d34ualyco0d.oastify.com.pdf
8w5pjfsyjb3hzibpnbisc3d34ualyco0d.oastify.com.pdf8w5pjfsyjb3hzibpnbisc3d34ualyco0d.oastify.com.pdf
8w5pjfsyjb3hzibpnbisc3d34ualyco0d.oastify.com.pdf
 
giới thiệu phần mềm thiết kế cơ khí miễn phí mã nguồn mở FreeCAD
giới thiệu phần mềm thiết kế cơ khí miễn phí mã nguồn mở FreeCADgiới thiệu phần mềm thiết kế cơ khí miễn phí mã nguồn mở FreeCAD
giới thiệu phần mềm thiết kế cơ khí miễn phí mã nguồn mở FreeCAD
 
Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...
Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...
Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...
 

Báo cáo

  • 1. ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BÁO CÁO Project2 NHẬN DẠNG ẢNH SỬ DỤNG THUẬT TOÁN PCA Nhóm sinh viên thực hiện : Đỗ Hồng Cường mssv: 20101209 Bùi Văn Cường mssv: 20101002 Giảng viên hướng dẩn : ThS. Đỗ Văn Uy Hà Nội: 04-2013
  • 2. Nhận dạng ảnh sử dụng thuật toán PCA MỤC LỤC LỜI MỞ ĐẦU ....................................................................................................4 CHƯƠNG I : THƯ VIỆN OPENCV..................................................................5 I. Thư viện mã nguồn mở Opencv. ......................................................... 5 II. Tổ chức thư viện OpenCV ................................................................... 7 III. Hàm cho một số chức năng cụ thể .................................................... 9 1.1. Load ảnh.................................................................................................9 1.2. Chức năng Lọc Nhiễu............................................................................ 10 1.3. Đổi màu ảnh. ........................................................................................ 12 1.4. Đọc ảnh từ VIDEO................................................................................ 12 1.5. Đọc ảnh từ Camara................................................................................ 13 CHƯƠNG II : THUẬT TOÁN PCA .............................................................. 14 I. Ý tưởng................................................................................................. 14 II. Phân tích thành phần chính PCA ..................................................... 15 III. Hình ảnh minh họa ............................................................................ 19 CHƯƠNG III : MÔ PHỎNG CHƯƠNG TRÌNH .............................................. 24 I. Công cụ sử dụng và một số file liên quan.......................................... 24 1.1. Thư viện Opencv 2.4.3......................................................................... 24 1.2. Công cụ Visual studio C++ 2010 Express ............................................. 24 1.3. Bộ dữ liệu sử dụng............................................................................... 24 Project2 – GVHD : Đỗ Văn Uy Page 2
  • 3. Nhận dạng ảnh sử dụng thuật toán PCA II, Các biến , hàm trong sử dụng trong chương trình ............................ 26 2.1. Chức năng tìm khuôn mặt giống với khuôn mặt cho trước ...................... 26 2.2. Chức năng tìm và đánh dấu khuôn mặt có trong ảnh............................. 27 III. Chạy thử chương trình ....................................................................... 28 KẾT LUẬN ...................................................................................................... 34 TÀI LIỆU THAM KHẢO ................................................................................. 35 Project2 – GVHD : Đỗ Văn Uy Page 3
  • 4. Nhận dạng ảnh sử dụng thuật toán PCA 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, đồ vật .... được ra đời và phát triển với độ tin cậy ngày càng cao . Với cách tiếp cận đối tượng nhận dạng theo phương pháp này , chúng ta có thể thu nhận được nhiều thông tin từ đối tượng hơn, mà không cần tác động nhiều đến đối tượng cũng vẫn đảm bảo tính chính xác , an toàn , thuận tiện . Một trong những bài toán được xã hội quan tâm hiện nay là nhận dạng khuôn mặt . Chúng ta có thể liệt kê ra một số thuật toán cụ thể để giải quyết vấn đề nhận dạng như : PCA, LDA, ICA, EP, EBGM .... Tuy nhiên vì điều kiện thời gian nên nhóm em chỉ tập trung vào tìm hiểu và làm một ứng dụng nhỏ sử dụng thuật toán đang khá nổi tiếng và thông dụng hiện nay là thuật toán PCA (Principal component analysis) – phân tích thành phần chính . Nội dung trình bày trong báo cáo này ,nhóm em sẽ đi sâu khai thác thuật toán PCA để giải quyết hai vấn đề chính : Thứ nhất : Xác định vị trí những khuôn mặt trong một bức ảnh Thứ hai : Tìm một khuôn mặt giống với khuôn mặt cho trước . Project2 – GVHD : Đỗ Văn Uy Page 4
  • 5. Nhận dạng ảnh sử dụng thuật toán PCA CHƯƠNG I : THƯ VIỆN OPENCV I. Giới Thiệu Về Thư Viện Mã Nguồn Mở OpenCV. OpenCV (Open Computer Vision library) do Intel phát triển, được giới thiệu năm 1999 và hoàn thiện thành phiên bản 1.0 năm 2006. Thư viện OpenCV - gồm khoảng 500 hàm – được viết bằng ngôn ngữ lập trình C và tương thích với các hệ điều hành Windows, Linux, Mac OS... đóng vai trò xác lập chuẩn giao tiếp, dữ liệu, thuật toán cho lĩnh vực CV và tạo điều kiện cho mọi người tham gia nghiên cứu và phát triển ứng dụng. Trước OpenCV không có một công cụ chuẩn nào cho lĩnh vực xử lý ảnh. Các đoạn code đơn lẻ do các nhà nghiên cứu tự viết thường không thống nhất và không ổn định. Các bộ công cụ thương mại như Matlab, Simulink, Halcon, v.v... lại có giá cao chỉ thích hợp cho các công ty phát triển các ứng dụng lớn. Ngoài ra còn có các giải pháp kèm theo thiết bị phần cứng mà phần lớn là mã đóng và được thiết kế riêng cho từng thiết bị, rất khó khăn cho việc mở rộng ứng dụng. OpenCV là công cụ hữu ích cho những người bước đầu làm quen với xử lý ảnh số vì các ưu điểm sau: Project2 – GVHD : Đỗ Văn Uy Page 5
  • 6. Nhận dạng ảnh sử dụng thuật toán PCA - OpenCV là công cụ chuyên dụng: Được Intel phát triển theo hướng tối ưu hóa cho các ứng dụng xử lí và phân tích ảnh, với cấu trúc dữ liệu hợp lý, thư viện tạo giao diện, truy xuất thiết bị phần cứng được tích hợp sẵn. OpenCV thích hợp để phát triển nhanh ứng dụng. - OpenCV là công cụ mã nguồn mở: Không chỉ là công cụ miễn phí (với BSD license), việc được xây dựng trên mã nguồn mở giúp OpenCV trở thành công cụ thích hợp cho nghiên cứu và phát triển, với khả năng thay đổi và mở rộng các mô hình, thuật toán. - OpenCV đã được sử dụng rộng rãi: Từ năm 1999 đến nay, OpenCV đã thu hút được một lượng lớn người dùng, trong đó có các công ty lớn như Microsoft, IBM, Sony, Siemens, Google và các nhóm nghiên cứu ở Standford, MIT, CMU, Cambridge... Nhiều forum hỗ trợ và cộng đồng người dùng đã được thành lập, tạo nên kênh thông tin rộng lớn hữu ích cho việc tham khảo tra cứu. Project2 – GVHD : Đỗ Văn Uy Page 6
  • 7. Nhận dạng ảnh sử dụng thuật toán PCA Hình 1.8 Nhận dạng khuôn mặt với Haar classifier II. Tổ chức thư viện OpenCV Hình 1.7 Tổ chức thư viện OpenCV - CXCORE chứa các định nghĩa kiểu dữ liệu cơ sở. Ví dụ, các cấu trúc dữ liệu cho ảnh, điểm và hình chữ nhật được định nghĩa trong cxtypes.h . CXCORE cũng chứa đại số tuyến tính và phương pháp thống kê, chức năng duy trì và điều khiển chuỗi. Một số ít, các chức năng đồ họa để vẽ trên ảnh cũng được đặt ở đây. - CV chứa các thuật toán về xử lý ảnh và định kích cỡ camera. Các chức năng hình họa máy tính cũng được đặt ở đây. Project2 – GVHD : Đỗ Văn Uy Page 7
  • 8. Nhận dạng ảnh sử dụng thuật toán PCA - CVAUX được mô tả trong tài liệu của OpenCV như chứa các mã cũ và thứ nghiệm. Tuy nhiên, các giao diện đơn cho sự nhận diện ảnh ở trong module này. Code sau này chúng được chuyên dụng cho nhận diện mặt và chúng được ứng dụng rộng rãi cho mục đích đó. - HIGHGUI và CVCAM được đặt trong cùng thư mục là “otherlibs”. + HIGHGUI : chứa các giao diện vào ra cơ bản, nó cũng chứa các khả năng cửa sổ mở rộng và vào ra video. + CVCAM : chứa các giao diện cho video truy cập qua DirectX trên nền Windows 32 bits. Kèm theo thư viện là tài liệu hướng dẫn và các ví dụ mẫu thể hiện một phần các chức năng của công cụ OpenCV. Các chức năng của openCV tập trung vào thu thập ảnh, xử lí ảnh và các thuật toán phân tích dữ liệu ảnh, bao gồm: - Truy xuất ảnh và phim: đọc ảnh số từ camera, từ file, ghi ảnh và phim - Cấu trúc dữ liệu ảnh số và các dữ liệu hỗ trợ cần thiết: ma trận, vector, chuỗi, xâu và cây - Xử lí ảnh căn bản: các bộ lọc có sẵn, tìm chi tiết cạnh, góc, chỉnh đổi màu, phóng to thu nhỏ, và hiệu chỉnh histograms - Xử lí cấu trúc: tìm viền, nhận chuyển động, thay đổi trong không gian 3D, đối chiếu bản mẫu, xấp xỉ các đơn vị hình học cơ sở - mặt phẳng, đa giác, ellipse, đường thẳng... Project2 – GVHD : Đỗ Văn Uy Page 8
  • 9. Nhận dạng ảnh sử dụng thuật toán PCA - Phân tích dữ liệu ảnh: nhận dạng thực thể, theo dõi các chi tiết và phân tích chuyển động - Tạo giao diện đơn giản: hiển thị ảnh, thao tác bàn phím, chuột, thanh trượt để chỉnh thông số (nếu cần thiết các bạn có thể tự tạo thêm các phím điều khiển thông qua thao tác chuột, hoặc tích hợp thêm các thư viện về giao diện như wxWidgets) - Chức năng vẽ, chú thích lên ảnh. III. Hàm cho một số chức năng cụ thể 1.1. Load ảnh. IplImage: kiểu cấu trúc lưu giữthông tin file ảnh cần load, như: định dạng, kích thước, dung lượng, màu sắc,… cvLoadImage(): Hàm load ảnh. cvNamedWindow():Thiết lập cửa sổ để hiện thị ảnh. cvShowImage():Hiển thi ảnh. cvWaitKey(0):Chờ bấm phím bất kỳ để kết thúc chương trình. cvReleaseImage( ):Xóa ảnh cvDestroyWindow( ):Xóa cửa sổ. Project2 – GVHD : Đỗ Văn Uy Page 9
  • 10. Nhận dạng ảnh sử dụng thuật toán PCA 1.2. Chức năng Lọc Nhiễu. cvCreateImage():Tạo 1 ảnh mới có các thông số tương ưng với ảnh gốc. cvSmooth():Thưc hiện bộ lọc trung bình. cvNamedWindow():Tạo cửa sổ hiển thị ảnh. Project2 – GVHD : Đỗ Văn Uy Page 10
  • 11. Nhận dạng ảnh sử dụng thuật toán PCA Project2 – GVHD : Đỗ Văn Uy Page 11
  • 12. Nhận dạng ảnh sử dụng thuật toán PCA 1.3. Đổi màu ảnh. cvCvtColor():Đổi màu ảnh. 1.4. Đọc ảnh từ VIDEO. cvNamedWindow( ):Tạo cửa sổ để hiển thị ảnh. CvCapture:cấu trúc chứa thông tin của File AVI. cvCreateFileCapture(): Lấy thông số từ File Avi được Load. Project2 – GVHD : Đỗ Văn Uy Page 12
  • 13. Nhận dạng ảnh sử dụng thuật toán PCA hệ thống sẽ đọc các ảnh từ đoạn VIDEO và xếp chúng thành một dãy các ảnh động liên tiếp nhau nên ta cũng có cảm giác như đang xem một VIDEO. 1.5. Đọc ảnh từ Camara cvCreateCameraCapture(0): hoạt động tương tự như hàm cvCreateFileCapture() Webcam máy tính sẽ bật lên,hệ thống sẽ nhận ảnh từ CAMERA. Project2 – GVHD : Đỗ Văn Uy Page 13
  • 14. Nhận dạng ảnh sử dụng thuật toán PCA CHƯƠNG II : THUẬT TOÁN PCA I. Ý tưởng Khuôn mặt người có rất nhiều nét để nhận biết , nếu như ta gặp 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 người đó có thể thay đổi như da , mái tóc. Ta nhận ra ngay người đó không phải vì nhớ được đôi mắt , mũi , hay môi , tóc , lông mày mà ta nhận ra vì nhớ được diện mạo của người đó. Tức là 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 . 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 cI.ó thể nói những vector này nằm trong một không gian còn 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 Project2 – GVHD : Đỗ Văn Uy Page 14
  • 15. Nhận dạng ảnh sử dụng thuật toán PCA 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 . II. 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ẽ sở P vector : T1, T2 .. Tp . Tính vector ảnh trung bình : Sự khác biệt giữa những khuôn mặt với ảnh trung bình là những vector : Ai = Ti – m , i = 1 ... P Ý 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 vetor 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 : Project2 – GVHD : Đỗ Văn Uy Page 15
  • 16. Nhận dạng ảnh sử dụng thuật toán PCA Những vector uk và giá trị vô hướng , chính là những vector riêng và trị riêng tương ứng của ma trận AAT có kích thước M*N x 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à 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 PxP . Nếu v là một vector riêng của ATA và là trị riêng tương ứng, khi đó ta có : ATAv = v <=> AATAv = Av Tức 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 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 tương ứng với Q trị riêng lớn nhất trong D . Project2 – GVHD : Đỗ Văn Uy Page 16
  • 17. Nhận dạng ảnh sử dụng thuật toán PCA 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 gọi là Eigenfaces . E là ma trận M*NxQ , 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 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 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 : Độ dài || u – u0 || được gọi là khoảng cách từ u đến W . Project2 – GVHD : Đỗ Văn Uy Page 17
  • 18. Nhận dạng ảnh sử dụng thuật toán PCA Tập hợp ci = <u / ui>, i = 1,...Q được gọi là tọa độ của u0 trong không gian W . Tìm C = ETAi 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 x 1 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 Ci = ETAi là tọa độ của hình chiếu Aif của A lên không gian khuôn mặt . Ta tính hai đại lượng sau :  S = || K – Kf || xem như là khoảng cách từ bức ảnh H đến không gian khuôn mặt  Si = || C- Ci || xem như là khoảng cách từ H đến bức ảnh Ti trong tập huấn luyện Xét a và b là hai ngưỡng nào đó :  s < a thì H là bức ảnh khuôn mặt (do H đủ gần với không gian khuôn mặt )  si < b thì Ti là bức ảnh của cùng một người với H (đủ gần với Ti) . Vậy là ta có thể tìm được 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 trong tập huấn luyện . 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ờ Project2 – GVHD : Đỗ Văn Uy Page 18
  • 19. Nhận dạng ảnh sử dụng thuật toán PCA trong một bức ảnh lớn hơn H có nhiều khuôn mặt ta sẽ xác định vị trí của 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 H có kích thước M x 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 s(x, y) = || K(x, y) - Kf (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 . III. 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 khuôn mặt có kích thước 180 x 200 pixel , dưới đây là một số hình ảnh của những eigenfaces thu được (lưu ý đâ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 ) Project2 – GVHD : Đỗ Văn Uy Page 19
  • 20. Nhận dạng ảnh sử dụng thuật toán PCA Bây giờ ta chiếu hai bức ảnh lên không gian khuôn mặt này : Như ta đã thấy nếu bức ảnh là khuân mặt người thì hình chiếu của nó sẽ khá giống với ảnh gốc , còn khi bức ảnh không phải là người thì hình Project2 – GVHD : Đỗ Văn Uy Page 20
  • 21. Nhận dạng ảnh sử dụng thuật toán PCA chiếu sẽ khác với ả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 có kích thước 18 x 27 pixel , ta cũng tìm các Eigenfaces và sau đó tìm các face map của một bứa ả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 18 x 27 pixel . Project2 – GVHD : Đỗ Văn Uy Page 21
  • 22. Nhận dạng ảnh sử dụng thuật toán PCA Hình trên là map của bức ảnh ban đầu Ta thấy vị trí mỗi khuân mặt 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 của khuôn mặt này , ta thu được kết quả như sau Project2 – GVHD : Đỗ Văn Uy Page 22
  • 23. Nhận dạng ảnh sử dụng thuật toán PCA Hình trên cũng khá giống với face map ứng không gian khuôn mặt nhưng tại mỗi vùng sáng trên 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 thuật toán PCA mới có được độ chính xác yêu cầu . . Project2 – GVHD : Đỗ Văn Uy Page 23
  • 24. Nhận dạng ảnh sử dụng thuật toán PCA CHƯƠNG III : MÔ PHỎNG CHƯƠNG TRÌNH I. Công cụ sử dụng và một số file liên quan 1.1. Thư viện Opencv 2.4.3 - Là thư viện hỗ trợ xử lý hình ảnh 1.2. Công cụ Visual studio C++ 2010 Express - Chúng ta sẽ sử dụng công cụ này để viết ứng dụng bằng C . - Công cụ này cần được cộng thêm thư viện của opencv 2.4.3 1.3. Bộ dữ liệu sử dụng - Hai file : + train.txt : lưu thông tin những ảnh được đưa ra để huấn luyện (bao gồm chỉ số ảnh và đường dẫn đến ảnh) Project2 – GVHD : Đỗ Văn Uy Page 24
  • 25. Nhận dạng ảnh sử dụng thuật toán PCA + test.txt : Lưu chỉ số và đường dẫn các ảnh dùng để kiểm tra . - File facedata.xml chứa các dữ liệu trong quá trình nhận dạng .như số ảnh huấn luyện , vector ảnh trung bình .... - Các thư mục ảnh S1 , S2 , S3 ..... , S40 , trong mỗi thư mục có chứa 10 ảnh của cùng một người trong các trạng thái khác nhau . chương trình sẽ lấy một số ảnh trong các thư mục này để làm đầu vào trong việc huấn luyện và tìm khuôn mặt giống với khuôn mặt cho trước. Project2 – GVHD : Đỗ Văn Uy Page 25
  • 26. Nhận dạng ảnh sử dụng thuật toán PCA - Các ảnh để chúng ta tìm và đánh dấu các khuôn mặt có trong nó test1.jpg, test2.jpg ... II. Các biến , hàm trong sử dụng trong chương trình 2.1. Chức năng tìm khuôn mặt giống với khuôn mặt cho trước Sử dụng các biến toàn cục : - int nTrainFaces : số ảnh được đưa ra để huấn luyện - int nEigens : số các giá trị riêng - IplImage **faceImgArr : mảng chứa các ảnh - IplImage *pAvgTrainImg : ảnh trung bình - IplImage **eigenVecArr : vector riêng - CvMat *personNumTruthMat : mảng chứa các chỉ số ảnh - Cv *projectedTrainFaceMat : lưu trữ các khuôn mặt huấn luyện sau khi chiếu lên không gian con PCA Sử dụng các hàm : - learn() : thực hiện công việc + load dữ liệu (chỉ số và đường dẫn ảnh để huấn luyện trong file train.txt) + thực hiện thuật toán PCA để tìm không gian con + chiếu dữ liệu huấn luyện lên không gian con Project2 – GVHD : Đỗ Văn Uy Page 26
  • 27. Nhận dạng ảnh sử dụng thuật toán PCA + lưu lại tất cả các thông tin (giá trị riêng, vector riêng, ảnh trung bình, chỉ số ảnh , khuôn mặt được chiếu) - recognize() : thực hiện công việc : + load dữ liệu (chỉ số và đường dẫn ảnh để kiểm tra trong file “test.txt”) . + chiếu ảnh cần kiểm tra lên không gian con PCA (dùng hàm cvEigenDecomposite(.....)) + đưa ra kết quả là chỉ số ảnh nhận dạng được theo chương trình và ảnh thực . - doPCA() : khởi tạo các biến số , ma trận ...để làm đầu vào và nhận kết quả đầu ra khi gọi hàm xử lý theo thuật toán PCA (cvCalcEigenObjects(......)) - storeTrainingData() : lưu tất cả dữ liệu vào file “facedata.xml” - loadTrainingData( Cv **pTrainPersonNumMat) : load dữ liệu trong file “facedata.xml” - findNearestNeighbor ( float *projectedTestFace ) : so sánh từng ảnh test với từng ảnh train , tìm và trả lại chỉ số của ảnh train có khoảng cách nhỏ nhất với nó . - loadFaceImgArray(char *filename) : load ảnh cũng như chỉ sổ của nó lưu trữ vào mảng . 2.2. Chức năng tìm và đánh dấu khuôn mặt có trong ảnh Sử dụng các biến toàn cục: - CvHaarClassifierCascade *pCascade : load dữ liệu từ file XML trong opencv - CvMemStorage *pStorage : Bộ nhớ đệm tự động Project2 – GVHD : Đỗ Văn Uy Page 27
  • 28. Nhận dạng ảnh sử dụng thuật toán PCA - CvSeq *pFaceRectSeq : Lưu danh sách các khuôn mặt được xác định trong ảnh - IplImage *pInpImg : lưu ảnh dùng để xác định khuôn mặt Sử dụng các hàm : - cvHaarDetectObjects() : tìm kiếm khuôn mặt có trong ảnh . III. Chạy thử chương trình Sau khi chạy chương trình , màn hình xuất hiện Project2 – GVHD : Đỗ Văn Uy Page 28
  • 29. Nhận dạng ảnh sử dụng thuật toán PCA Ta chọn chức năng 1, màn hình yêu cầu nhập tên file ảnh Nhập tên file ảnh , chương trình cho kết quả Project2 – GVHD : Đỗ Văn Uy Page 29
  • 30. Nhận dạng ảnh sử dụng thuật toán PCA Tắt cửa sổ ảnh , chương trình hỏi bạn có muốn tiếp tục tìm kiếm khuôn mặt nữa không , bạn chọn “y” và nhập tên file ảnh và lặp lại quá trình trên . Nếu không muốn thực hiện thao tác này ta chọn “n” , chương trình hỏi bạn có muốn tiếp tục với chức năng khác không , nếu chon “n” chương trình sẽ dừng , chọn “y” chương trình trở về menu ban đầu . Project2 – GVHD : Đỗ Văn Uy Page 30
  • 31. Nhận dạng ảnh sử dụng thuật toán PCA Ta chọn chức năng 2 Project2 – GVHD : Đỗ Văn Uy Page 31
  • 32. Nhận dạng ảnh sử dụng thuật toán PCA Chọn tiếp chức năng 1. Chương trình hỏi tiếp ta nhập “n” sau đó nhập “y” để đồng ý nhận dạng ảnh, chương trình hiển thị kết quả . Chức năng 2 trong Mục lựa chọn tiếp cũng cho kết quả tương tự . Project2 – GVHD : Đỗ Văn Uy Page 32
  • 33. Nhận dạng ảnh sử dụng thuật toán PCA Project2 – GVHD : Đỗ Văn Uy Page 33
  • 34. Nhận dạng ảnh sử dụng thuật toán PCA KẾT LUẬN 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 các thuật toán khác . Thực tế có rất nhiều tác giả đã áp dụng thuật toán PCA , kết hợp với những phương pháp như mạng neuralb , xác xuất thông kê để xây dựng những thuật toán có độ chính xác cao . Ưu điểm của thuật toán PCA là nó 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 vào 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 . Khuyết điểm của PCA là các mẫu khuôn mặt luâ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 gồm nhiều nhóm hình , mỗi nhóm hình là hình của một người với tư thế và độ sáng khác nhau . 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 đễ dàng cho việc mô tả đặc trưng 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ó Project2 – GVHD : Đỗ Văn Uy Page 34
  • 35. Nhận dạng ảnh sử dụng thuật toán PCA thể PCA không phải là 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 dạng mặt người . TÀI LIỆU THAM KHẢO https://en.wikipedia.org/wiki/Principal_component_analysis http://www.cognotics.com/opencv/servo_2007_series/part_2/index.html http://www.bytefish.de/blog/pca_in_opencv/ http://www.pages.drexel.edu/~nk752/tutorials.html http://dphtuan.uphero.com/dphtuannews/posts Project2 – GVHD : Đỗ Văn Uy Page 35