60
3.2.2. Kết quả cải thiện tính thời gian trích đặc trƣng HOG
Chọn một ảnh bất kỳ để tính đặc trƣng HOG. Tính bộ mơ tả đặc trƣng HOG c a ảnh theo phƣơng pháp HOG gốc và theo phƣơng pháp cải thiện. So sánh thời gian tính bộ mơ tả đặc trƣng HOG theo Dalal và Trigs c a một ảnh cho trƣớc giữa phƣơng pháp HOG gốc và phƣơng pháp cải thiện. Chọn các bƣớc trƣợt window trên ảnh lần lƣợt là 4:4:32, 4:4:64. Kết quả so sánh thời gian tính đặc trƣng HOG c a một ảnh cho trƣớc nhƣ hình 3.7. Đƣờng màu xanh (phía trên) mơ tả thời gian tính đặc trƣng HOG c a ảnh theo phƣơng pháp HOG gốc. Đƣờng màu đỏ (phía dƣới) mơ tả thời gian tính đặc trƣng HOG c a ảnh theo phƣơng pháp cải thiện.
(a) (b)
Hình 3.7. So sánh thời gian trích đặc trƣng trƣớc và sau cải thiện phƣơng pháp tính
61
Nhận xét
-Thời gian tính đặc trƣng HOG cho một ảnh theo phƣơng pháp cải thiện giảm nhiều khi khoảng trƣợt (stride) nhỏ (phát hiện ảnh với độ chính xác cao).
- Khi khoảng trƣợt càng lớn thời gian tính đặc trƣng HOG theo phƣơng pháp mới càng tiệm cận với phƣơng pháp tính đặc trƣng HOG truyền thống.
- Khi khoảng trƣợt lớn hơn hoặc bằng nữa chiều rộng window, thời gian tính đặc trƣng HOG theo phƣơng pháp mới có thể lớn hơn phƣơng pháp tính đặc trƣng HOG truyền thống.
62
Chƣơng 4
KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN
4.1. Kết luận
- Trên cơ sở nghiên c u về bài toán phát hiện ngƣời, đặc biệt là bộ mô tả đặc trƣng HOG và mơ hình phân loại SVM, tơi đã xây dựng thành cơng chƣơng trình phát hiện ngƣời đi bộ (upright) trong ảnh tĩnh và chƣơng trình phát hiện ngƣời trong video với sự hỗ trợ c a phần mềm matlab, đồng thời thực hiện cải thiện thời gian tính bộ mơ tả đặc trƣng HOG góp phần cải thiện tốc độ phát hiện. Bên cạnh đó tơi c ng đề xuất một mơ hình hệ thống nhận dạng cảnh báo an ninh có thể ng dụng bài tốn phát hiện ngƣời đi bộ (upright).
- Đây là bƣớc đầu để phát triển, ng dụng bài toán phát hiện ngƣời (pedestrian detection) về sau này. Bên cạnh đó, trong q trình xây dựng chƣơng trình, tơi đã tìm hiểu về thƣ viện libSVM sử dụng các dữ liệu training để huấn luyện một bộ phân loại và test các mẫu độc lập dƣới gốc độ nghiên c u bài toán nhận dạng, phát hiện ngƣời mặt dù việc phát hiện ngƣời đi bộ c ng đã đƣợc tích hợp sẵn trong các bộ phát hiện trong phần mềm matlab c ng nhƣ các phần mềm khác.
- Về chƣơng trình demo, mặc dù đã thực hiện cải thiện tốc độ, độ chính xác phát hiện vẫn cịn là thách th c vì số mẫu huấn luyện cịn ít so với số mẫu dùng trong ng dụng thực tế. Bên cạnh đó, tốc độ trong chƣơng trình phát hiện ngƣời trong video c ng là một thách th c khi xây dựng bằng phần mềm matlab, do đó tôi đã dùng những hàm đƣợc matlab hỗ trợ để thực hiện demo chƣơng trình này.
4.2. Hƣớng phát triển
- Đề tài đã hoàn thành các yêu cầu đề ra ban đầu. Đây là tiền đề để phát triển bài toán phát hiện ngƣời đi bộ (upright) trong các ng dụng sau này.
- Có thể nghiên c u kết hợp bộ mô tả HOG với các bộ mô tả khác để cải thiện hơn nữa tốc độ và độ chính xác phát hiện.
63
-Xây dựng một mơ hình hệ thống nhận dạng cảnh báo an ninh nhƣ đã đề xuất cho hộ gia đình hoặc cơ quan trụ sở cụ thể cho phù hợp với ch c năng và điều kiện tài chính c a nơi đó.
64
TÀI LIỆU THAM KHẢO
[1]. Sanja Fidler, Object Detection Sliding Windows, CSC420: Intro to Image
Understanding.
[2]. Hồ Quốc Thiền, Giám sát an ninh dùng kỹ thuật xử lý hình ảnh, Luận văn thạc sĩ, Trƣờng Đại học sƣ phạm kỹ thuật TPHCM, 2016.
[3]. Bill Triggs, Navneet Dalal, "Histograms of Oriented Gradients for Human Detection", 2005 IEEE Conference on Computer Vision and Pattern
Recognition, vol. 01, no. , pp. 886-893, 2005.
[4]. Qiang Zhu, Mei-Chen Yeh, Kwang-Ting Cheng and S. Avidan, "Fast Human Detection Using a Cascade of Histograms of Oriented Gradients," 2006 IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR'06), 2006, pp. 1491-1498.
[5]. INRIA Person Dataset. Internet:
http://pascal.inrialpes.fr/data/human/, 7/7/2017.
[6]. Ning He, J. Cao and L. Song, "Scale Space Histogram of Oriented Gradients for Human Detection," 2008 International Symposium on Information Science and
Engineering, Shanghai, 2008, pp. 167-170.
[7]. C. Zhou, L. Tang, S. Wang and X. Ding, "Human Detection Based on Fusion of Histograms of Oriented Gradients and Main Partial Features," Image and Signal Processing, 2009. CISP '09. 2nd International Congress on, Tianjin,
2009, pp. 1-5.
[8]. Pedestrian dataset from MIT - Poggio Lab - Massachusetts Institute of ... Internet:
http://cbcl.mit.edu/software-datasets/PedestrianData.html, 7/7/2017
[9]. M. Li, Z. Zhang, K. Huang and T. Tan, "Rapid and robust human detection and tracking based on omega-shape features," 2009 16th IEEE International Conference on Image Processing (ICIP), Cairo, 2009, pp. 2545-2548.
65
[10]. P. Viola, M. J. Jones, and D. Snow. Detecting pedestrians using patterns of motion and appearance. International Journal of Computer Vision(IJCV),
63(2):153–161, July 2005
[11]. G. Zhang, F. Gao, C. Liu, W. Liu and Huai Yuan, "A pedestrian detection method based on SVM classifier and optimized Histograms of Oriented Gradients feature," 2010 Sixth International Conference on Natural Computation, Yantai, Shandong, 2010, pp. 3257-3260.
[12]. Y. Said, M. Atri and R. Tourki, "Human detection based on integral Histograms of Oriented Gradients and SVM," 2011 International Conference on Communications, Computing and Control Applications (CCCA), Hammamet, 2011, pp. 1-5.
[13]. D. Wei, Y. Zhao, R. Cheng and G. Li, "An enhanced Histogram of Oriented Gradient for pedestrian detection," Intelligent Control and Information Processing (ICICIP), 2013 Fourth International Conference on, Beijing, 2013,
pp. 459-463.
[14]. Nguyễn Thanh Hải, Giáo trình xử lý hình ảnh, Trƣờng Đại học sƣ phạm kỹ
thuật TPHCM, NXB Đại học Quốc gia TPHCM, 2014.
[15]. Nguyễn Quang Hoan, Xử lý ảnh, Học viện cơng nghệ bƣu chính viễn thơng, Hà nội, 2006.
[16]. Section 12.6: Directional Derivatives and the Gradient Vector Recall ... . Internet:
http://www.math.tamu.edu/~glahodny/Math251/Section%2012.6.pdf, 7/9/2017.
[17]. Chris McCormick, HOG Person Detector Tutorial, 2013.
[18]. Jose Marcos Rodr´ıguez Fern´andez, Computer vision for pedestrian detection using Histograms of Oriented Gradients, Facultat Inform´atica de
Barcelona Universitat Polit´ecnica de Catalu˜na, A thesis submitted for the degree of Engineer in computer science, 2014.
66
[20]. Van-Dung Hoang, Kang-Hyun Jo, Joint components based pedestrian detection in crowded scenes using extended feature descriptors,
Neurocomputing 188 (2016) 139 - 150.
[21]. Vladimir N. Vapnik, Statistical Learning Theory, Copyright © 1998 by John
Wiley & Sons, Inc. All rights reserved.
[22]. Martin Law, A Simple Introduction to Support Vector Machines, Lecture for
CSE 802, Department of Computer Science and Engineering, Michigan State University, 2011.
[23]. Burges, C. J. C, A tutorial on support vector machines for pattern recognition. Data Mining and Knowledge Discovery, 2, 2 (1998),121–167.
[24]. Henok Girma, A Tutorial on Support Vector Machine, Center of expermental mechanichs University of Ljubljana, 2009.
[25]. B. Schoelkopf and A.J. Smola. Learning with Kernels. MIT Press, Cambridge, MA,2002.
[26]. luthuli.cs.uiuc.edu/~daf/cv2e-site/detectingextracts.pdf, chapter 17 Detecting
Objects in Images.
[27]. Prof. Sinisa Todorovic, CS556: Computer Vision Lecture 8, Oregon State
University.
[28]. Chang, C.-C, and Lin, C.-J, LIBSVM: A library for support vector machines, http://www.csie.ntu.edu.tw/∼cjlin/libsvm, 2001.
[29].Chih-Wei Hsu, Chih-Chung Chang, and Chih-Jen Lin, A Practical Guide to Support Vector Classification, Department of Computer Science National Taiwan University, Taipei 106, Taiwan, http://www.csie.ntu.edu.tw/~cjlin Initial version: 2003 Last updated: May 19, 2016.
[30]. Receiver operating characteristic. Internet:
https://en.wikipedia.org/wiki/Sensitivity_and_specificity, 7/9/2017. [31]. Sensitivity and specificity. Internet:
https://en.wikipedia.org/wiki/Receiver_operating_characteristic, 7/9/2017. [32]. Kristen Grauman UT-Austin, Sliding window detection, 2009.
P1
PHỤ LỤC
1. CODE CẢI THIỆN PHƢƠNG PHÁP TÍNH HOG Phong_DEMO.m
%% Phong_DEMO.m %% Khoi tao Bin=9;Abs=true;
CellS=8; BlockS=2;StepCells=2;
NumDimInBlock=36; % So bin trong Block= So Cells trong Block x so Bin NumBlock=105; % So block trong moi window
NumDimVector=NumDimInBlock*NumBlock; % So chieu cua Vector % Ket thuc khoi tao
Coordination=[];
%% Test time consumming
Im=imread('E:\PROJECT_MHOG\image(1).jpg'); Im=rgb2gray(Im); [H,W]=size(Im); h=128;w=64; %TIME1=176.884; t=1; coun(t)=0; for Stride=4:4:64 tic % bam thoi gian count(t)=0;
for i=1:Stride:H-h for j=1:Stride:W-w
Win=Im(i:i+h-1,j:j+w-1); %lay cac window 128x64 upper-left (i,j) % tic
% HOG=HOGPartial(Win, CellS, BlockS, Bin,StepCells,Abs); % toc
% HOG=extractHOGFeatures(Win);
vector=compute_HOG(Win,8,2,9); %tinh bo mo ta HOG cua cac window 128x64 upper-left (i,j)
count(t)=count(t)+1; end
end
TIME1(t)=toc; %tinh thoi gian
fprintf('Lan lap %d, time %f \n',t,TIME1(t)); t=t+1;
end
%TIME2=176.884;
CellS=8; BlockS=2; Bin=9;StepCells=1; Abs=true; t=1; for Stride=4:4:64 tic SATHisBin=SumHOG(Im,Bin,Abs); for i=1:Stride:H-h
P2
for j=1:Stride:W-w
Win=SATHisBin(i:i+h-1,j:j+w-1);
vector=HOGLocal(Win, CellS, BlockS, Bin, StepCells); end
end
TIME2(t)=toc;
fprintf('New_Lan lap %d, time %f \n',t,TIME2(t)); t=t+1;
end
plot(4:4:64,TIME1,'.-b') hold on
plot(4:4:64,TIME2,'*-r')
title('So sanh thoi gian trich dac trung HOG cho anh voi stride=4:4:64') return
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function [angles,magnitudes] = compute_gradient(I) [cols,rows,color_depth] = size(I); dx = [-1,0,1]; dy = -dx'; if color_depth == 1 I = imadjust(I); extended_img = ones(cols+2,rows+2,color_depth); extended_img(2:1+cols,2:1+rows,:) = I(:,:,:); Gx = filter2(dx,double(extended_img)); Gx = Gx(1:cols,1:rows); Gy = filter2(dy,double(extended_img)); Gy = Gy(1:cols,1:rows); angles = atan2(Gy,Gx); magnitudes = sqrt(Gy.^2 + Gx.^2); elseif color_depth > 1
[red_angs, red_mags] = compute_gradient(I(:,:,1)); [green_angs, blue_mags] = compute_gradient(I(:,:,2)); [blue_angs, green_mags] = compute_gradient(I(:,:,3)); magnitudes = max(green_mags,max(red_mags,blue_mags)); angles = zeros(size(magnitudes));
angles(magnitudes == red_mags) = red_angs(magnitudes == red_mags); angles(magnitudes == blue_mags) = green_angs(magnitudes ==
blue_mags);
angles(magnitudes == green_mags) = blue_angs(magnitudes == green_mags);
end
angles(angles(:)<0) = angles(angles(:)<0)+pi;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function windows=compute_cell_coordinates(I,wx_size, wy_size,~) [r,c] = size(I(:,:,1));
if wx_size > c || wy_size > r
fprintf('window size greater than image size: r=%d, c=%d \n',r,c); end
x_segs = floor(c/wx_size); y_segs = floor(r/wy_size);
xs_ini(1:x_segs) = wx_size*((1:x_segs)-1)+1; % x_ini xs_fin(1:x_segs) = wx_size*min((1:x_segs),c); % x_fin ys_ini(1:y_segs) = wy_size*((1:y_segs)-1)+1; % y_ini
P3
ys_fin(1:y_segs) = wy_size*min((1:y_segs),r); % y_fin
[X_ini,Y_ini] = meshgrid(ys_ini,xs_ini); [X_fin,Y_fin] = meshgrid(ys_fin,xs_fin);
windows = [Y_ini(:),Y_fin(:),X_ini(:),X_fin(:)]';
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function H = compute_HOG(I, cell_size, block_size,n_bins)
epsilon = 0.0001; L_norm = 2; desp = 1; total_angles = 180.0; bin_width = total_angles/9; bin_centers_map = (bin_width/2:bin_width:total_angles); [angles, magnitudes] = compute_gradient(I);
cell_coords = compute_cell_coordinates(angles,cell_size,cell_size,false); [height,width] = size(I(:,:,1)); n_v_cells = floor(height/cell_size); n_h_cells = floor(width/cell_size); histograms = zeros(n_v_cells,n_h_cells,n_bins); for index=1:size(cell_coords,2) h = zeros(1,n_bins); x_min = cell_coords(1,index); x_max = cell_coords(2,index); y_min = cell_coords(3,index); y_max = cell_coords(4,index); angs = angles(y_min:y_max,x_min:x_max); angs = angs.*180/pi; mags = magnitudes(y_min:y_max,x_min:x_max); left_indices = round(angs/bin_width); right_indices = left_indices+1; left_indices(left_indices==0) = 9; right_indices(right_indices==10) = 1; left_bin_centers = bin_centers_map(left_indices); angs(angs < left_bin_centers) = ...
total_angles + angs(angs < left_bin_centers); right_contributions = (angs-left_bin_centers)/bin_width; left_contributions = 1 - right_contributions; left_contributions = mags.*left_contributions; right_contributions = mags.*right_contributions; for bin=1:n_bins
pixels_to_left = (left_indices == bin);
h(bin) = h(bin) + sum(left_contributions(pixels_to_left));
pixels_to_right = (right_indices == bin);
h(bin) = h(bin) + sum(right_contributions(pixels_to_right)); end row_offset = floor(index/n_h_cells + 1); column_offset = mod(index-1,n_h_cells)+1; histograms(row_offset,column_offset,:) = h(1,:); end
P4 hist_size = block_size*block_size*n_bins; descriptor_size = hist_size*(n_v_cells-block_size+desp)*(n_h_cells- block_size+desp); H = zeros(descriptor_size, 1); col = 1; row = 1; % H = [];
while row <= n_v_cells-block_size+1 while col <= n_h_cells-block_size+1
blockHists = ...
histograms(row:row+block_size-1, col:col+block_size-1, :); magnitude = norm(blockHists(:),L_norm);
normalized = blockHists / (magnitude + epsilon); offset = (row-1)*(n_h_cells-block_size+1)+col; ini = (offset-1)*hist_size+1; fin = offset*hist_size; H(ini:fin,1) = normalized(:); col = col+desp; end row = row+desp; col = 1; end ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function [Magni,AnglBin]=GradientBin(Im,Bin,Abs)% Bin=9; Abs=true; %%%%%%%%%%%%%%%%%%%%%%%%%%%%% tinh gradient cua bin
Im=single(Im); [H,W]=size(Im); dx=single([1 0 -1]); dy=dx';
% Calculate the first order partial derivation via Y and X coordinate Im=[Im(1,:); Im(:,:); Im(H,:)]; %Add first and last column
Im=[Im(:,1), Im(:,:), Im(:,W)];%Add first and last Row gradY=conv2(Im,dy,'same'); %chap dy voi Im giu lai size Im gradX=conv2(Im,dx,'same'); %chap dx voi Im giu lai size Im gradY=gradY(2:H+1,2:W+1);%Dele first and last column gradX=gradX(2:H+1,2:W+1); %Dele first and last column % Caculate Garadient: Magnitude and Agle
Magni=sqrt((gradY.^2)+(gradX.^2));
% Vi lech nhau 1 don vi khong lon, nen lam tron tinh cho nhanh Magni=round(Magni);
Degree=180/pi;
Angles=atan2(gradY,gradX)*Degree; % goc gradient theo radian % Angles1=Angles;
if Abs
Angles=abs(Angles); %tri tuyet doi cua goc gradient temp=180/Bin; %=20
ind=find(Angles==0);% tim chi so cua goc bang 0
Angles(ind)=Angles(ind)+(1^-10);% goc co chi so 0 bang 1
AnglBin=ceil(Angles/temp); %lam tron goc cua bin den so nguyen lon hon hoac bang no.
else
Angles=Angles+180; %dung cho goc co dau temp=360/Bin;
AnglBin=ceil(Angles/temp);%lam tron goc cua bin den so nguyen lon hon hoac bang no.
P5
end end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function SATHisBin=SumHOG(Im,Bin,Abs)% CellS=4; BlockS=2; Bin=9; [H,W]=size(Im); %lay chieu cao H va chieu rong W cua anh SATHisBin=cell(H,W); %tao matrix cell rong co H hang, W cot
[Magni,AnglBin]=GradientBin(Im,Bin,Abs); %tinh do lon va goc cua moi SATHisBin{1,1}=zeros(Bin,1);
SATHisBin{1,1}(AnglBin(1,1))=Magni(1,1);
% Phan nay la xu ly truong hop Row thu nhat, ko xu ly gop duoc for j=2:W %cot 2 tro di
SATHisBin{1,j}=SATHisBin{1,j-1};% Gan gia tri cua tat ca cac BIN, cua phan tu truoc no (j-1) cho phan tu hien tai
SATHisBin{1,j}(AnglBin(1,j))=SATHisBin{1,j}(AnglBin(1,j))+Magni(1,j); % Add Bin Hien tai cua phan tu hien tai
end % toc
% display('Dang test'); % tic
for i=2:H %hang 2 tro di
%% 2 lenh sau dau la xu ly truong hop column thu nhat, ko xu ly gop
% duoc vi day la truong hop ngoai le.
SATHisBin{i,1}=SATHisBin{i-1,1};% Add toan bo cac Bin (1 -> Bin) cua phan tu truoc no (i-1)
SATHisBin{i,1}(AnglBin(i,1))=SATHisBin{i,1}(AnglBin(i,1))+Magni(i,1);% Add Bin Hien tai cua phan tu hien tai
%%
for j=2:W
% Add toan bo cac Bin (1 -> Bin) cua phan tu truoc no
SATHisBin{i,j}=SATHisBin{i-1,j}+SATHisBin{i,j-1}-SATHisBin{i- 1,j-1};
SATHisBin{i,j}(AnglBin(i,j))=SATHisBin{i,j}(AnglBin(i,j))+Magni(i,j);% Add Bin Hien tai cua phan tu hien tai
end end end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////