chuyen de 2
TRANSCRIPT
LOGO
GVHD: LÊ MẠNH THẮNG NHÓM 3: PHẠM MINH THÀNH
PHẠM ANH THANH
NGUYỄN DUY HẬU
BÁO CÁO MÔN HỌCCHUYÊN ĐỀ II
ĐỀ TÀI:TÁCH MẶT NGƯỜI DÙNG CÔNG
CỤ IMAGE PROCESSSING TOOLBOX TRONG MATLAB
ĐẶT VẤN ĐỀ
Xử lý ảnh là một lĩnh vực nghiên cứu rộng và có rất nhiều ứng dụng trong các mặt của đời sống xã hội. Nhận dạng khuôn mặt là một trong những khía cạnh của xử lý ảnh. Kỹ thuật này cho phép chúng ta nhận diện một khuôn mặt người từ ảnh tĩnh hay từ video bằng cách so sánh với kho dữ liệu có sẵn trong hệ thống. Nhận dạng khuôn mặt được ứng dụng trong lĩnh vực phòng chống tội nghiên cứu một phương pháp nhận dạng khuôn mặt dùng thuật toán phân tích thành phần cơ bản. Trong đồ án này sẽ tìm hiểu về một số vấn đề của bài toán nhận dạng và phát hiện khuôn mặt ở chuyên đề này chúng ta sẽ nói đến mảng trích đăc trưng và tách khuôn mặt người bằng công cụ Image Processing toolbox trong Matlab R2009a, các kết quả của chương trình cho thấy tính khả thi của việc áp dụng chương trình vào trong thực tế.
MỤC TIÊU CỦA ĐỀ TÀI
Mục tiêu của đề tài “ Tách mặt người dùng Matlab” là thực hiện chương trình chụp hình từ WC, lưu lại, sau đó xử lý đưa về hình cắt mặt người trong ảnh vừa chụp
Để tiện theo dõi nhóm em xin trình bày đề tài theo ba phần như sau:
Phần đầu là giới thiệu về thuật toán PCA là ứng toán được sử dụng rất nhiều trong viễn thông. Và đề tài này sử dụng thuật toán PCA.
Phần tiếp theo là giới thiệu các lệnh được sử dụng trong chương trình.
Phần cuối cùng là giới thiệu giao diện chương trình và code nguồn.
CÁC THUẬT TOÁN NHẬN DẠNG KHUÔN MẶT
1.1 Định nghĩa bài toán xác định khuôn mặt người
Xác định khuôn mặt người (Face Detection) là một kỹ thuật máy tính để xác định các vị trí và các kích thước của các khuôn mặt người trong các ảnh bất kỳ (ảnh kỹ thuật số). Kỹ thuật này nhận biết các đặc trưng của khuôn mặt và bỏ qua những thứ khác, như: tòa nhà, cây cối…..
1.2 Ứng dụng của phương pháp xác định khuôn mặt người
Có nhiều ứng dụng đã được và đang thiết kế, nhóm em chỉ xin đưa ra một số loại ứng dụng sau:
Hệ thống tương tác giữa người và máy: giúp những người bị tật hoặc khiếm khuyết có thể trao đổi. Những người dùng ngôn ngữ tay có thể giao tiếp với những người bình thường. Những người bị bại liệt thông qua một số ký hiệu nháy mắt có thể biểu lộ những gì họ muốn, .. Đó là các bài toán điệu bộ của bàn tay (hand gesture), điệu bộ khuôn mặt.
Hệ thống quan sát, theo dõi và bảo vệ.
Thẻ căn cước, chứng minh nhân dân (Face Identification).
An ninh sân bay, xuất nhập cảnh.
1.3 Phương pháp xác định khuôn mặt người
Có nhiều nghiên cứu tìm phương pháp xác định khuôn mặt người, từ ảnh xám đến ngày nay là ảnh màu. Em sẽ trình bày một cách tổng quát nhất những hướng giải quyết chính cho bài toán, từ những hướng chính này nhiều tác giả thay đổi một số ý nhỏ bên trong để có kết quả mới.
1.4 Nhận dạng ảnh dựa trên PCA
Khuôn mặt con người có rất nhiều nét để nhận biết, nếu như ta gặp lại một người bạn sau một thời gian dài, ta có thể nhận ra ngay người đó từ những chi tiết cụ thể trên mặt có thể thay đổi như da, mái tóc . Ta nhận ra không phải vì nhớ đôi mắt , hay mũi hay môi hay tóc , lông mày người đó mà ta nhận ra vì nhớ diện mạo của người đó . Tức là trên khuôn mặt tồn tại một nét tổng thể nào đó để có thể nhận diện , thuật toán của ta bắt đầu từ ý tưởng này.
Phân tích thành phần chính (Principal Component Analysis ) gọi tắt là PCA là thuật toán nhận dạng ảnh dựa trên những nét tổng thể của khuôn mặt .
2. CÁC LỆNH XỬ LÝ ẢNH TRONG MATLAB.
Các hàm hiển thị ảnh trong Matlab Để hiển thị ảnh, Matlab cung cấp 2 hàm cơ bản là image và imagesc.
Ngoài ra, trong Image Processing Toolbox cũng có hai hàm hiển thị khác là imview và imshow
Hàm image(x,y,c) hiển thị hình ảnh biểu diễn bởi ma trận c kích thước mxn lên hệ trục tọa độ. x,y là các véctơ xác định vị trí của các điểm c(1,1) và c(m,n).
Hàm imagesc có chức năng tương tự hàm image, ngoại trừ việc dữ liệu ảnh sẽ được co giãn để sử dụng toàn bộ bản đồ màu hiện hành.
Hàm imview cho phép hiển thị ảnh trên của sổ riêng nền Java, gọi là Image Viewer.
Hàm imshow cho phép hiển thị ảnh trên một Figure và tự động thiết lập giá trị các đối tượng image, axes, figure để hiển thị hình ảnh.
3.SƠ ĐỒ GIẢI THUẬT VÀ CODE CỦA CHƯƠNG TRÌNH
BEGIN
MỞ VIDEO
CHỤP VÀ LƯU ẢNH
ĐỌC ẢNH VÀ TIỀN XỬ LÝ
TÁCH MÀU DA
LỌC NHIỄU
ĐÓNG KHUNG MẶT NGƯỜI
CẮT ẢNH VÀ HIỂN THỊ
END
vid= videoinput('winvideo',1);preview(vid);pause(5);hi= getsnapshot(vid);imwrite(hi,'D:\1.jpg');a=imread('D:\1.jpg ');imshow(a);srgb2lab = makecform('srgb2lab');lab2srgb = makecform('lab2srgb');a_lab = applycform(a, srgb2lab); max_luminosity = 100;L = a_lab(:,:,1)/max_luminosity;
ĐOẠN CODE XỬ LÝ ẢNH TRONG MATLAB
ĐOẠN CODE XỬ LÝ ẢNH TRONG MATLAB
a_imadjust = applycform(a_imadjust, lab2srgb);
a_imadjust = a_lab;a_imadjust(:,:,1) = imadjust(L)*max_luminosity;
a_histeq = a_lab;a_histeq(:,:,1) = histeq(L)*max_luminosity;
a_histeq = applycform(a_histeq, lab2srgb);
sz=size(a_histeq);for i=1:sz(1)for j=1:sz(2)
www.themegallery.com
ĐOẠN CODE XỬ LÝ ẢNH TRONG MATLAB
www.themegallery.com
if a(i,j,1)>60 & a(i,j,2)<130 & a(i,j,3)<160 & a(i,j,1)<190 & a(i,j,2)>80 & a(i,j,3)>60white (i,j)=1;green(i,j)=0;blue(i,j)=0;red(i,j)=0;else white (i,j)=0;green(i,j)=0;blue(i,j)=0;red(i,j)=0;
endendendSE = strel('rectangle',[28 25]);BW2 = imerode(white,SE);BW3 = imdilate(BW2,SE);Ifill = imfill(BW3,'holes');[Label,Total]=bwlabel(Ifill,8); Sdata=regionprops(Label,'BoundingBox'); for i=1:Total Img=imcrop(a,Sdata(i).BoundingBox);
imwrite(Img,'b.jpg'); b=imread('b.jpg');[m n p] =size(b); d=imcrop(b, [0 0 n 3/5*m]);
figure, imshow(d); end
ĐOẠN CODE XỬ LÝ ẢNH TRONG MATLAB
Kết nối WC với matlab, chụp ảnh và lưu lại
vid= videoinput('winvideo',1); preview(vid); pause(5); hi= getsnapshot(vid); imwrite(hi,'D:\1.jpg');
GiẢI THÍCH CODE
ĐỌC ẢNH VÀ XỬ LÝ ẢNH:
a=imread('D:\1.jpg ');imshow(a);srgb2lab = makecform('srgb2lab');lab2srgb = makecform('lab2srgb');a_lab = applycform(a, srgb2lab); max_luminosity = 100;L = a_lab(:,:,1)/max_luminosity;a_imadjust = a_lab;
www.themegallery.com
ĐỌC ẢNH VÀ XỬ LÝ ẢNH:
a_imadjust(:,:,1) = imadjust(L)*max_luminosity;
a_imadjust = applycform(a_imadjust, lab2srgb);
a_histeq = a_lab;a_histeq(:,:,1) = histeq(L)*max_luminosity;
a_histeq = applycform(a_histeq, lab2srgb);
www.themegallery.com
TÁCH MẶT NGƯỜI RA TỪ ẢNH VỪA CHỤP
sz=size(a_histeq);for i=1:sz(1)for j=1:sz(2)if a(i,j,1)>60 & a(i,j,2)<130 & a(i,j,3)<160 & a(i,j,1)<190 & a(i,j,2)>80 & a(i,j,3)>60
white (i,j)=1;green(i,j)=0;blue(i,j)=0;red(i,j)=0;else white (i,j)=0;green(i,j)=0;blue(i,j)=0;red(i,j)=0;endendend
LỌC NHIỄUSE = strel('rectangle',[28 25]);% tạo ra hình chữ nhật
BW2 = imerode(white,SE); % làm xói mònBW3 = imdilate(BW2,SE);% làm giãn nởIfill = imfill(BW3,'holes');% lấp các lỗ hỗng trong ảnh
ĐÓNG KHUNG TẤT CẢ MẶT NGƯỜI TRONG ẢNH VỪA LỌC TỪ ĐÓ CẮT VÀ HiỂN THỊ LÊN TẤT CẢ MẶT NGƯỜI CÓ TRONG HÌNH CHỤP.
[Label,Total]=bwlabel(Ifill,8);tạo nhãn trong ảnh, trả về số nhãn tạo đc
Sdata=regionprops(Label,'BoundingBox'); đóng khung nhãn
for i=1:Total Img=imcrop(a,Sdata(i).BoundingBox); cắt ảnh
imwrite(Img,' D:\ b.jpg'); b=imread(' D:\ b.jpg');[m n p] =size(b); d=imcrop(b, [0 0 n 4/6*m]); figure, imshow(d); end
KẾT QUẢ ĐẠT ĐƯỢC VÀ HẠN CHẾ
Kết quả đạt được: - Đã tìm hiểu được tổng quan về Matlab công cụ image processing toolbox
- Ứng dụng công cụ image processing toolbox để hoàn thành được đề tài giao viên đưa ra là tách được mặt người từ hình chụp từ WC.
Hạn chế: - Thời gian làm đề tài ngắn nên chưa tìm hiểu sâu về công cụ image processing toolbox mà chỉ tìm hiểu tổng quan ở những hàm cơ bản.
- Chỉ mới tìm hiểu 1 phương pháp nhận dạng mặt người qua màu da nên kết quả chưa được cao.
- Quá trình nhận dạng còn bị ảnh hưởng bởi độ sáng, màu áo nên bị nhiễu lớn dẫn đến kết quả kém chính xác hơn không như mong muốn.
HƯỚNG MỞ RỘNG CỦA ĐỀ TÀI
Hướng mở rộng của đề tài Đề tài có thể được phát triển thành một phần mện nhận dạng mặt người tốt hơn, bằng cách kết hợp với một số thuật toán nhận dạng và xử lý ảnh hiện đại hơn. Cho ra kết quả chính xác hơn.