Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
274,18 KB
Nội dung
ÔN TẬP CHUYÊN ĐỀ 1 Câu 1: Mục đích của việc cân bằng historam? Xây dựng và cài đặt thuật toán cân bằng histogram tự động. a. Mục đích Mục đích của cân bằng histogram là làm cho histogram trở nên đồng đều. Khi đó ta làm tăng được độ tương phản của ảnh. (làm cho ảnh trở nên rõ hơn) b. Xây dựng công thức Cân bằng histogram được cho bằng phương trình: s=T(r)=(L-1) r r dwwp 0 )( với p r : Là hàm mật độ xác suất. p r (w): Xác suất xảy ra mức xám w Trong xác suất, tích phân của hàm mật độ là hàm phân phối. Công thức trên có w là biến liên tục, ta không thể lập trình nó. Ta phải dùng công thức rời rạc: s k =T(r k )=(L-1) k j jr rp 0 )( với k= 0,1,2,…,L-1 c. Cài đặt thuật toán ! "# $%& '()%** $&( '"(")"** '#(#) #** )+,"# $&** - .$%& '()%** .$&$&/ $%& 01 '1(1)%1** $1&( '0(0)10** $1&*.$0& $1&/%23 - '"(")"** '#(#) #** )+,"# )+,"#+$& - - d. Hàm trong openCV. Câu 2: Lọc trong không gian. Ứng dụng lọc làm trơn trong không gian bằng mặt nạ trung bình và mặt nạ Gauss a. Cơ bản về lọc trong không gian Ảnh tồn tại trong miền không gian, nếu xử lý trong miền không gian thì không được tốt, ta chuyển ảnh sang miền tần số để xử lý, xử lý xong chuyển lại sang miền không gian. Người ta dùng một cửa sổ nhỏ để lọc trong không gian, cửa sổ nhỏ thường được gọi là mặt nạ (mask), tên thông dụng nhất là mặt nạ, opencv thường gọi là Kernels. b. Xây dựng công thức Giá trị của bộ lọc người ta sẽ cho tùy vào yêu cầu cụ thể Bộ lọc trong không gian được cho bằng phương trình sau: (Sum Convolution) g ( x , y ) =w ( −1,−1 ) f ( x−1, y−1 ) +w ( −1,0 ) f ( x−1, y ) +…+w ( 0,0 ) f ( x , y ) +…+w ( 1,1 ) f (x+1, y+1) Kích thước bộ lọc thường là số lẻ để có phần tử trung tâm. (3x3 hoặc 5x5) Tổng quát lọc trong không gian được cho bằng phương trình : g(x,y)= a as b bt tysxftsw ),(),( Trong đó : . mxn là kích thước của bộ lọc . a=m/2 và b=n/2 . w(s,t) là mặt nạ lọc hay bộ lọc . f(x,y) là điểm ảnh đầu vào . g(x,y) là điểm ảnh đầu ra Phép toán lọc trong không gian được gọi là tổng chập (convolution). Đối với lọc tuyến tính, mặt nạ lọc thường dùng là mặt nạ trung bình hay mặt nạ Gauss. Mặt nạ càng lớn, ảnh càng bị nhòe. Ví dụ: mặt nạ lọc trung bình và mặt nạ Gauss: c. Cài đặt thuật toán #456! ! !! ! "# 55 7 '"")2"** '##) 2#** ( '2)** '2)** *!)7,**/)+,"*#* )+,"#+ - -89:;56<= =%4 3>3> !<?@543 "# '"(")"** '#(#)#** !)7,"#3(/ #456! ;56<?AB3! - d. Hàm trong openCV =@>@> CD=((> Câu 3: Các bước lọc ảnh trong miền tần số (7 bước). Xóa nhiễu Morie a. Các bước lọc ảnh trong miền tần số: - Bước 1: Cho ảnh đầu vào f(x,y) có kích thước MxN. Mở rộng ảnh có kích thước là PxQ. Cụ thể P=2M, Q=2N. - Bước 2: Thêm zero (số 0) vào phần mở rộng, ta được ảnh f p (x,y). 16 1 x 1 2 1 2 4 2 1 2 1 x 9 1 1 1 1 1 1 1 1 1 1 - Bước 3: Nhân f p (x,y) với (-1) x+y để dời F(0,0) vào tâm ảnh. Do ảnh là số thực nên phổ luôn luôn đối xứng. - Bước 4: Biến đổi Fourier của ảnh ở Bước 3 ta được F(u,v). - Bước 5: Tạo hàm lọc đối xứng, có giá trị thực H(u,v), có kích thước là PxQ, có tâm là (P/2,Q/2). Thực hiện phép nhân G(u,v) = F(u,v)*H(u,v). - Bước 6: Thu được ảnh đã xử lý bằng biến đổi Fourier ngược, lấy phần thực và dời trở lại gốc tọa độ - Bước 7: Bỏ phần đã mở rộng, ta thu được ảnh g(x,y) có kích thước MxN. Biểu diễn bằng sơ đồ khối: b. Xóa nhiễu Moire E ! 3+1++F"G FH.64I= GH.64I= 5I(. 'FG<?@545<?ECD((( @ "# '"(")"** '#(#) #** '"*#J5( ')<+5',"#$(&3(/)+,"# ')<+5',"#$(&23(/)+,"# D+KLD4 4FG<?@545<?ECD((( ''4 D+>LI+4 FG<?@545<?ECD((( 3K>3>A 5K(533M @AN@>A KA5K33M 6(3>6(5>6(@3>6(K3> 66I . '()F** '()G** 63(/23/23*3(/23/23 6I3(/2F*3/2F*3*3(/2G*3/2G*3 .33*.!6(365/5/33*.!6(36I5/ 5 63(/25/25*3(/25/25 6I3(/2F*5/2F*5*3(/2G*5/2G*5 ./33*.!6(565/5/33*.!6(56I5/ 5 63(/2@/2@*3(/2@/2@ 6I3(/2F*@/2F*@*3(/2G*@/2G*@ ./33*.!6(@65/5/33*.!6(@6I5/ 5 63(/2K/2K*3(/2K/2K 6I3(/2F*K/2F*K*3(/2G*K/2G*K ./33*.!6(K65/5/33*.!6(K6I5/ 5 )<+5',$(&. - CFG<?@545<?ECD((( =.+4C64I?EHO= D+NPLD4+ FG<?@545<?ECD((( 'C64I?=Q% 7 '"(")"** '#(#) #** '"*#J5( )<+5',"#$(& 2)<+5',"#$(& ')( ( ',%23 %23 )+,"#+ - - Câu 4: Xây dựng và cài đặt thuật toán nhận dạng khuôn mặt dùng phương pháp khuôn mặt riêng (eigenface) Các bước nhận dạng khuôn mặt. Bước 1: Phát hiện khuôn măt dùng thuật toán và file xml có sẵn trong openCV. Dùng Detect and Display(). Bước 2: Tạo cơ sở dữ liệu gồm 15 mặt, trong đó 10 mặt dùng để học, 5 mặt dùng để nhận dạng. Bước 3: Nhận dạng dùng eigenface. +Q6.#'+ +Q6.#QE+'+ ='+?++?R++?''+?"R +;'+?++ !!?R.24++R E C35@K> F)4+E+, CS <.+.( ' 223%++ 'T'+?++'+?++?.'R22TUR 23- 225E '+.H. O!!!?OS 6HO?QBIH=SV !W#3((( ' +.,,' +!W#3( '+5P 1 22@Q #+;' 'T'.# +Q6.#'+ - .'R22T +.'22D1TR 1 - - - ( - +Q6.#'+ LL+)E+,'+ '?# ++3 +;$NK& +''?#H%HE?DCE5CEQX '?#'?# 226+'+ '+?+++=+'?#'+335(Y<?QQE?=Q%?SQC =@(@( '?()'+** F+'+$&"*'+$&!5'+$&#*'+$&5 .'+='+$&!5'+$&5((@N( =+5>>(5>>5A( '+EHS'?#'+$& '+ZQZYY+ZZ .';RUU%UUJ(5.R+** !;'+EHS - - 22=!!# !!!?' - I +), +), +;$NK& '3)3(** .';RUU6#UUJ(5.R ;<?%HQ6?SQC?CEQX=Q% =3((3(( .?+1 .?+13 - '3)3(** .';RUUQUUJ(5.R ;<?%HQ6?SQC?CEQX=Q% =3((3(( .?+1 .?+15 - '3)3(** .';RUU%UUJ(5.R ;<?%HQ6?SQC?CEQX=Q% =3((3(( .?+1 .?+1@ - +4+E+ 2, 2,R'+"R - +Q6.#QE+'+ LL+)E+,'+ '?# ++3 +$NK& .+% +;+ +''?#H%HE?DCE5CEQX '?#'?# 226+'+ '+?+++=+'?#'+335(Y<?QQE?=Q%?SQC =@(@( '?()'+** F+'+$&"*'+$&!5'+$&#*'+$&5 .'+='+$&!5'+$&5((@N( =+5>>(5>>5A( '+EHS'?#'+$& '+ZQZYY+ZZ '+EHS'+EHS=3((3(( .+%23 +;+(( 2,.+'+EHS.+%+;+ .'RJJ5'R.+%+;+ .I"'+EHSF(3>4H I?E=X?=SF%[(> <?ECD5>>5>>5>> !RE+R'+EHS '.+%3 .'R6#J5'R+;+ .I"'+EHSF(3>4H I?E=X?=SF%[(> <?ECD5>>5>>5>> !RE+R'+EHS - '.+%5 .'RQJ5'R+;+ .I"'+EHSF(3>4H I?E=X?=SF%[(> <?ECD5>>5>>5>> !RE+R'+EHS - .'R%J5'R+;+ .I"'+EHSF(3>4H I?E=X?=SF%[(> <?ECD5>>5>>5>> !RE+R'+EHS - - - 22=!!# !!!?' - E+ O!RE+ROS 6HO?QBIH=SV +4+E+ 2,R'+"R <.+.( ' 223%++ 'T'+?++'+?++?.'R22TUR 23- 225E '+.H. O!!!?OS 6HO?QBIH=SV !W#3((( ' +.,,' +!W#3( '+5P 1 22@Q #+;' 'T'.# +Q6.#QE+'+ - .'R22T +.'22D1TR 1 - - - ( - CS1\+]::#+^_`a+b I E+ ( - Phương pháp phát hiện và nhận dạng đối tượng trong ảnh, cụ thể là nhận dạng khuôn mặt - Có 2 bước chính là phát hiện và nhận dạng B1: phát hiện - detect Có 3 phương pháp trích đặc điểm thông dụng là Haar-like, LBP (Local Binary Pattern) và HOG (Histogram Orient Gradient) Ta phải tạo ra file .xml. Phương pháp tạo ra file .xml. Ta dùng công cụ Haar-kit ở http://robotik.inflomatik.info a/ Ta phải có khoảng 1500 ảnh chứa đối tượng cần nhận dạng, ta gọi là ảnh dương, đối tượng ở trong nền ra phức tạp 2000 ảnh không chứa đối tượng (ảnh nền), và ta gọi là ảnh âm Dùng file objectmarker.exe để đánh dấu ảnh dương, kết quả lưu trong file info.txt tenfil 1 x y width heigh b/ Dùng createsamples.exe hoặc opencv_createsamples.exe (C:\opencv\build\x86\VC10\bin) để tạo ra file hand.vec c/ Dùng opencv_traincascade.exe để đọc ảnh dương đã đánh dấu và ảnh âm để tạo ra file .xml thời gian chạy bước c khoảng 1 ngày rưỡi trên máy P 4, 3.2GHz B2: Nhận dạng Nói rồi bài nhận dạng bàn tay hôm trước @~@ OMG!!!! 5 ANH NHIN THANG QUA TRA QUA PHAI NHIN LEN NHIN XUONG khoanh khuon mat roi moi nhan chu a de chup +Q6.#'+ +Q6.#QE+'+ F)4+E+, ='+?++?R++?''+?"R =#?++?R++?#??#"R +;'+?++ +;#?++ !!?R.24++R E C35@K> [...]... filename[64]; for (int i = 1; i save("face.xml");... capture(0); Mat frame; if (!face_cascade.load(face_cascade_name)){ printf(" (!)Error loading\n"); return -1; }; //if (!eyes_cascade.load(eyes_cascade_name)){ printf(" (!)Error loading\n"); return -1; }; if (capture.isOpened()) { namedWindow(window_name, WINDOW_AUTOSIZE); for (;;) { capture >> frame; int c = waitKey (10 ); if (c == 27) break; if (!frame.empty()) detectAndDisplay(frame,c); else { printf(" (!) No... break; } } } } return 0; void detectAndDisplay(Mat frame, int c) { std::vector faces; Mat frame_gray; static int count = 13 ; char filename[64]; cvtColor(frame, frame_gray, COLOR_BGR2GRAY); equalizeHist(frame_gray, frame_gray); face_cascade.detectMultiScale(frame_gray, faces, 1. 1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30)); for (size_t i = 0; i < faces.size(); i++) { Point center(faces[i].x + faces[i].width... frame); } void detectAndDisplayAndRecognation(Mat frame, int c) { std::vector faces; Mat frame_gray; static int count = 13 ; char s[64]; int result; cvtColor(frame, frame_gray, COLOR_BGR2GRAY); equalizeHist(frame_gray, frame_gray); face_cascade.detectMultiScale(frame_gray, faces, 1. 1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30)); for (size_t i = 0; i < faces.size(); i++) { Point center(faces[i].x + faces[i].width... WINDOW_AUTOSIZE); if (!face_cascade.load(face_cascade_name)){ printf(" (!)Error loading\n"); return -1; }; //if (!eyes_cascade.load(eyes_cascade_name)){ printf(" (!)Error loading\n"); return -1; }; if (capture.isOpened()) { namedWindow(window_name, WINDOW_AUTOSIZE); for (;;) { capture >> frame; int c = waitKey (10 ); if (c == 27) break; if (!frame.empty()) detectAndDisplayAndRecognation(frame, c); else { printf(" . vào phần mở rộng, ta được ảnh f p (x,y). 16 1 x 1 2 1 2 4 2 1 2 1 x 9 1 1 1 1 1 1 1 1 1 1 - Bước 3: Nhân f p (x,y) với ( -1) x+y để dời F(0,0) vào tâm ảnh. Do ảnh là số thực nên phổ luôn luôn. phương trình sau: (Sum Convolution) g ( x , y ) =w ( 1, 1 ) f ( x 1, y 1 ) +w ( 1, 0 ) f ( x 1, y ) +…+w ( 0,0 ) f ( x , y ) +…+w ( 1, 1 ) f (x +1, y +1) Kích thước bộ lọc thường là số lẻ để có phần. #** )+,"# $&** - .$%& '()%** .$&$&/ $%& 0 1 ' 1 ( 1 )% 1* * $1& amp;( '0(0) 1 0** $1& amp;*.$0& $1& amp;/%23 - '"(")"** '#(#)