1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nhận dạng ảnh sử dụng thuật toán PCA

34 2,2K 12

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 3,85 MB

Nội dung

Nhận dạng ảnh sử dụng thuật toán PCA

Trang 1

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 2

Giảng viên hướng dẩn : ThS Đỗ Văn Uy

Hà Nội: 04-2013

Trang 2

MỤC LỤC

Trang 3

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 Tuynhiê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

Trang 4

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, đượcgiớ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ườngkhô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áccô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èmtheo thiết bị phần cứng mà phần lớn là mã đóng và được thiết kế riêngcho từng thiết bị, rất khó khăn cho việc mở rộng ứng dụng

Trang 5

dữ liệu hợp lý, thư viện tạo giao diện, truy xuất thiết bị phần cứng đượctí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 OpenCVtrở thành công cụ thích hợp cho nghiên cứu và phát triển, với khả năngthay đổ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áccông ty lớn như Microsoft, IBM, Sony, Siemens, Google và các nhómnghiê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ộnglớn hữu ích cho việc tham khảo tra cứu

Hình 1.8 Nhận dạng khuôn mặt với Haar classifier

Trang 6

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

Trang 7

- 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ậndiệ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à

- 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ônggian 3D, đối chiếu bản mẫu, xấp xỉ các đơn vị hình học cơ sở - mặtphẳng, đa giác, ellipse, đường thẳng

Trang 8

- 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êmcác phím điều khiển thông qua thao tác chuột, hoặc tích hợp thêm cácthư 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ể

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,…

Trang 9

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.

Trang 11

1.3. Đổi màu ảnh.

cvCvtColor():Đổi màu ảnh.

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.

Trang 12

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.

Trang 13

CHƯƠNG II : THUẬT TOÁN PCA

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

Trang 14

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

Trang 15

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 = AvTứ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

Trang 16

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 :

Trang 17

Tập hợp ci = <u / ui>, i = 1, Q được gọi là tọa độ của u0 trong khônggian W

Tìm C = ETAi là tọa độ của hình chiểu Kf của K lên không gian khuônmặ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ờ

Trang 18

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

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 )

Trang 19

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 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 đó

Trang 20

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

Trang 21

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

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

Trang 22

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

Trang 23

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

+ test.txt : Lưu chỉ số và đường dẫn các ảnh dùng để kiểm tra

Trang 24

- File facedata.xml chứa các dữ liệu trong quá trình nhậndạ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

- Các ảnh để chúng ta tìm và đánh dấu các khuôn mặt có

Trang 25

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+ 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

Trang 26

- 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ậttoá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

Trang 27

Sau khi chạy chương trình , màn hình xuất hiện

Ta chọn chức năng 1, màn hình yêu cầu nhập tên file ảnh

Trang 28

Nhập tên file ảnh , chương trình cho kết quả

Trang 29

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

Trang 30

Ta chọn chức năng 2

Trang 31

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ự

Trang 33

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ụnghoà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à

đã 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ó

Trang 34

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.htmlhttp://www.bytefish.de/blog/pca_in_opencv/

http://www.pages.drexel.edu/~nk752/tutorials.html

http://dphtuan.uphero.com/dphtuannews/posts

Ngày đăng: 22/11/2015, 16:15

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w