Khóa luận Nghiên cứu các kỹ thuật dò biên áp dụng trong trích chọn các bộ phận khuôn mặt

 

MỤC LỤC

LỜI CẢM ƠN i

TÓM TẮT ii

MỤC LỤC iii

Chương 1. GIỚI THIỆU 5

1.1 Giới thiệu về tìm biên trong nhận dạng khuôn mặt 5

1.2 Bài toán nghiên cứu kỹ thuật dò biên áp dụng trong trích chọn khuôn mặt 2

1.3 Nội dung và cấu trúc khóa luận 2

Chương 2. CÁC KỸ THUẬT DÒ BIÊN 4

2.1 Quy trình phát hiện biên 4

2.2 Kỹ thuật phát hiện biên trực tiếp 4

2.2.1 Kỹ thuật Gradient 5

2.2.2 Toán tử la bàn 8

2.2.3 Kỹ thuật Laplace 10

2.2.4 Tách sườn theo ảnh Canny 11

2.2.5 Dò biên theo quy hoạch động 12

2.3 Kỹ thuật phát hiện biên gián tiếp 15

2.4 Một số phương pháp khác 15

16

2.5 Tổng kết 16

Chương 3. CÁC KỸ THUẬT DÒ BIÊN ĐƯỢC ÁP DỤNG 18

3.1 Các kỹ thuật được dùng 18

3.1.1 Lấy biên theo trục X 19

3.1.2 Lấy biên theo trục Y 21

3.1.3 Lấy biên theo Gradient 21

3.1.4 Lấy biên theo Thresholding 21

3.1.5 Lấy biên theo Thinning 21

3.2 Chương trình và kết quả 23

3.3 Biến thành ảnh đa cấp xám 24

3.2.1 Lấy biên theo trục X 24

3.2.2 Lấy biên theo trục Y 25

3.2.3 Lấy biên theo Gradient 26

3.2.4 Lấy biên theo Thresholding 26

3.2.5 Lấy biên theo Thinning 27

3.3 Tổng kết 28

Chương 4. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 30

4.1 Kết luận 30

4.2 Hướng phát triển 30

4.2.1 Đặt vấn đề 30

4.2.2 Phương pháp thực hiện 31

TÀI LIỆU THAM KHẢO .32

 

 

 

doc39 trang | Chia sẻ: netpro | Lượt xem: 2072 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Khóa luận Nghiên cứu các kỹ thuật dò biên áp dụng trong trích chọn các bộ phận khuôn mặt, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
kỹ thuật đạo hàm. - Nếu lấy đạo hàm bậc nhất của ảnh: ta có phương pháp Gradient Định nghĩa: Gradient là một vector f(x, y) có các thành phần biểu thị tốc độ thay đổi mức xám của điểm ảnh (theo hai hướng x, y trong bối cảnh xử lý ảnh hai chiều) tức: Trong đó dx, dy là khoảng cách giữa 2 điểm kế cận theo hướng x, y tương ứng (thực tế chọn dx=dy=1). Đây là phương pháp dựa trên đạo hàm riêng bậc nhất theo hướng x, y. Gradient trong gốc tọa độ góc (r, θ), với r là vector, θ là góc H2.2. Vector gradient 2.2.1 Kỹ thuật Gradient Theo định nghĩa về Gradient, nếu áp dụng nó vào xử lý ảnh, việc tính toán sẽ rất phức tạp. Để đơn giản mà không mất tính chất của phương pháp Gradient, người ta sử dụng kỹ thuật Gradient dùng cặp mặt nạ H1, H2 trực giao (theo 2 hướng vuông góc). Nếu định nghĩa g1, g2 là Gradient theo hai hướng x, y tương ứng thì biên độ g(m, n) tại điểm (m, n) được tính: Đặt A0 = g(m,n); Để giảm độ phức tạp tính toán, A0 được tính gần đúng như sau: Xét một số toán tử Gradient tiêu chuẩn như toán tử Robert, Sobel, Prewitt, đẳng hướng (Isometric), 4-lân cận dưới đây. H2.3. Toán tử 4 lân cận Toán tử Robert (1965). Robert áp dụng công thức tính Gradient tại điểm (x, y) như hình trên Wij với mỗi điểm ảnh I(x, y) đạo hàm theo x, y được ký hiệu tương ứng gx, gy: Các công thức kể trên được cụ thể hóa bằng các mặt nạ theo chiều x và y tương ứng như sau: Mặt nạ Robert Toán tử (mặt nạ) Sobel Toán tử Sobel được Duda và Hart [5] đặt ra năm 1973 với các mặt nạ tương tự như của Robert nhưng cấu hình khác như sau: Hướng ngang (x) Hướng dọc (y) Mặt nạ Prewitt Toán tử Prewitt đưa ra năm 1970 có dạng: Hướng ngang (x) Hướng dọc (y) Mặt nạ đẳng hướng: Một mặt nạ khác cũng được nêu như dưới đây gọi là mặt nạ đẳng hướng (Isometric). Hướng ngang (x) Hướng dọc (y) Toán tử 4-lân cận (4-Neighbour Operator). Toán tử 4-lân cận được Chaudhuri và Chandor (1984) nêu ra trong đó mặt nạ có kích thước 3x3 được thay cho mặt nạ 2x2 của toán tử Robert. Các mặt nạ này được cho: H3. Mặt nạ 4 lân cận H2.4. Mặt nạ 8 hướng theo Kirsh. Một vài nhận xét: Toán tử Prewitt có thể tách sườn tốt hơn toán tử Sobel, trong khi đó toán tử Sobel tách các sườn trên các đường chéo tốt hơn. Mặt khác, các toán tử Robert và các toán tử 4-lân cận có nhược điểm là nhạy với nhiễu. Các toán tử Gradient và Sobel giảm nhiễu do tác dụng của lọc trung bình các điểm lân cận. Như vậy, để đạt được kết quả mong muốn các toán tử Gradient thường được dùng trước để làm sạch nhiễu. Các mặt nạ của các toán tử trên có kích thước 2x2 hoặc 3x3 chiều. Các mặt nạ có số chiều lớn hơn cũng được sử dụng. Ví dụ trong kỹ thuật phát hiện biên người ta dùng mặt nạ 5x5 cho toán tử Sobel: Toán tử Sobel 5x5. Các toán tử kể trên đều sử dụng các mặt nạ theo hai chiều (x, y) tức là 4 hướng (-x, y-y, y) với mục đích cho kết quả chính xác hơn(khi mà tốc độ và bộ nhớ máy tính tốt. ) Toán tử la bàn Kirsh đã đã đề xuất mặt nạ 8 hướng như 8 hướng của La bàn(Compass). Hình dưới là mô hình 8 hướng và được đặt tên theo hướng địa lý và theo chiều kim đồng hồ: Đông, Đông – Nam, Nam, Nam – Tây, Tây, Tây – Nam, Tây – Bắc, Bắc, Đông – Bắc; mỗi hướng lệch nhau 45 độ. Toán tử la bàn Kirsh: Có nhiều toán tử la bàn khác nhau. Ta xem xét toán tử la bàn Kirsh đặc trưng bởi tám mặt nạ với kích thước 3x3 như sau: Ký hiệu là Gradient theo 8 hướng như 8 mặt nạ kể trên, khi đó biên độ Gradient tại điểm ảnh (x, y) được tính theo - Nếu lấy theo đạo hàm bậc hai của ảnh: ta có phương pháp Laplace Hai phương pháp này gọi chung là phương pháp dò biên cục bộ. Toán tử la bàn khác: Ngoài toán tử la bàn Kirsh, một số toán tử la bàn khác sử dụng bộ mặt nạ 8 hướng khác như: Hoặc: Trường hợp tổng quát, người ta có thể mở rộng các mặt nạ với n hướng cách đều tương ứng với các mặt Wi; i=1, 2, …, n. Khi đó, biên độ tại hướng thứ i với mặt nạ Wi được xác định: Kỹ thuật Laplace Để khắc phục hạn chế và nhược điểm của phương pháp Gradient, trong đó sử dụng đạo hàm riêng bậc nhất người ta nghĩ đến việc sử dụng đạo hàm riêng bậc hai hay toán tử Laplace. Phương pháp dò biên theo toán tử Laplace hiệu quả hơn phương pháp toán tử Gradient trong trường hợp mức xám biến đổi chậm, miền chuyển đổi mức xám có độ trải rộng. Toán tử Laplace được đĩnh nghĩa như sau: Toán tử Laplace dùng một số mặt nạ khác nhau nhằm tính gần đúng đạo hàm riêng bậc 2. Các dạng mặt nạ theo toán tử Laplace bậc 3x3 có thể: Ghi chú: Mặt nạ H1 còn cải biên bằng việc lấy giá trị ở tâm bằng 8 thay vì giá trị 4. Để thấy rõ việc xấp xỉ đạo hàm riêng bậc 2 trong không gian 2 chiều với mặt nạ H1 làm ví dụ, ta có thể tính gần đúng như sau: Do đó: Tóm lại: Kỹ thuật theo toán tử Laplace tạo đường biên mảnh (có độ rộng 1 pixel). Nhược điểm của kỹ thuật này rất nhạy với nhiễu, do vậy đường biên thu được thường kém ổn định. Tách sườn theo ảnh Canny Bộ tách sườn ảnh theo Canny (1986) dựa trên cặp đạo hàm riêng bậc nhấtvới việc làm sạch nhiễu. Mục này được để riêng vì đây là phương pháp tách đường biên khá phổ biến được dùng theo toán tử đạo hàm. Như đã nói, phương pháp đạo hàm chịu ảnh hưởng lớn của nhiễu. Phương pháp đạt hiệu quả cao khi xấp xỉ đạo hàm bậc nhất của Gauss. Với fx, fy là đạo hàm riêng theo x,y của f. Do vậy: Lấy đạo hàm riêng theo x và y của G ta được: H2.5. Mô hình tính của phương pháp Canny. Do bộ lọc Gauss là tách được, ta có thể thực hiện riêng biệt các tích chập theo x và y: Từ đó ta có: Với biên độ và hướng tính theo công thức trên, thuật toán được minh họa như hình H2.5 trên. Dò biên theo quy hoạch động Như trên đã nói, dò biên theo phương pháp Gradient là xác định cực trị cục bộ của Gradient theo các hướng; còn phương pháp Laplace dựa vào các điểm không của đạo hàm bậc hai. Phương pháp dò biên theo quy hoạch động là phương pháp tìm cực trị tổng thể theo nhiều bước. Nó dựa vào nguyên lý tối ưu của Bellman. Nguyên lý này phát biểu như sau: “Con đường tối ưu giữa 2 điểm cho trước cũng là tối ưu giữa 2 điểm bất kỳ nằm trên đường tối ưu đó”. Thí dụ, nếu C là một điểm trên con đường tối ưu giữa A và B thì đoạn CB cũng là còn đường tối ưu từ C đến B không kể đến ta đến C bằng cách nào. H2.6. Minh họa nguyên lý Bellman Trong kỹ thuật này, giả sử bản đồ biên đã được xác định và được biểu diễn dưới dạng đồ thị liên thông N chặng. Giả sử hàm đánh giá được tính theo công thức: Với: Xk, k=1,...,N: Biểu diễn các đỉnh đồ thị của đồ thị trong chặng thứ k; D(x, y): Khoảng cách giữa 2 đỉnh x và y tính theo các định nghĩa tương ứng về khoảng cách; |g(xk)| và θ(xk) Gradient biên độ và Gradient hướng ở đỉnh xk. α và β các hằng số không âm. Đường bao tối ưu sẽ nhận được bằng cách nối các đỉnh xk, k=1,..., N nào đó sao cho S(x1,..., xN, N) đạt cực đại. Định nghĩa hàm ф như sau: Bây giờ ta có: Lấy N = k. Như vậy: Với cách này, thay vì tìm tối ưu toàn cục phức tạp của S(x1, …,xN, N), ta tìm tối ưu của N chặng theo tối ưu 2 biến. Trong mỗi chặng, với mỗi xk tìm tối ưu, ( k x k φ. Để dễ hình dung, xét ví dụ sau: Giả sử có bản đồ biểu diễn bởi đồ thị liên thông. Theo phương pháp trên có 5 ) 1, ( = A φ, với k =2 có . ) 2, ( 12 max(11,12) D = = φ Điều đó có nghĩa là đường từ A đến D đi qua C và ACD là biên được chọn với k=2. Tương tự, với k=4, có hai đường được chọn là ACDEF và AGHJ. Tuy nhiên, với k=5 thì đoạn JB bị loại và chỉ tồn tại đường duy nhất với cực đại là 28. Như vậy, biên được xác định là ADEFB. a. Đồ thị liên thông biểu diễn biên b. Quá trình dò biên theo quy hoạch động H2.7. Dò biên theo phương pháp quy hoạch động Trên hình những đường nét đứt đoạn biểu thị cung bị loại; đường nét liền có mũi tên biểu thị đường đi hay biên của ảnh. 2.3 Kỹ thuật phát hiện biên gián tiếp Nếu bằng cách nào đấy, chúng ta thu được các vùng ảnh khác nhau thì đường phân cách giữa các vùng đó chính là biên. Nói cách khác, việc xác định đường bao của ảnh được thực hiện từ ảnh và được phân vùng. Phương pháp dò biên gián tiếp khó cài đặt nhưng áp dụng tốt khi sự biến thiên độ sáng nhỏ. 2.4 Một số phương pháp khác Ngoài các phương pháp trên, người ta cũng áp dụng một số phương pháp khác cải tiến như tiếp cận bởi mô hình mặt, cách tiếp cận tối ưu hóa. Cách tiếp cận theo mô hình mặt dựa vào việc thực hiện xấp xỉ đa thức trên ảnh gốc hay ảnh đã thực hiện phép lọc Laplace. Cách tiếp cận tối ưu nhằm xác định một hàm (một bộ lọc), làm giảm phương sai σ2 hoặc giảm một số điểm cực trị cục bộ. Dưới đây sẽ trình bày một cách tóm tắt các phương pháp đó. Tiếp cận theo mô hình mặt Tư tưởng của phương pháp này là tại lân cận điểm cắt không (điểm biên), ảnh sau khi lọc Laplace có thể được xấp xỉ bởi một đa thức bậc 3 theo hàng và cột. Đa thức thường được dùng là đa thức Trebưchép với kích thước 3x3. Các đa thức này được định nghĩa như sau: Với mỗi điểm cắt không phát hiện tại P(x, y) trong ảnh đã được lọc bởi toán tử Laplace – Gauss, Huertas và Medioni đã cho được tính theo công thức tính xấp xỉ: Vấn đề là xác định các hệ số ai, i=1, 2, …, N-1. Nếu W là cửa số lọc tại điểm cắt không và x, y, i, j trong cửa số; các hệ số a có thể được tính toán như một tổ hợp tuyến tính: ở đây, IL-G(x, y) là ký hiệu ảnh đã được lọc bởi toán tử Laplace–Gauss. Các hệ số này có thể nhận được bởi chập ảnh IL-G(x, y) với các nhân chập như trung bình có trọng số hay một số nhân chập khác. Các bước cài đặt phương pháp nhày có thể mô tả như sau: Chập ảnh gốc kích thước NxM với toán tử Laplac –Gauss kích thước M2, ảnh thu được gọi là IL-G. Trích chọn các điẻm cắt không của ảnh IL-G, ảnh kết quả ký hiệu là IZCR. Với mỗi điểm cắt không trong IZCR, thực hiện một xấp xỉ với kích thước 3x3 để suy ra các điểm cắt không theo cách gải tích. Tạo một ảnh mới của các điểm cắt không kích thước nXxnY mà các đường bao được xác định với độ phân giải n nào đó. Tiếp cận tối ưu hóa Ý tưởng của cách tiếp cận này là định vị đúng vị trí bằng cách cực tiểu hóa phương sai σ vị trí các điểm cắt không hoặc hạn chế số điểm cực trị cục bộ để chỉ tạo ra một đường bao. Canny đã đề xuất 3 ràng buộc ứng với 3 điều kiện: Ràng buộc đầu tiên (∑) nhằm tìm hàm h(x) phản đối xứng sao cho tỉ số giữa tín hiệu và nhiễu là cực đại. Ràng buộc thứ hai (Λ) nhằm cực tiểu hóa phương sai. Ràng buộc thứ ba nhằm hạn chế điểm cực trị cục bộ với mục đích cung cấp chỉ một đường bao. 2.5 Tổng kết Các kỹ thuật sử dụng phương pháp Gradient khá tốt khi độ sáng có tốc độ thay đổi nhanh, khá đơn giản trên cơ sở các mặt nạ theo các hướng. Nhược điểm của các kỹ thuật Gradient là nhạy cảm với nhiễu và tạo các biên kép làm chất lượng biên thu được không cao. Ngoài ra, người ta còn sử dụng phương pháp “đi theo đường bao” dựa vào công cụ toán học là nguyên lý quy hoạch động và được gọi là phương pháp dò biên tổng thể. Phương pháp dò biên trực tiếp có hiệu quả và ít bị tác động bởi nhiễu. Chương 3. CÁC KỸ THUẬT DÒ BIÊN ĐƯỢC ÁP DỤNG 3.1 Các kỹ thuật được dùng Biên là tập hợp các điểm tại đó hàm độ sáng của ảnh thay đổi cục bộ đột ngột, do đó để phát hiện biên và tách biên ta dùng phép toán đạo hàm. Các phép toán đạo hàm thường dùng là đạo hàm bậc nhất và đạo hàm bậc 2. Vị trí của biên chính là gía trị lớn nhất của đạo hàm bậc nhất và là các điểm tại đó giá trị của đạo hàm bậc 2 có sự đi qua điểm 0. Chương trình sử dụng kỹ thuật phát hiện biên trực tiếp, tức là lấy đạo hàm bậc nhất theo phương pháp Gradient. Chương trình áp dụng hàm Gauss với khai báo: với các hằng số thực a > 0, b, c > 0, và e ≈ 2. 718281828 (Số Euler). Hàm Gauss được sử dụng rộng rãi. Trong thống kê chúng miêu tả phân bố chuẩn, trong xử lý tín hiệu chúng giúp định nghĩa bộ lọc Gauss, trong xử lý hình ảnh hàm Gauss hai chiều được dùng để tạo hiệu ứng mờ Gauss và được sử dụng để làm trơn để xây dựng các hàm wavelet ứng dụng cho việc xác định biên, cụ thể trong chương trình này ta dùng phương pháp Gradient, và trong toán học chúng được dùng để giải phương trình nhiệt và phương trình khuyếch tán và định nghĩa phép biến đổi Weierstrass. Biểu đồ của một hàm Gauss là một đường cong đối xứng đặc trưng "hình quả chuông". Đường cong này rớt xuống rất nhanh khi tiến tới cộng/trừ vô cùng. Tham số a là chiều cao tối đa đường cong, b là vị trí tâm của đỉnh và c quyết định chiều rộng của "chuông". H3.1Đường cong Gauss chuẩn hóa với giá trị kỳ vọng μ và phương sai σ2. Những tham số tương ứng là a = 1/(σ), b = μ, c = σ Tiếp đến ta sử dụng hàm dgauss với công thức như sau: y = -x ae-((x-b)^2)/2c^2 / c2; Với hàm Gauss có công thức được định nghĩa như sau: y = e-x^2/(2c^2) / (c); Hàm này chính là đạo hàm của hàm gauss với các tham số của hàm tương ứng là a = 1/(c), b = 0, c = c. Và hàm d2dgauss: h = d2dgauss(n1,sigma1,n2,sigma2,theta) Hàm này tìm kiếm và trả lại biên 2D với ảnh có cỡ n1 * n2. Theta là góc xoay theo chiều kim đồng hồ, theo thứ tự của size của bức ảnh các thành phần lần lượt sẽ được xoay một góc theta và tiến hành lấy tích của hàm Gauss với các tham số thứ nhất với đạo hàm của hàm Gauss với các tham số thứ 2 ta thu được các giá trị h tương ứng và cuối cùng giá trị hàm sẽ được tính: h = h / ; Sigma1 và sigma2 là độ lệch tiêu chuẩn của hàm gauss. Ban đầu chương trình xử lý ảnh đầu vào và biến đổi thành anh đa cấp xám (gray), sử dụng hàm imread(image) để đọc ảnh đầu vào, sau đó chuyển ảnh này thành đam cấp xám bằng hàm ind2gray(x, map) và tiến hành lấy biên 2D theo các kỹ thuật mà được nói kỹ ở phần dưới. Lấy biên theo trục X Với các thông số chuẩn của hàm Gauss, khi lấy biên theo trục X ta sẽ đưa bức ảnh về kích thước 10X10, các tham số chuẩn của hàm Gauss Sigmax1=Sigmax2=1, góc quay Theta1=pi/2. Sau khi ảnh vào được đọc bởi hàm imread(image) và được chuyển thành ảnh đa cấp xám qua hàm ind2gray(x, map). Và quy trình lấy biên theo trục X sẽ được tiến hành với ảnh đa cấp xám này. Ta sử dụng hàm d2dgauss là hàm với các tham số cụ thể: filterx=d2dgauss(Nx1,Sigmax1,Nx2,Sigmax2,Theta1); w=ind2gray(x,map); Qua bước xử lý này thì đã lấy được biên theo các tham số ứng với trục X, bước tiếp theo là hiển thị ra màn hình biên theo trục X. Ta sử dụng hàm conv2: Ix= conv2(w,filterx,'parameters'); Với hàm Conv2 với shape = same: conv2(matrix, kernel, 'same'), ma trận kết quả có chiều giống như matrix, và giá trị tại mổi phần tử được tính bằng cách quét tâm của kernel trên toàn bộ matrix rối tính tổng tích các cặp điểm tương ứng giữa matrix và kernel. Điểm tâm của kernel được xác định bằng điểm giữa của ma trận, ví dụ nếu kernel là ma trận 3x3 thì tâm là điểm có tọa độ 1:1, nếu kernel là ma trận 4x4 thì tâm cũng là điểm 1:1. H3.2 Hàm conv2 với tham số same Conv2 với shape = full: conv2(matrix, kernel, 'full'), nếu matrix có chiều là m1 x n1, kernel có chiều là m2 x n2 thì ma trận kết quả có chiều là (m1 + m2 - 1) x (n1 + n2 - 1) và giá trị tại mổi phần tử được tính bằng cách quét toàn bộ, tuần tự từng điểm của ma trận Kernel lên từng điểm trên ma trận matrix sau đó tính tổng tính các cặp điểm tương ứng, trong quá trình quét có những điểm trên Kernel nằm ngoài matrix khi đó tích của nó bằng 0. H3.3 Hàm conv2 với tham số full Conv2 với shape = valid: conv2(matrix, kernel, 'valid'), nếu matrix có chiều là m1 x n1, kernel có chiều là m2 x n2 thì ma trận kết quả có chiều là (m1 - m2 + 1) x (n1 - n2 + 1) và giá trị tại mỗi phần tử được tính giống như trường hợp full nhưng với điều kiện là ma trận kernel trong quá trình quét luôn nằm trọn vẹn bên trong ma trận matrix. H3.2 Hàm conv2 với tham số valid Lấy biên theo trục Y Với các thông số chuẩn của hàm Gauss, khi lấy biên theo trục Y cũng có quy trình tương tự như quy trình lấy biên theo trục X với các tham số tương ứng kích thước ảnh 10X10, các tham số chuẩn của hàm Gauss Sigmay1=Sigmay2=1, góc quay Theta1=0. Lấy biên theo Gradient Với phương pháp Gradient ta kết hợp cả theo trục X và Y. Với Ix và Iy ta tính được ở trên thì ta tính: NVI= ; Hàm lấy căn bậc hai của bình phương các giá trị tham số theo trục X và Y. Sau khi đó ta sẽ được giá trị theo hướng đường chéo hình chữ nhật hướng xuống góc phần tư thức tư với 2 hướng của hình chữ nhật là trục X và trục âm Y. Các tham số của ma trận ảnh theo phương pháp Gradient sẽ được tính như công thức căn bậc 2 trên. Lấy biên theo Thresholding Thresholding là hoạt động đầu tiên được thực hiện để tạo ra một mặt phân đoạn. Chúng ta có thể lựa chọn một vùng mà ta quan tâm bằng cách định nghĩa một phạm vi của những gray value. Những ranh giới của phạm vi đó là các giá trị ngưỡng trên và ngưỡng dưới. Tất cả các điểm tương ứng với một gray value trong phạm vi đó sẽ được tô sáng trong một mặt. Theo phương pháp này giá trị min và max của ma trận Gradient sẽ được xác định qua các hàm max, min. Như sau: I_max=max(max(NVI)); I_min=min(min(NVI)); Ngưỡng sẽ được định nghĩa như sau: level=alfa*(I_max-I_min)+I_min; alfa=0.1; Và sau đó những tham số nào trong ma trận Gradient mà lớn hơn ngưỡng này sẽ được hiển thị. Và ta hiển thị biên theo phương pháp này. Lấy biên theo Thinning Phương pháp này áp dụng kết quả của các phương pháp trước để phát triển lên. Với m, n là kích cỡ của ảnh theo trên. Phương pháp sử dụng phép nội suy để tìm các điểm ảnh. Nội suy hàm 1 biến:MATLAB dùng hàm interp1(x,y,xi,)với x, là giá trị của hàm tại những điểm đã cho và xi là giá trị mà tại đó ta cần nội suy ra giá trị yi. có thể là một trong các giá trị sau :‘nearest’- phương pháp này đặt giá trị nội suy vào giá trị đã cho gần nhất, phươngpháp này nhanh nhưng kết quả kém chính xác nhất. Vídụ: x=[12345]; y=[5.5,43.1,128,290.7,498.4]; yi=interp1(x,y,1.6,'nearest') yi=43.1000 ‘linear’- phương pháp này coi đường cong đi qua 2 điểm cho trước là đường thẳng. Vídụ: yi=interp1(x,y,1.6,'linear') yi=28.0600 ‘spline”- dùng phương pháp nội suy spline. Vídụ: yi=interp1(x,y,1.6,'spline') yi=24.9782 ‘cubic’- phương pháp này coi đường cong qua 2 điểm là đường cong bậc 3. Vídụ: yi=interp1(x,y,1.6,'cubic') yi=25 22.3840 Nội suy hàm hai biến: Hàm interp2 thực hiện nội suy hàm 2 biến. Dạng hàm tổng quát: ZI=interp2(X,Y,Z,XI,YI,) Z- ma trận chữ nhật chứa giá trị của hàm 2 biến. X,Y-mảng có cùng kích thước, chứa giá trị x, y đã cho. XI,YI-mảng chứa giá trị cần nội suy. Cácgồm:‘nearest’,’linear’,’cubic’ Nội suy mảng nhiều chiều: interp3 nội suy hàm 3 biến. interpn nội suy hàm nhiều biến. Phương pháp này là duyệt các ma trận điểm ảnh lần lượt là: X=[-1,0,+1;-1,0,+1;-1,0,+1]; Y=[-1,-1,-1;0,0,0;+1,+1,+1]; Z=[Ibw(i-1,j-1),Ibw(i-1,j),Ibw(i-1,j+1); Ibw(i,j-1),Ibw(i,j),Ibw(i,j+1); Ibw(i+1,j-1),Ibw(i+1,j),Ibw(i+1,j+1)]; XI=[Ix(i,j)/NVI(i,j), -Ix(i,j)/NVI(i,j)]; YI=[Iy(i,j)/NVI(i,j), -Iy(i,j)/NVI(i,j)]; và tiến hành nội suy với hàm: ZI=interp2(X,Y,Z,XI,YI); Sau đó ta sẽ so sánh với các hệ số của ma trận điểm ảnh Thresholding nếu: if Ibw(i, j) >= ZI(1) & Ibw(i, j) >= ZI(2); Thì: I_temp(i,j)=I_max; Nếu ngược lại: I_temp(i,j)=I_min; Ma trận điểm ảnh mới sẽ được hình thành, hay phương pháp này còn được gọi là phương pháp Thinning. 3.2 Chương trình và kết quả Chương trình gồm 10 file mã. Trong đó gồm có 3 file đưa ra hàm Gauss nhằm mục đích làm trơn ảnh, đạo hàm của hàm Gauss, và hàm biến đổi hệ số của ma trận ảnh. Sau đó là 7 file chứa các phương pháp lấy biên của bức ảnh khuôn mặt. Trong đó có 5 file chứa 5 kỹ thuật phát hiện biên, một file show tất cả 5 phương pháp để có sự so sánh, một file thể hiện ảnh đa cấp xám, ảnh biến đổi từ ảnh gốc. Sau đây là chương trình cụ thể: Hàm Gauss với file gauss.m: function y = gauss(x,std) y = exp(-x^2/(2*std^2)) / (std*sqrt(2*pi)); Hàm dgauss là đạo hàm của hàm gauss được nêu ra ở trên với file dgauss.m: function y = dgauss(x,std) y = -x * gauss(x,std) / std^2; Hàm d2dgauss là hàm biến đổi lấy biên ra biên 2D qua các phép biến đổi các hệ số của ma trận ảnh đầu vào: function h = d2dgauss(n1,sigma1,n2,sigma2,theta) r=[cos(theta) -sin(theta); sin(theta) cos(theta)]; for i = 1 : n2 for j = 1 : n1 u = r * [j-(n1+1)/2 i-(n2+1)/2]'; h(i,j) = gauss(u(1),sigma1)*dgauss(u(2),sigma2); end end h = h / sqrt(sum(sum(abs(h).*abs(h)))); Với các tham số ban đầu được định nghĩa như sau: Huong theo truc X: Nx1=10;Sigmax1=1;Nx2=10;Sigmax2=1;Theta1=pi/2; Huong theo truc Y: Ny1=10;Sigmay1=1;Ny2=10;Sigmay2=1;Theta2=0; Sau đó bức ảnh chân dung sẽ được xử lý chuyển sang dạng ảnh đa cấp xám: [x,map]=imread('chandung.gif'); w=ind2gray(x,map); figure(1);colormap(gray); Ảnh này sẽ được hiển thị trên một cửa sổ thông qua lệng figure(1), và colormap(gray) hàm set và get màu hiện tại cho bản đồ màu. Và sau với bức ảnh đầu vào ta có bức ảnh đa cấp xám: ind2gray(x,map Ảnh đầu vào Ảnh đa cấp xám H3.3 Biến thành ảnh đa cấp xám Lấy biên theo trục X Quy trình lấy biên theo trục X sẽ được thực hiện bởi đoạn mã sau: subplot(1,1,1); filterx=d2dgauss(Nx1,Sigmax1,Nx2,Sigmax2,Theta1); Ix= conv2(w,filterx,'same'); imagesc(Ix); title('Ix'); Biên lấy theo trục X sẽ được hiển thị qua cửa sổ thứ nhất với kích cỡ cửa sổ 1x1 thông qua hàm subplot(1,1,1), thông qua hàm d2dgauss với những tham số chuẩn được đưa ra phương pháp lọc biên theo trục X sẽ được thực hiện và tiếp là hàm trả lại phần trung của 2 phần giao nhau thông qua hàm conv2(w,filterx,’same’), cuối cùng nội dung sẽ được hiển thị thông qua imagesc(Ix) với tiêu đề là title(‘Ix’). Và kết quả được hiển thị: Biến đổi theo trục X Đa cấp xám Biên theo trục X H3.4 Lấy theo trục X Lấy biên theo trục Y Quy trình lấy biên theo trục Y sẽ được thực hiện bởi đoạn mã sau: subplot(1,1,1) filtery=d2dgauss(Ny1,Sigmay1,Ny2,Sigmay2,Theta2); Iy=conv2(w,filtery,'same'); imagesc(Iy); title('Iy'); Biên lấy theo trục X sẽ được hiển thị qua cửa sổ thứ nhất với kích cỡ cửa sổ 1x1 thông qua hàm subplot(1,1,1), thông qua hàm d2dgauss với những tham số chuẩn được đưa ra phương pháp lọc biên theo trục Y sẽ được thực hiện và tiếp là hàm trả lại phần trung của 2 phần giao nhau thông qua hàm conv2(w,filtery,’same’), cuối cùng nội dung sẽ được hiển thị thông qua imagesc(Iy) với tiêu đề là title(‘Iy’). Và kết quả được hiển thị: Biến đổi theo trục Y Đa cấp xám Biên theo trục Y H3.5 Biến đổi theo trục Y Lấy biên theo Gradient Phương pháp Gradient là phương pháp lấy biên trực tiếp với sự kết hợp 2 phương pháp lấy biên theo trục X và trục Y ở trên. Hệ số Gradient sẽ được định nghĩa theo đường độ dài đường chéo hình chữ nhật với 2 cạnh là 2 tham số Ix và Iy. Và hàm được định nghĩa như sau: Loc theo phuong phap Gradient(Ket hop loc theo truc X va Y) subplot(1,1,1); NVI=sqrt(Ix.*Ix+Iy.*Iy); imagesc(NVI); title('Norm of Gradient'); Và kết quả nhận được theo phương pháp này: Ket hop loc theo truc X va Y Biên theo Gradient H3.6 Biến đổi theo Gradient Lấy biên theo Thresholding Phương pháp Thresholding là phương pháp lọc theo ngưỡng và trong trường hợp này thì nhưng hệ số ma trận Gradient mà cao hơn ngưỡng thì sẽ được giữ lại và hiển thị, đoạn mã như sau: I_max=max(max(NVI)); I_min=min(min(NVI)); level=alfa*(I_max-I_min)+I_min;(*) subplot(1,1,1); Ibw=max(NVI,level.*ones(size(NVI))); imagesc(Ibw); title('After Thresholding'); Ở đây các hệ số lớn nhất của ma trận sẽ được tính, sau đó level(ngưỡng) sẽ được tính theo công thức (*), sau đó các hệ số của ma trận sẽ được so sánh với ngưỡng này và được chọn và hiển thị hay còn gọi là phương pháp Thresholding, kết quả như sau: Biến đổi theo thresholding Biên theo Gradient Biên theo Thresholding H3.7 Biến đổi theo Thresholding Lấy biên theo Thinning Phương pháp Thinning là phức tạp hơn cả, phương pháp sử dụng hàm nội suy ma trận với các ma trận 0,1 và các ma trận các hệ số của thresholding, ma trận hệ số theo trục X chia cho hệ số Gradient, và hệ số trục Y trên hệ số Gradient. Được nội suy thông qua hàm interp2() và sau đó ta sẽ so sánh các hệ số của ma trận nội suy với các hệ số của ma trận thresholding, các hệ số sẽ được chọn và hình thành ma trận mới, cụ thế chương trình như sau: subplot(1,1,1); [n,m]=size(Ibw); for i=2:n-1, for j=2:m-1, if Ibw(i,j) > level, X=[-1,0,+1;-1,0,+1;-1,0,+1]; Y=[-1,-1,-1;0,0,0;+1,+1,+1]; Z=[Ibw(i-1,j-1),Ibw(i-1,j),Ibw(i-1,j+1); Ibw(i,j-1),Ibw(i,j),Ibw(i,j+1); Ibw(i+1,j-1),Ibw(i+1,j),Ibw(i+1,j+1)]; XI=[Ix(i,j)/NVI(i,j), -Ix(i,j)/NVI(i,j)]; YI=[Iy(i,j)/NVI(i,j), -Iy(i,j)/NVI(i,j)]; ZI=interp2(X,Y,Z,XI,YI); if Ibw(i,j) >= ZI(1) & Ibw(i,j) >= ZI(2) I_temp(i,j)=I_max; else I_temp(i,j)=I_min; end else I_temp(i,j)=I_min; end end end imagesc(I_temp); title('After Thinning'); Sau đây là kết quả chương trình trên: Theo thinning Biên theo Thresholding Biên theo Thinning H3.8 Biến đổi theo Thinning 3.3 Tổng kết Với việc sử dụng hàm Gauss hai chiều để tạo hiệu ứng mờ Gauss và được sử dụng để làm trơn để xây dựng các hàm wavelet ứng dụng cho việc xác định biên, cụ thể trong chương trình này ta dùng phương pháp Gradient và sau đó sử dụng thêm các phương pháp được phát triển lên thêm theo phương pháp Thresholding và Thinning ta đã thu được những đường biên khác nhau và hiệu quả đã được tăng dần theo từng phương pháp. Điều này sẽ được thể hiện rõ nét hơn khi được thể hiện qua hình dưới: H3.9 Quy trình biến đổi lấy biên theo thinning Ta thấy biên được tách biệt một cách rõ ràng hơn khi qua phươg pháp

Các file đính kèm theo tài liệu này:

  • docNghiên cứu các kỹ thuật dò biên áp dụng trong trích chọn các bộ phận khuôn mặt.doc