Nhận Dạng Mặt Người Dùng ICA

72 133 3
Nhận Dạng Mặt Người Dùng ICA

Đ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

Luận Văn Nhận Dạng Mặt Người Dùng ICA Chương 1 GIỚI THIỆU 1.Giới thiệu chung Xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ. Nó là một ngành khoa học khá mới mẻ so với nhiều ngành khoa học khác nhưng tốc độ phát triển của nó rất nhanh; kích thích các trung tâm nghiên cứu, ứng dụng, đặc biệt là máy tính chuyên dụng riêng của nó. Các phương pháp xử lý ảnh bắt đầu từ các ứng dụng chính: nâng cao chất lượng ảnh và phân tích ảnh. Ứng dụng đầu tiên được biết đến là việc nâng cao chất lượng hình ảnh báo truyền qua giữa đường cáp London và NewYork vào năm 1920. Tuy nhiên việc xử lý, nâng cao chất lượng ảnh ban đầu còn rất sơ khai, chỉ đơn giản là xử lý phân bố các mức sáng (Mức xám và độ phân giải của ảnh). Việc nâng cao chất lượng ảnh được phát triển vào khoảng những năm 1955. Điều này có thể giải thích được vì sau thế chiến thứ hai, máy tính phát triển nhanh tạo điều kiện cho quá trình xử lý ảnh số thuận lợi. Năm 1964, máy tính đã có khả năng xử lý và nâng cao chất lượng ảnh từ mặt trăng và vệ tinh Ranger 7 của Mỹ bao gồm: làm nổi đường biên, lưu ảnh. Từ năm 1964 đến nay, các phương tiện xử lý, nâng cao chất lượng, nhận dạng ảnh phát triển không ngừng. Các phương pháp tri thức nhân tạo như mạng neural nhân tạo, các thuật toán xử lý hiện đại và cải tiến, các công cụ nén ảnh ngày càng được áp dụng rộng rãi và thu nhiều kết quả khả quan. Trong y học, các thuật toán máy tính nâng cao độ tương phản, hoặc mã hóa các mức sáng thành các màu để nội suy ảnh Xquang và các ảnh y sinh học dễ dàng. Các nhà địa vật lý dùng kỹ thuật tương tự để nghiên cứu các mẫu vật chất từ ảnh vệ tinh. Trong thiên văn học, các phương pháp xử lý ảnh nhằm khôi phục ảnh bị nhiễu hoặc bị mất do bóng sau khi chụp. Trong vật lý, người ta dùng kỹ thuật xử lý ảnh để nâng cao chất lượng ảnh trong các lĩnh vực như plasmas và microscopy điện tử. Ngoài ra, xử lý ảnh còn xử dụng rộng rãi trong viễn thám, sinh học, y tế, hạt nhân, quân sự, công nghiệp,… Những vấn đề cơ bản của kỹ thuật xử lý ảnh được ứng dụng nhiều trong thực tế có thể kể đến như: tự động nhận dạng đặc trưng, máy nhìn công nghiệp để điều khiển và kiểm tra sản phẩm, nhận dạng mục tiêu quân sự, nhận dạng vân tay, hiển thị lên màn hình ảnh Xquang và các mẫu máu, xử lý ảnh chụp từ vệ tinh để dự báo thời tiết, nén ảnh để lưu trữ và truyền dữ liệu trong truyền hình Một trong những ứng dụng của xử lý ảnh là nhận dạng mặt người. Lĩnh vực này ngày càng thu hút sự quan tâm của nhiều nhà khoa học. Trên thế giới lĩnh

ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HCM KHOA CÔNG NGHỆ ĐIỆN TỬ  ĐỀ TÀI: GVHD: SVTH: LỚP: MSSV: Th.S PHẠM THÀNH DANH TRẦN NGỌC TRÍ ĐHĐT1B 05031811 TP.HCM, ngày tháng năm 2009 Chương GIỚI THIỆU 1.Giới thiệu chung Xử lý ảnh lĩnh vực mang tính khoa học cơng nghệ Nó ngành khoa học mẻ so với nhiều ngành khoa học khác tốc độ phát triển nhanh; kích thích trung tâm nghiên cứu, ứng dụng, đặc biệt máy tính chuyên dụng riêng SV: TRẦN NGỌC TRÍ MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH Các phương pháp xử lý ảnh ứng dụng chính: nâng cao chất lượng ảnh phân tích ảnh Ứng dụng biết đến việc nâng cao chất lượng hình ảnh báo truyền qua đường cáp London NewYork vào năm 1920 Tuy nhiên việc xử lý, nâng cao chất lượng ảnh ban đầu sơ khai, đơn giản xử lý phân bố mức sáng (Mức xám độ phân giải ảnh) Việc nâng cao chất lượng ảnh phát triển vào khoảng năm 1955 Điều giải thích sau chiến thứ hai, máy tính phát triển nhanh tạo điều kiện cho trình xử lý ảnh số thuận lợi Năm 1964, máy tính có khả xử lý nâng cao chất lượng ảnh từ mặt trăng vệ tinh Ranger Mỹ bao gồm: làm đường biên, lưu ảnh Từ năm 1964 đến nay, phương tiện xử lý, nâng cao chất lượng, nhận dạng ảnh phát triển không ngừng Các phương pháp tri thức nhân tạo mạng neural nhân tạo, thuật toán xử lý đại cải tiến, công cụ nén ảnh ngày áp dụng rộng rãi thu nhiều kết khả quan Trong y học, thuật tốn máy tính nâng cao độ tương phản, mã hóa mức sáng thành màu để nội suy ảnh X-quang ảnh y sinh học dễ dàng Các nhà địa vật lý dùng kỹ thuật tương tự để nghiên cứu mẫu vật chất từ ảnh vệ tinh Trong thiên văn học, phương pháp xử lý ảnh nhằm khôi phục ảnh bị nhiễu bị bóng sau chụp Trong vật lý, người ta dùng kỹ thuật xử lý ảnh để nâng cao chất lượng ảnh lĩnh vực plasmas microscopy điện tử Ngoài ra, xử lý ảnh xử dụng rộng rãi viễn thám, sinh học, y tế, hạt nhân, quân sự, công nghiệp,… Những vấn đề kỹ thuật xử lý ảnh ứng dụng nhiều thực tế kể đến như: tự động nhận dạng đặc trưng, máy nhìn cơng nghiệp để điều khiển kiểm tra sản phẩm, nhận dạng mục tiêu quân sự, nhận dạng vân tay, hiển thị lên hình ảnh X-quang mẫu máu, xử lý ảnh chụp từ vệ tinh để dự báo thời tiết, nén ảnh để lưu trữ truyền liệu truyền hình Một ứng dụng xử lý ảnh nhận dạng mặt người Lĩnh vực ngày thu hút quan tâm nhiều nhà khoa học Trên giới lĩnh SV: TRẦN NGỌC TRÍ MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH vực nghiên cứu từ lâu song Việt Nam lĩnh vực mới, tài liệu hạn chế Giới thiệu đề tài Từ sinh ra, người có khả nhận diện phân biệt khuôn mặt Tuy nhiên, việc xây dựng thuật toán nhận dạng mặt người ứng dụng hệ thống tự động khó gương mặt người phức tạp, nhiều chiều nhiều trạng thái cảm xúc phức tạp… Góp phần tìm hiểu vấn đề thực đề tài “ Nhận dạng mặt người ICA” Do tính phức tạp việc nhận dạng mặt người nên đề tài sử dụng ảnh mặt người (Các thành phần phụ lược bỏ bớt ) Phương pháp nhận dạng sử dụng dựa vào thuật toán ICA ( Independent Component Analysis - Phân tích thành phần độc lập) ICA lý thuyết giới thiệu vào thập kỷ 80 phạm vi mơ hình mạng neural Thập kỷ 90, số nhóm nhà nghiên cứu đưa thêm thuật tốn có tính khả thi cao gây ấn tượng sâu sắc việc giải vấn đề toán Cocktail-party Do ICA bắt đầu ứng dụng rộng rãi lĩnh vực thống kê xử lý số liệu… Cụ thể như: xử lý tín hiệu sinh học, phân tách tín hiệu âm truyền thơng, chuẩn đốn lỗi, trích đặc trưng, phân tích kế tốn, nhiều ứng dụng khác nghiên cứu phát triển Một số kết đạt nhận dạng mặt người Cho đến nay, giới tiến hành nghiên cứu nhận dạng mặt người với độ mong muốn đạt độ xác cao cho hệ thống nhận dạng, đạt độ tin cậy tốt để đưa hệ thống vào hoạt động thực tiễn Tuy nhiên nhình chung kết đạt độ xác 90% SV: TRẦN NGỌC TRÍ MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH Chương MATLAB XỬ LÝ ẢNH Giới thiệu chung matlab MATLAB có nguồn gốc từ chữ matrix laboratory, Cleve Moler phát minh vào cuối thập niên 1970, chủ nhiệm khoa máy tính Đại học New Mexico, ngơn ngữ máy tính dùng để tính tốn kỹ thuật Trải qua nhiều phiên bản, năm 2004 MATLAB phát hành, có khả xác đơn kiểu nguyên, hỗ trợ hàm lồng nhau, công cụ vẽ điểm, phát triển thuật tốn tương tác SV: TRẦN NGỌC TRÍ MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH Ban đầu MATLAB lập để giải phép tốn ma trận, điều làm cho MATLAB có ứng dụng lớn nhiều ngành kỹ thuật khác so với ngơn ngữ lập trình khác tính tốn số vơ hướng MATLAB kết hợp tính tốn lập trình đồ họa mơi trường phát triển tương tác, thời gian lập trình phần nhỏ so với ngơn ngữ lập trình khác nhờ vào hàm có sẵn MATLAB sản phẩm công ty The Mathworks Inc với địa www.mathworks.com sử dụng MATLAB phải có quyền Tuy nhiên có nhiều hàm MATLAB viết người sử dụng phổ biến mạng giúp MATLAB ngày phong phú 1.1 Các đặc điểm MATLAB Là ngơn ngữ bậc cao dùng cho tính tốn kỹ thuật Là mơi trường phát triển để quản lý liệu Gồm nhiều công cụ tương tác cho việc khai thác xử lý liệu, thiết kế giải vấn đề Các hàm đồ thị ảnh chiều cho phép hình ảnh hóa liệu Chứa cơng cụ để xây dựng giao diện đồ thị người sử dụng Gồm nhiều hàm chức dựa giải thuật sở nhằm tích hợp MATAB với ứng dụng ngơn ngữ lập trình khác như: C, C++, Fortran, Java, Microsoft excel… 1.2 Phát triển giải thuật ứng dụng MATLAB ngơn ngữ bậc cao tích hợp công cụ phát triển giúp người sử dụng phát triển phân tích giải thuật ứng dụng cách nhanh chóng Ngơn ngữ lập trình MATLAB hỗ trợ phép toán ma trận vector sở cho vấn đề kỹ thuật khoa học Việc lập trình phát triển giải thuật MATLAB có tốc độ nhanh so với ngơn ngữ lập trình truyền thống MATLAB bỏ qua công việc điều khiển bậc thấp khai báo biến, khai báo mẫu liệu xác SV: TRẦN NGỌC TRÍ MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH định vùng nhớ Trong nhiều trường hợp, MATLAB bỏ qua cần thiết vòng lặp “for” Kết là, dòng lệnh viết MATLAB tương đương với nhiều dòng lệnh C hay C++ Là công cụ lập trình mạnh, MATLAB hỗ trợ đặc tính ngơn ngữ lập trình truyền thống như: tốn tử số học, cấu trúc vòng, cấu trúc dạng liệu đặc tính gỡ rối VD: Chương trình biểu diễn thuật tốn điều chế tín hiệu truyền thơng tạo 1024 điểm, thực điều chế, thêm nhiễu phức Gauss vẽ lại kết % tạo vector N bit N = 1024; bits = rand(N,1)>0.5; % chuyen sang ky tu Tx=1-2*bits; %them vao nhieu Gauss trang P=0.4 Nz=P*(randn(N,1)+i*randn(N,1)); Rx= Tx + Nz; %hien thi ket qua plot(Rx,'.'); axix([-2 -2 2]); axis square, grid; Hình 1.1 SV: TRẦN NGỌC TRÍ MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH Trong phần lớn ngơn ngữ lập trình truyền thống phải trải qua giai đoạn dịch (compilation) liên kết (linking) MATLAB cho phép người sử dụng thực thi lệnh nhóm lệnh lúc Điều làm cho tốc độ xử lý MATLAB nhanh đáng kể so với ngôn ngữ truyền thống 1.3 Phân tích tiếp cận liệu Trong q trình phân tích liệu, MATLAB hỗ trợ hầu hết công đoạn như: thu nhận liệu từ thiết bị ngoại vi, phân tích số học, tiền xử lý, hình ảnh hóa… Phân tích liệu: Chương trình MATLAB cung cấp cơng cụ tương tác hàm điều khiển theo dòng cho việc tính tốn phân tích liệu bao gồm:  Các phép nội suy  Trích chọn tính chất  Chọn ngưỡng lọc nhiễu  Tương quan, phân tích Fourier lọc  Phát điểm đỉnh, đáy điểm khơng  Thống kê chuẩn hóa đường cong  Phân tích ma trận 1.4 Tiếp cận liệu Việc tiếp cận liệu từ thư mục, ứng dụng, sở liệu thiết bị ngoại vi MATLAB dễ dàng MATLAB hỗ trợ nhiều loại định dạng file: ASCII, nhị phân, file hình ảnh âm hay chí file định dạng HDF Trong MATLAB có nhiều hộp công cụ (toolbox) hỗ trợ cho việc tiếp cận liệu như: hộp công cụ sở liệu (Database Toolbox), hộp công cụ thu nhận liệu (Data Acquisition Toolbox) hay hộp công cụ điều khiển thiết bị (Instrument Control Toolbox) SV: TRẦN NGỌC TRÍ MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH 1.5 Hình ảnh hóa liệu Tất đặc tính hình ảnh cần thiết cho hình ảnh hóa liệu khoa học kỹ thuật tích hợp MATLAB Những đặc tính bao gồm: hàm vẽ ảnh chiều, hàm vẽ thể tích chiều, cơng cụ tương tác tạo ảnh, khả xuất kết dạng file ảnh thông thường VD: vẽ hàm y= sin(x) với -pi < x < pi Mã chương trình: >>x = -pi:.1:pi; >>y = sin(x); >> plot (x, y) Hình 1.2 Đồ thị hàm y = sin(x) 1.6 Xuất kết triển khai ứng dụng MATLAB đưa nhiều đặc tính giúp báo cáo chia sẻ công việc Các đoạn code viết MATLAB tích hợp với ngơn ngữ ứng dụng khác Đồng thời triển khai thuật toán ứng dụng chương trình khối phần mềm riêng biệt Xuất kết quả: Sau hoàn thành công việc, người sử dụng cần xuất kết thường dạng hình ảnh báo cáo MATLAB có hỗ trợ file SV: TRẦN NGỌC TRÍ MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH hình ảnh với nhiều định dạng khác việc xuất kết dạng đồ thị hay file ảnh dễ dàng Ngồi ra, muốn chuyển code từ MATLAB dạng khác: HTML, Word, Latex… Kết hợp mã MATLAB với loại ngôn ngữ ứng dụng khác: MATLAB cung cấp sẵn hàm cho việc kết hợp mã ngơn ngữ lập trình khác C, C++, Fortran hay Java với mã chương trình Sử dụng thư viện công cụ (engine library) MATLAB, người sử dụng gọi đoạn mã từ C, C++ hay Fortran Triển khai ứng dụng: Các sản phẩm sau xử lý MATLAB thường đoạn mã Các đoạn mã cung cấp cho người khác ứng dụng vào sản phẩm phần cứng phần mềm cụ thể Xử lý ảnh (số) khái niệm liên quan 2.1 Xử lý ảnh (số) Xử lý ảnh (số) dạng xử lý tín hiệu đầu vào hình ảnh (các ảnh, khung hình) đầu q trình xử lý ảnh hình ảnh khác tập chứa tính chất tham số liên quan tới hình ảnh Phần lớn kỹ thuật xử lý ảnh thường quy việc xử lý hình ảnh tín hiệu hai chiều sử dụng kỹ thuật xử lý tín hiệu để xử lý Hình mô tả bước xử lý ảnh Hình 1.3 Các bước xử lý ảnh SV: TRẦN NGỌC TRÍ MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH 2.1.1 Phần thu nhận ảnh (Image Acquisition) Ảnh nhận qua camera màu đen trắng Thường ảnh nhận qua camera ảnh tương tự có loại camera số hố Camera thường dùng loại quét dòng; ảnh tạo có dạng hai chiều Chất lượng ảnh thu nhận phụ thuộc vào thiết bị thu, vào môi trường (ánh sáng, phong cảnh) Do ảnh đầu thiết bị thu nhận ảnh ảnh số hay ảnh tương tự nên ta cần chuẩn hóa chúng ảnh số để tiện sử lý Tiếp theo ảnh mã hóa lưu lại trước vào trình tiền sử lý Đây trình định dạng cho ảnh Quá trình phải đảm bảo cho thơng tin quan trọng ảnh cấu trúc, kích thước, màu sắc… không bị sai lệch so với ảnh gốc Lúc ảnh xử lý máy tính dạng số Tùy thuộc vào tiêu chuẩn khác có cách định dạng khác Dưới số định dạng: Ảnh Bitmap – Microsoft Windows Bitmap (*.bmp): Ảnh Bitmap ảnh định dạng theo chuẩn Microsoft đưa Với định dạng ảnh đươc chuyển mã lưu lại đầy đủ thông tin Tuy nhiên định dạng thông tin ảnh không nén lại nên dung lượng thường lớn Dung lượng tập tin Bitmap phụ thuộc nhiều vào số lượng màu sắc ảnh Ảnh GIF – Graphic Interchanger Format (*.gif): Ảnh Gif ảnh định dạng theo chuẩn nén LZW dựa lặp lại số nhóm điểm ảnh thay mã loạt dài định dạng khác nên dung lượng lưu trữ nhỏ Ảnh gif thường dùng để lưu trữ ảnh đơn giản có chuyển đổi màu vùng ảnh ảnh đồ họa hay đồ thị, biểu đồ…Tuy nhiên định dạng cho chất lượng ảnh cao, độ phân giải cao, hiển thị hầu hết phần mềm đồ họa SV: TRẦN NGỌC TRÍ 10 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH [1] A.Hyvarinen and E.Oja, Independent Component Analysis: Algorithms And Application, Neural Networks 411- 430, 2000 [2] A.Hyvarinen, Survey on independent component analysis, Neural Computing Surveys, 94–128, 2000 [3] Gonzalez, Woods, & Eddins Digital Image Processing Using MATLAB [4] Hyvarinen, A Fast and robust fixed-point algorithm for Independent Component Analysis, IEEE Transactions on Neural Networks, 2001 [5] Hyvarinen, J.Karhunen, and E.Oja, Independent Component Analysis, John Wiley & Sons, 2001 [6] M Turk and A Pentland Eigenfaces for recognition Journal of Cognitive Neuroscience, 1991 [7] Marian Stewart Bartlett, Javier R Movellan, and Terrence J Sejnowski, Face Recognition by Independent Component Analysis Ieee Transactions On Neural Networks, Vol 13, No 6, November 2002 [8] Issam Dagher and Rabih Nachar Face Recognition Using IPCAICA Algorithm Ieee Transactions On Pattern Analysis And Machine Intelligence, Vol 28, No 6, June 2006 Và số tài liệu khác có liên quan Phụ lục : code chương trình SV: TRẦN NGỌC TRÍ 58 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH function varargout = LUANVAN(varargin) % LUANVAN M-file for LUANVAN.fig % LUANVAN, by itself, creates a new LUANVAN or raises the existing % singleton* % % H = LUANVAN returns the handle to a new LUANVAN or the handle to % the existing singleton* % % LUANVAN('CALLBACK',hObject,eventData,handles, ) calls the local % function named CALLBACK in LUANVAN.M with the given input arguments % % LUANVAN('Property','Value', ) creates a new LUANVAN or raises the % existing singleton* Starting from the left, property value pairs are % applied to the GUI before LUANVAN_OpeningFunction gets called An % unrecognized property name or invalid value makes property application % stop All inputs are passed to LUANVAN_OpeningFcn via varargin % % *See GUI Options on GUIDE's Tools menu Choose "GUI allows only one % instance to run (singleton)" % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help LUANVAN % Last Modified by GUIDE v2.5 11-Jul-2009 07:34:05 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @LUANVAN_OpeningFcn, 'gui_OutputFcn', @LUANVAN_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); SV: TRẦN NGỌC TRÍ 59 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % - Executes just before LUANVAN is made visible function LUANVAN_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to LUANVAN (see VARARGIN) % Choose default command line output for LUANVAN handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes LUANVAN wait for user response (see UIRESUME) % uiwait(handles.figure1); % - Outputs from this function are returned to the command line function varargout = LUANVAN_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % - Executes on button press in HL SV: TRẦN NGỌC TRÍ 60 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH function HL_Callback(hObject, eventdata, handles) % hObject handle to HL (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) TrainICA % - Executes on button press in CL function CL_Callback(hObject, eventdata, handles) % hObject handle to CL (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) close LUANVAN; % - Executes on button press in ND function ND_Callback(hObject, eventdata, handles) % hObject handle to ND (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) nhandangICA function varargout = TrainICA(varargin) % TRAINICA M-file for TrainICA.fig % TRAINICA, by itself, creates a new TRAINICA or raises the existing % singleton* % % H = TRAINICA returns the handle to a new TRAINICA or the handle to % the existing singleton* % % TRAINICA('CALLBACK',hObject,eventData,handles, ) calls the local % function named CALLBACK in TRAINICA.M with the given input arguments % % TRAINICA('Property','Value', ) creates a new TRAINICA or raises the % existing singleton* Starting from the left, property value pairs are % applied to the GUI before TrainICA_OpeningFunction gets called An % unrecognized property name or invalid value makes property application % stop All inputs are passed to TrainICA_OpeningFcn via varargin % SV: TRẦN NGỌC TRÍ 61 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH % *See GUI Options on GUIDE's Tools menu Choose "GUI allows only one % instance to run (singleton)" % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help TrainICA % Last Modified by GUIDE v2.5 11-Jul-2009 07:30:00 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @TrainICA_OpeningFcn, 'gui_OutputFcn', @TrainICA_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % - Executes just before TrainICA is made visible function TrainICA_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to TrainICA (see VARARGIN) % Choose default command line output for TrainICA handles.output = hObject; % Update handles structure SV: TRẦN NGỌC TRÍ 62 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH guidata(hObject, handles); set(handles.text1,'String','Trainning '); % UIWAIT makes TrainICA wait for user response (see UIRESUME) % uiwait(handles.figure1); % - Outputs from this function are returned to the command line function varargout = TrainICA_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % - Executes on button press in Trainning function Trainning_Callback(hObject, eventdata, handles) % hObject handle to Trainning (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % -%Nperson SO NGUOI TRONG CO SO DU LIEU %Nimages SO ANH CUA MOI NGUOI TRONG CO SO DU LIEU set(handles.text1,'String','Tranning ??? '); %set(handles.Process,'String','Dang xu ly '); % -%DOC ANH TU CO SO DU LIEU CO SAN TRONG MAY %(Nperson*Nimages) LA TONG SO ANH TRONG CO SO SU LIEU Npeople =12; Nimages =17; a=0; KT= imread('faces/1/1.jpg'); [S1 S2 S3]=size(KT); for i = 1:Npeople for j = 1:Nimages SV: TRẦN NGỌC TRÍ 63 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH a=a+1; %DIA CHI TRUY XUAT CUA TUNG ANH A=sprintf('faces/%d/%d.jpg',i,j); %TT%d LA ANH THU i VOI i=1 >(Nperson*Nimages) X=sprintf('FACE%d=imread(A);',a); eval(X); if S3>1 AA=sprintf('FACE%d=rgb2gray(FACE%d);',a,a); eval(AA); end; %San bang histogram: san bang sang toi Y=sprintf('FACE%d=histeq(FACE%d,256);',a,a); eval(Y); end; end; % -%CHUYEN MA TRAN ANH S1xS2 THANH MA TRA ANH S1S2x1 % KICH THUOC CUA MA TRAN ANH S1:hang, S2:cot [S1 S2 S3]=size(FACE1); TF=[]; a=0; for i=1:(Npeople*Nimages) A=sprintf('reshape(FACE%d,%d,%d);',i,S1*S2,1); C=eval(A); D=double(C); B=sprintf('TF=[TF D];'); eval(B); end; TF=double(TF); % -% Returns a zero-mean form of the matrix [X Xtb]=zeroMatrix(TF); % -%M Best eigenfaces and eigenvalues M=100; [E,D]=bestEIG(X,M); % -%trang hoa ma tran X E=double(E); D=double(D); X=double(X); SV: TRẦN NGỌC TRÍ 64 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH Z1=(D^(-0.5)); Z2=E'*X; Z=Z1*Z2; % -%Tim bo thong so train W n=0; [W n]=Fast(Z); save('datatrain','E','W','X','Xtb','Npeople','Nimages'); set(handles.text1,'String','Completing'); % - Executes on button press in Cl function Cl_Callback(hObject, eventdata, handles) % hObject handle to Cl (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) close TrainICA; function varargout = nhandangICA(varargin) % NHANDANGICA M-file for nhandangICA.fig % NHANDANGICA, by itself, creates a new NHANDANGICA or raises the existing % singleton* % % H = NHANDANGICA returns the handle to a new NHANDANGICA or the handle to % the existing singleton* % % NHANDANGICA('CALLBACK',hObject,eventData,handles, ) calls the local % function named CALLBACK in NHANDANGICA.M with the given input arguments % % NHANDANGICA('Property','Value', ) creates a new NHANDANGICA or raises the % existing singleton* Starting from the left, property value pairs are % applied to the GUI before nhandangICA_OpeningFunction gets called An % unrecognized property name or invalid value makes property application SV: TRẦN NGỌC TRÍ 65 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP % GVHD: THS PHẠM THÀNH DANH stop All inputs are passed to nhandangICA_OpeningFcn via varargin % % *See GUI Options on GUIDE's Tools menu Choose "GUI allows only one % instance to run (singleton)" % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help nhandangICA % Last Modified by GUIDE v2.5 29-Jun-2009 08:28:29 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @nhandangICA_OpeningFcn, 'gui_OutputFcn', @nhandangICA_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % - Executes just before nhandangICA is made visible function nhandangICA_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to nhandangICA (see VARARGIN) % Choose default command line output for nhandangICA %UIIIIIIIIIIIIIIIIIIIIIII SV: TRẦN NGỌC TRÍ 66 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH %hhjhhjjjjjjjjjjjjjjjjjjjj handles.output = hObject; % Update handles structure guidata(hObject, handles); S=ones(240,320); varargout{1} = handles.output; axes(handles.axes1); imshow(S); handles.S = S; guidata(hObject, handles); S=ones(240,320); varargout{1} = handles.output; axes(handles.axes2); imshow(S); % UIWAIT makes nhandangICA wait for user response (see UIRESUME) % uiwait(handles.figure1); % - Outputs from this function are returned to the command line function varargout = nhandangICA_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % - Executes on button press in pushbutton1 function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % - Executes on button press in pushbutton2 function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB SV: TRẦN NGỌC TRÍ 67 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP % handles GVHD: THS PHẠM THÀNH DANH structure with handles and user data (see GUIDATA) % - Executes on button press in pushbutton3 function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) S=ones(240,320); varargout{1} = handles.output; axes(handles.axes1); imshow(S); varargout{1} = handles.output; axes(handles.axes2); imshow(S); % - Executes on button press in pushbutton4 function pushbutton4_Callback(hObject, eventdata, handles) % hObject handle to pushbutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) close nhandangICA; % - Executes during object creation, after setting all properties function pushbutton4_CreateFcn(hObject, eventdata, handles) % hObject handle to pushbutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % - Executes on button press in Get_image function Get_image_Callback(hObject, eventdata, handles) % hObject handle to Get_image (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) S=ones(240,320); varargout{1} = handles.output; axes(handles.axes2); imshow(S); [file_name file_path] = uigetfile ('*.jpg'); SV: TRẦN NGỌC TRÍ 68 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH if file_path ~= guidata(hObject, handles); S=imread ([file_path,file_name]); varargout{1} = handles.output; axes(handles.axes1); imshow(S); handles.S = S; imwrite(S,'facetest/test.jpg'); end % - Executes on button press in Trainning function Check_Image_Callback(hObject, eventdata, handles) % hObject handle to Check_Image (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) load('datatrain','E','W','X','Xtb','Npeople','Nimages'); Btrain=E'*X; Btrain=W*Btrain; % -%Test anh dau vao voi co so du lieu co san FACEtest=imread('facetest\test.jpg'); [S1 S2 S3]= size(FACEtest); if S3>1 AA=sprintf('FACEtest=rgb2gray(FACEtest);'); eval(AA); end; FACEtest=histeq( FACEtest,256); A=sprintf('reshape(FACEtest,%d,%d);',S1*S2,1); Xtest=eval(A); Btest=[]; Xtest=double(Xtest)-double(Xtb); Btest=E'*Xtest; Btest=W*Btest; for i=1:Npeople*Nimages co=Btrain(:,i); coss(i)=norm(Btest-co); end; costest= min(coss) for i=1:Nimages*Npeople SV: TRẦN NGỌC TRÍ 69 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH if coss(i)==costest vitri=i; end; end; a=(vitri- mod(vitri,Nimages))/Nimages; if costest 0 a=a+1; end; A=sprintf('faces/%d/4.jpg',a); X=sprintf('S=imread(A);'); eval(X); varargout{1} = handles.output; axes(handles.axes2); imshow(S); handles.S = S; imwrite(S,'facetest/kq.jpg'); else S=imread('facetest/No.jpg'); varargout{1} = handles.output; axes(handles.axes2); imshow(S); end; % set(handles.Process,'String','OK'); % %function Xzm = zeroMn(X) %Returns a zero-mean form of the matrix X Each row of Xzm will have %zero mean, same as in spherex.m For PCA, put the observations in cols %before doing zeroMn(X) function [Xzm Xtb] = zeroMatrix(X); [N,P] = size(X); mx=mean(X'); Xtb=mx'; Xzm=X-(ones(P,1)*mx)'; function [W n]=Fast(X) %W: Ma tran so ket qua qua trinh fast ICA %X: Ma tran da trang hoa qua trinh tien xu ly SV: TRẦN NGỌC TRÍ 70 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH %M: So luong phan cua W X=X'; [M N]=size(X); W=[]; n=0; for i=1 : N v=X(:,i); w=X(:,i); %w=rand(N,1); for j=1:30 wnew = sum(v*tanh(w'*v)) -3*sum((cos(w'*v))^(-2))*w; a=0; if i>1 for k=1:(i-1) a=a+(wnew'*W(:,k))*W(:,k); end; end; wnew=wnew-a; wnew = wnew/norm(wnew); w=wnew; end; W=[W wnew ]; end; %M eigenvector ung voi M bestest eigenvalues from C=B*B' %kich thuoc N^2*N^2 function [E,D]=bestEIG(B,M) E=[];% M eigenvector ung voi M bestest eigenvalues from N_images input D=[];%M bestest eigenvalues DD=[]; EE=[]; %********Find eigenvectors vi of B'*B (N)N:Tong so anh %Find N eigenvector and N eignvalues %Moi hang cua V nung voi mot tri rieng tren D %Tri rieng tren D xep tu thap den cao [V,D] = eig (B'*B); [N,P] = size(B); %Sort eigenvectors eigval = fliplr(D); eigvec = fliplr(V); %Take M eigenvector and M eignvalues bestest % tu cho SV: TRẦN NGỌC TRÍ 71 MSSV: 05031811 ĐỒ ÁN TỐT NGHIỆP GVHD: THS PHẠM THÀNH DANH D= eigval(:,1:M); for i=1 : M DD=[DD (fliplr((D(:,i))'))']; end DD=DD(1:M,:); D=DD; E= eigvec(:,1:M); for i=1 : M EE=[EE B*E(:,i)]; end E=EE; SV: TRẦN NGỌC TRÍ 72 MSSV: 05031811

Ngày đăng: 18/09/2019, 14:53

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan