Biến hình xử lý ảnh - Đưa con mắt vào trong lòng bàn tay

Tài liệu Biến hình xử lý ảnh - Đưa con mắt vào trong lòng bàn tay: TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA TOÁN – TIN HỌC ------ –— ------ BÁO CÁO BIẾN HÌNH XỬ LÝ ẢNH ĐỀ TÀI : ĐƯA CON MẮT VÀO TRONG LÒNG BÀN TAY Giáo viên hướng dẫn: Phạm Thế Bảo Nhóm thực hiện: Phạm Tuấn Vương - 0411224 Phạm Văn Phương - 0611163 Hoàng Văn Trọng- 0611237 TPHCM - 2009 MỤC LỤC I. LỜI NÓI ĐẦU Môn Biến Hình Xử Lý Ảnh là một trong những môn khá mới mẻ đối với hầu hết các bạn sinh viên. Tuy nhiên, môn học này quả thực rất thú vị với những kiến thức đa chiều về hình ảnh và những cách xử lý hình ảnh rất đa dạng và thực tế. Qua đó, giúp chúng ta có cái nhìn khái quát hơn, chi tiết hơn trong việc xử lý những hình ảnh trong các phần mềm chuyên dụng hiện nay như Photoshop, Corel,… và ứng dụng chúng một cách hiệu quả vào trong thực tế. Lời đầu tiên cho phép chúng tôi gửi lời cảm ơn đến thầy Phạm Thế Bảo - giảng viên phụ trách bộ môn Biến Hình Xử Lý Ảnh người đã cung cấp cho chúng tôi những kiến thức nền tảng để có thể hoàn thành đề tài này. Ngoài ra, thầy cũng đã gi...

doc32 trang | Chia sẻ: hunglv | Lượt xem: 1629 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Biến hình xử lý ảnh - Đưa con mắt vào trong lòng bàn tay, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA TOÁN – TIN HỌC ------ –— ------ BÁO CÁO BIẾN HÌNH XỬ LÝ ẢNH ĐỀ TÀI : ĐƯA CON MẮT VÀO TRONG LÒNG BÀN TAY Giáo viên hướng dẫn: Phạm Thế Bảo Nhóm thực hiện: Phạm Tuấn Vương - 0411224 Phạm Văn Phương - 0611163 Hoàng Văn Trọng- 0611237 TPHCM - 2009 MỤC LỤC I. LỜI NÓI ĐẦU Môn Biến Hình Xử Lý Ảnh là một trong những môn khá mới mẻ đối với hầu hết các bạn sinh viên. Tuy nhiên, môn học này quả thực rất thú vị với những kiến thức đa chiều về hình ảnh và những cách xử lý hình ảnh rất đa dạng và thực tế. Qua đó, giúp chúng ta có cái nhìn khái quát hơn, chi tiết hơn trong việc xử lý những hình ảnh trong các phần mềm chuyên dụng hiện nay như Photoshop, Corel,… và ứng dụng chúng một cách hiệu quả vào trong thực tế. Lời đầu tiên cho phép chúng tôi gửi lời cảm ơn đến thầy Phạm Thế Bảo - giảng viên phụ trách bộ môn Biến Hình Xử Lý Ảnh người đã cung cấp cho chúng tôi những kiến thức nền tảng để có thể hoàn thành đề tài này. Ngoài ra, thầy cũng đã giới thiệu cho chúng tôi những nguồn tài liệu phong phú và bổ ích, bổ sung chi tiết và toàn diện hơn giúp đề tài của chúng tôi hoàn thành có chiều sâu hơn dựa trên những nền tảng kiến thức cơ bản sẵn có. Bên cạnh đó, chúng tôi cũng xin gửi lời cảm ơn đến các bạn cùng lớp đã quan tâm đến đề tài này và tạo điều kiện giúp đỡ chúng tôi khi có điều kiện. Sau cùng là đặc biệt cảm ơn các bạn trong nhóm đã cố gắng hoàn thành đúng tiến độ công việc, cùng nhau cố gắng trong những ngày vừa qua để đề tài có thể hoàn thành tốt đẹp thể hiện trong bản báo cáo này. Một lần nữa, chúng tôi xin chân thành cảm ơn thầy và tất cả các bạn đã quan tâm đến đề tài mà chúng tôi trình bày. II. GIỚI THIỆU – ĐẶT VẤN ĐỀ 1. Đặt vấn đề Làm thế nào để đưa ảnh của Đức Phật vào trong ảnh của một trái táo để ta có được một bức ảnh cuối cùng là Đức Phật đang ngồi vào trong trái táo đó? Một trong những cách đơn giản hiệu quả nhất là ta sẽ khảm bức ảnh Đức Phật này vào ảnh của trái táo đó. Thế nhưng vấn đề nảy sinh ở đây là liệu khi khảm ảnh Đức Phật vào ảnh trái táo bằng phương pháp cắt ghép bình thường thì ảnh cuối cùng đó có được “thật” không, có trơn tru như một ảnh bình thường hay không!? Câu trả lời là không vì chắc chắn rằng ảnh đó người ta sẽ dễ dàng nhận ra là một ảnh ghép do hai bức ảnh này hoàn toàn sai khác nhau về bố cục, màu sắc,… và ghép như vậy thì đường biên phân cách giữa hai ảnh sẽ dễ dàng nhận ra nhất. Vậy vấn đề ta cần giải quyết là ta sẽ làm ẩn đi, mờ đi các đường biên phân cách giữa chúng và phân bổ lại màu sắc sao cho hợp lý là sẽ giải quyết được vấn đề. Do đó, chúng ta sẽ tìm hiểu một kĩ thuật cần thiết để chỉnh sửa dữ liệu màu của ảnh gần đường biên để thu được ảnh cuối cùng là sự tổng hợp của các bức ảnh ban đầu được trơn tru hơn, thật hơn. Đó là kĩ thuật Multiresolution Splining (nội suy đa tầng). 2. Giới thiệu Kĩ thuật Multiresolution Splining được dùng để ghép hai hay nhiều ảnh lại với nhau thành một ảnh khảm lớn, các ảnh này đầu tiên sẽ được nội suy phân tích thành một tập hợp các ảnh thành phần bandpass bằng cách sử dụng tháp Gauss và Laplace. Kế tiếp, các ảnh thành phần này sẽ được ghép lại cũng bằng cách sử dụng giải thuật hàm trọng lượng tương đương trong vùng chuyển tiếp giữa các ảnh tương ứng. Cuối cùng, những ảnh khảm band-pass này sẽ được tổng hợp để thu được ảnh khảm như mong muốn. Đây là kĩ thuật cho phép ghép các ảnh ở các mức khác nhau của sự phân tích, cũng như giải quyết và làm mờ các đường biên giữa chúng ở mỗi mức. Kĩ thuật này thông thường được sử dụng vào việc ghép hai hay nhiều ảnh thành một ảnh lớn được sử dụng thường xuyên để làm ảnh rộng nhìn bao quát, ví dụ những bức ảnh thu được tập hợp từ nhiều bức ảnh để xây dựng một ảnh rộng nhìn bao quát. Hơn nữa, với kĩ thuật này chúng ta có thể rút trích một vài vùng nội dung của ảnh này và đặt chúng vào những ảnh khác, tạo nên một ảnh ghép hoàn toàn như thật, do kĩ thuật này loại bỏ được hoàn toàn đường biên phân cách giữa các ảnh. Trong phần sau của tài liệu báo cáo này chúng tôi sẽ giải thích sâu hơn về kĩ thuật này. III. CÁC KIẾN THỨC CƠ BẢN 1. Cấu trúc biểu diễn ảnh Ảnh NxN pixel là một ma trận NxN. VD ta có ảnh có độ phân giải 256x256 tức là có một ma trận 256x256. Hình vẽ sau mô phổng một ảnh có kích thước (N-1)x(M-1) Tọa độ (x,y) mô tả vị trí trong không gian và giá trị của hàm f(x,y) là cường độ ánh sáng của điểm này. Điểm (x,y) là điểm ảnh trong ảnh và giá trị f(x,y) là giá trị xám (hoặc mức xám) của ảnh f tại (x,y). Có 4 loại ảnh cơ bản : Ảnh cường độ (Intensity images) Ảnh nhị phân (Binary images) Ảnh chỉ mục (Indexed images) Ảnh RGB (RGB images) Sơ đồ các hàm chuyển đổi các loại ảnh trong Mathlab Indexed Binary Intensity RGB General matrix bw2ind im2bw mat2gray ind2rgb rgb2ind im2bw rgb2gray im2bw gray2ind ind2gray 2. Tháp Gauss 2.1 Định nghĩa Tháp Gause của một ảnh kích thước NxN pixel là tập hợp các ảnh G0, G1 .....GN, với G0 Ảnh gốc G1 REDUCE {G0} G2 REDUCE {G1} G3 REDUCE {G2} GN REDUCE {GN-1} … Hình 1 : Biểu diễn ảnh NxN pixel dưới dạng tháp, tháp là tập hợp các ảnh 1x1, 2x2, 4x4, 2kx2k (với 2k = N) Trong đó G0, G1 .....GN là các ảnh thu được trong quá trình lập lại phương thức REDUCE với một hàm trọng lượng cho trước. Với phương thức này, mật độ của mẫu ảnh sẽ giảm đi sau mỗi lần lặp lại quá trình, nhờ đó mà băng thông cũng được giảm trong mỗi lần lặp. Giảm mẫu cũng có nghĩa là quá trình tính toán được giảm xuống mức thấp nhất. Hình 2 : Biểu diễn quá trình REDUCE trong cấu trúc tháp Hình 2 là đồ thị biểu diễn của phương thức REDUCE trong không gian một chiều. Mỗi hàng của các cột sẽ thể hiện các pixel của từng ảnh. Tháp bậc 0 là hàng dưới cùng G0, đây cũng chính là ảnh gốc. Tháp bậc 1 là hàng G1, giá trị mỗi node ở bậc 1 này được tính dựa vào giá trị trọng lượng trung bình của G0 khi đưa mãng 5x5 vào tính. Tương tự các node của dãy G2 được tính từ G1 với cùng cách thức như vậy. Quá trình tiếp tục lặp lại, ta thu được G2 từ G1, G3 từ G2 … Và mỗi lần lặp lại như vậy, các ảnh sẽ chỉ lớn bằng nửa so với các ảnh trước đó. Ta tưởng tượng các ảnh này khi được cất vào một stack sẽ tạo ra một cấu trúc dữ liệu có hình dáng thuôn dần khi càng lên cao, hình dạng giống như một cái tháp. Cả mật độ mẫu và độ phân giải giảm theo từng bậc của tháp. Vì vậy, ta gọi qúa trình đó là toán tử REDUCE. Cho G0 là ảnh gốc thì với 0 < l < N : Nghĩa là: Hàm trọng lượng w(m,n) dùng được sử dụng ở trên trong quá trình tạo từng bậc tháp được gọi là hạt nhân phát sinh (Kernel). Hàm trọng lượng này được chọn với 4 ràng buộc : Thứ 1, tình toán dễ dàng, hạt nhân phát sinh sẽ được phân tách ra, Thứ 2, hàm w một chiều là đối xứng (xem hình 2) Thứ 3, hàm w được tiêu chuẩn hóa, a + 2b + 2c = 1. Thứ 4, mỗi node bậc l sẽ đóng góp những trọng lượng như nhau vào node bậc l + 1, do đó : a + 2c = 2b. Kết hợp 4 điều kiện đó lại với a là biến tùy ý thì ta được b = 1/4 và c= 1/4 - a/2. 2.2 Hàm trọng lượng tương đuơng: Rõ ràng là mọi node ở bậc l của tháp sẽ biểu diễn cho giá trị trọng lượng trung bình của mảng con 5x5 của các node ở bậc l - 1.Các node ở bậc l - 1 lại là biểu diễn của bậc l - 2. Bằng cách này, ta có thể chỉ ra được trọng lượng của node tháp cho sẵn dựa vào ảnh nguyên mẫu G0 để tìm ra “biểu thức hàm trọng lượng tương đương” Wl mà nếu cuốn (convolve) theo ảnh nguyên mẫu thì node sẽ có cùng giá trị ở bậc l. Điều này sẽ tạo thuận lợi cho việc thảo luận về những tình toán trong giới hạn của hàm trọng lượng tương đương, mặc dù quá trình lặp lại hàm REDUCE sẽ có hiệu quả cao hơn và được dùng trong tất cả tính toán. Hàm trọng lượng tương đương có một vài đặc tính quan trọng cho việc lọc cũng như toán tử nội suy (splining operations). Thang đo của hàm tương đương sẽ được gấp đôi khi chuyển từ bậc này sang bậc khác của tháp trong khi hình dáng của chúng không đổi. Hình dạng hàm sẽ được quyết định dựa vào giá trị của tham số a của hat nhân phát sinh. VD nếu a=0.5, thì hàm sẽ là một hình tam giác, còn nếu a=0.4 thì sẽ giống với hàm mật độ Gauss trong lí thuyết xác suất. Việc cuốn lại (convolve) bằng hàm Gauss sẽ tạo ra tác động giống như là bộ lọc thông thấp (low-pass) cho ảnh được xử lý. Việc xây dựng Pyramid tương đương với việc cuốn ảnh với một tập hợp hàm tương tự như hàm Gauss cho trước và tạo ra tập hợp ảnh đã lọc tương ứng. Bởi vì sự thể hiện đa bộ lọc rất quan trọng, nên chúng ta sẽ đặt chuỗi ảnh theo tuần tự G0 , G1, ...GN là tháp Gauss. (Gaussian Pyramid) Hình 3 : Hình dạng của hàm trung bình tương đương thu được bằng cách chọn tham số a.Cho a=0.5, hàm có dạng hình tam giác, a=0.4 thì nó giống hàm Gauss, và a=0.3 thì nó rộng hơn Gauss, a=0.6 là hình trimodel. Giả sử các mẫu trong ảnh G0 được phân tách bởi một đơn vị khoảng cách. Các mẫu ở bậc l sẽ được phân tách bởi khoảng cách 2l. Nó cho biết độ rộng của hàm trọng lượng tương đương Wl là 2l+2 – 4, phủ lên các mẫu 2l+2 – 3, hay chỉ là nhỏ hơn 4 lần so với khoảng cách mẫu (xem Hình 3). Do đó, hàm trọng lượng tương đương được đặt vào giữa trung tâm của các điểm mẫu bậc l sẽ chồng lấn như cách thức mà mỗi pixel ảnh đóng góp vào giá trị của mẫu ở 16 bậc l gần nhất (4 trong 1 chiều). Nếu ta tổng lại các phần đóng góp của mỗi pixel ảnh thì sẽ được kết quả là duy nhất. Với mỗi i, j và l : Hình dạng hàm Gauss và đặc tính cộng của hàm Wl có nghĩa là chúng có thể được dùng để xây dựng hàm trọng lượng H cần thiết cho quá trình nội suy ảnh (hình 2 tai lieu). Giả sử Wl liên quan đến mỗi node ở nửa bên trái của G1 trong khi trọng lượng bằng 0 thì liên quan đến nửa bên phải (Hình 4) .Sau đó cộng các hàm này lại thì sẽ thành một hàm giảm đơn điệu từ l đến 0, với một vùng chuyển tiếp độ rộng T bằng 3 lần khoảng cách mẫu bậc l. Tính chất này sẽ được dùng trong kĩ thuật nội suy đa tầng (multiresolution spline) dựa trên mô hình tháp, mặc dù hàm H và W không bao giờ có thể tính toán được rõ ràng. Hình 4 : Hàm trung bình tương đương. 3. Tháp Laplace 3.1 Định nghĩa Tháp Gauss là một tập hợp những ảnh của bộ lọc thông thấp (low-pass). Trong trường hợp muốn thu được bộ lọc thông dải dùng trong nội suy đa tầng (Multiresolution Spline) chúng ta trừ từng bậc của tháp cho bậc thấp nhất tiếp theo. Bởi vì các mảng này khác nhau về mật độ mẫu cho nên cần nội suy những mẫu mới trước khi thực hiện phép trừ từ mãng kế thấp nhất. Nội suy có thể thực hiện bằng cách đảo chiều quá trình REDUCE. Ta gọi đó là toán tử EXPAND. Đặt Gl,k là ảnh thu được khi expand ảnh Gl k lần thì: Và với k>0: Với EXPAND, chúng ta định nghĩa : Ở đây chỉ mỗi điều kiện mỗi (2i + m) / 2 and (2j + n) / 2 là những số nguyên là ảnh hưởng đến phép cộng . Chú ý rằng Gl,1 cùng kích thước với Gl-1 và G1,1 cùng kích thước với ảnh nguyên mẫu. Bây giờ ta định nghĩa tập hợp các ảnh đã qua bộ lọc thông dải (band-pass) L0, L1, ...LN. Với 0 < l < N Bởi vì không có mãng ở bậc nào cao hơn khi trừ từ GN nên ta định nghĩa LN= GN . Giá trị của từng node trong tháp Gauss có thể xác định trực tiếp bằng cách cuốn (convolve) hàm trọng lượng Wl với ảnh, từng node của Ll xác định bằng cách cuốn (convolve) hàm Wl – Wl+1 với ảnh. Điểm khác nhau này của các hàm tương tự Gauss giống như toán tử Laplace thường dùng trong xử lý ảnh nên ta đặt dãy L0, L1,…..LN là tháp Laplace. (Laplace Pyramid) Hình 5 : 6 ảnh “Lady” là 6 bậc đầu tiên của tháp Gauss, ảnh gốc ở bậc 0 có kích thước là 257x257 pixel, và ở mỗi bậc cao hơn có kích thước bằng phân nửa bậc trước, do đó đên bậc 5 là ảnh có kich thước 9x9 pixel. Hình 6 : Hình ảnh 4 bậc đầu của tháp Gauss và tháp Laplace. Hàng trên là ảnh 4 bậc tháp Gauss. Hàng dưới là ảnh 4 bậc của tháp Laplace, là kết quả của phép trừ 2 ảnh từ tháp Gauss. 3.2 Tổng hợp đặc tính Các bước được dùng để xây dựng tháp Laplace có thể đảo ngược lại để tìm lại ảnh nguyên mẫu G0 1 cách chính xác. Những bậc tháp trên cùng LN được expand trước và sau đó cộng vào LN-1 để lấy lại (recover) GN-1, mảng này sau đó lại expand và cộng với LN-2 để lấy lại GN-2 và tiếp tục như thế. Ta viết: Thủ tục expand và cộng như trên sẽ được dùng để xây dựng một ảnh khảm (mosaic image) từ các thành phần ảnh nội suy đã qua bộ lọc thông dải. (band-pass) 3.3 Trạng thái đường biên: Trong cả 2 toán tử REDUCE và EXPAND, ta phải đặc biệt chú ý tới các node trên biên. Ví dụ khi REDUCE được thực hiện thì hạt nhân phát sinh (Kernel) cho node trên biên ở bậc Gl=1 sẽ kéo giãn trên biên của bậc Gl bởi 2 node. Do đó, trước khi REDUCE (hay EXPAND) được thực hiện thì Gl phải được tăng lên 2 hàng node trên từng cạnh .Giá trị được giới hạn cho các node này nhờ vào việc phản xạ và nghịch đảo dọc theo các node biên. Do đó, nếu Gl (0, j) là node trên biên trái của Gl thì ta có: Và Việc xử lý những đường biên này có hiểu quả cho việc ngoại suy ảnh mà đạo hàm thứ nhất trên các node biên sẽ là hằng số (đạo hàm bậc 2 bằng 0). IV. PHƯƠNG PHÁP 1. Nội suy ảnh chồng lấn (Splining Overlapped Images) Giải thuật nội suy đa tầng (Multiresolution Spline) có thể được định nghĩa khá đơn giản trong các giới hạn của thuật toán tháp cơ bản đã nói ở phần trên. Các biến trong phương pháp này miêu tả việc nội suy các vùng ảnh chồng lấn (splinning overlap) cũng như không chồng lấn, và nội suy hình dạng tùy ý . Việc thay đổi các tác vụ khác sẽ là hiển nhiên. Để bắt đầu, giả sử ta muốn ghép phân nửa bên trái ảnh A và phân nửa bên phải ảnh B. Giả sử rằng 2 ảnh có cùng diện tích, có kích thước 2N + 1 pixel trên một mặt. Quá trình ghép được thực hiện qua 3 bước: B1. Xây dựng tháp Laplace LA và LB từ 2 ảnh A và B. B2. Xây dựng một tháp Laplace thứ 3 LS bằng cách copy những node từ vùng nửa bên trái của LA (tương ứng với vùng nửa ảnh bên trái của LS) và những node từ vùng nửa bên phải ảnh B ( tương ứng với nửa bên phải của LS). Những node nằm ngay đường trung tâm của LS sẽ được đặt là giá trị trung bình của các node LA và LB tương ứng. Đường trung tâm mức l của tháp Laplace ở i=2(N-1) . Do đó với mọi i, j, l B3. Expand và cộng các bậc của LS ta thu được ảnh ghép S. Ví dụ ở Hình 7. Ở đây ta muốn ghép 2 ảnh chụp từ vệ tinh của San Francis, hình 7a và 7b. Cả hai đều khá chính xác nhưng nền ảnh vẫn còn bị nhiễu khuếch tán thêm vào trong quá trình mô phỏng những tác động của những sai biệt có thể có của điều kiện môi trường hay quá trình xử lý ảnh. Chúng ta muốn khảm vùng ảnh bên trái của ảnh này vào cùng nửa ảnh bên phải của ảnh kia. Nếu thực hiện điều này mà không nội suy, đường biên giữa 2 nửa ảnh sẽ dễ dàng nhìn thấy được (hình 7c). Nếu dùng giải thuật nội suy đa tầng, đường biên này sẽ bị loại bỏ.(hình 7d) Hình 7 Ví dụ kế tiếp cho thấy kết quả của việc nội suy hai ảnh khác nhau, một trái táo và một trái cam (hình 8a, 8b). Hình 8c là Hình khảm thu được mà không dùng quá trình nội suy được, còn 8d là hình có sử dụng nội suy. Trong trường hợp này sự chuyển tiếp giữa giữa hai phần ảnh trở nên trơn tru hơn: thêm vào đó là việc trung bình các node Laplace dọc theo đường trung tâm,những node trên các cạnh khác của các node trung tâm được tình trung bình bằng 3/4 đến 1/4 trọng lượng (weight) .Qúa trình nội suy được lặp lại độc lập cho từng thành phần màu đỏ, xanh và xanh dương. Một lần nữa ta thu đựơc ảnh có vùng chuyển tiếp (vùng biên giữa hai ảnh) trơn tru hơn giữa trái táo và trái cam. Trong thủ tục nội suy dựa trên tháp này, hàm trọng lượng W1 đóng vai trò đối ngẫu. Bên trong miền của từng ảnh, nó là hàm nội suy giữa các mẫu bậc l. Dọc theo đường biên giữa hai nửa ảnh, nó hoạt động như là hàm nội suy H. Nếu các ảnh được nội suy là đúng thì ảnh khảm thu được thông qua nội suy tháp sẽ lại tương đồng. Nghĩa là quá trình nội suy bởi chính nó sẽ không làm biến dạng ảnh. Như hình 4, Wl trải rộng gấp hai lần khoảng cách mẫu 2l trên mỗi cạnh của điểm mẫu l. Nó tương tự như khoảng cách chuyển tiếp cho nội suy tần số đã trình bày ở bậc tháp thứ l. Hình 8 2. Vùng nội suy của hình dạng tùy ý (Splining Regions of Arbitrary Shape) Các bước phác họa ở trên có thể được tổng quát cho việc xây dựng một ảnh khảm từ những vùng ảnh của hình dạng tùy ý, Một lần nữa chúng ta giả sử vùng được nội suy được chứa bên trong ảnh A và B đã hoàn thành việc chồng lấn. Giống như trước đó, các node của tháp Laplace LA và LB của từng ảnh thành phần sẽ được kết hợp để tạo thành tháp Laplace LS của ảnh khảm S. Chúng ta giới thiệu thêm một cấu trúc tháp thêm vào để có thể xác định được node nào là của LA, node nào là của LB, và node nào là lấy trung bình của cả hai. Cho R là ảnh nhị phân của hai ảnh có cùng kích cỡ A, B. Trong đó, những pixel nào trong vùng ảnh của A mà nội suy với B sẽ mang giá trị 1 còn nằm ngoài vùng nội suy sẽ mang giá trị 0. Các bước của quá trình nội suy đa tầng được cải tiến như sau : B1a .Xây dựng lần lượt tháp Laplace LA và LB cho ảnh A và B. B1b. Xây dựng một tháp Gauss GR cho vùng ảnh R. B2. Xây dựng tháp LS từ LA và LB dùng các node của GR như là trọng lượng. Nghĩa là với mọi i, j, l : B3. Expand và cộng các bậc của LS ta sẽ thu được ảnh nội suy S. Tháp Gauss đem lại cho ta 2 tác dụng: Là phương pháp thích hợp để xác định xem node ở từng bậc pyramid nằm bên trong của vùng mặt nạ của ảnh R, và nó làm dịu đi đương biên mặt nạ thông qua tác dụng của một bộ lọc thông thấp (low-pass). Nếu không có nó thì quá trình nội suy sẽ rất nhạy với những vị trí của mặt nạ tương ứng với điểm tháp mẫu. Những node nào nằm chính xác tại đường biên mặt nạ sẽ nhận được 1 giá trị là 50% trọng lượng, như đã được nói đến ở phần trước. Những node ở đây nào có khoảng cách gấp 2 lần vị trí mẫu ở cạnh khác của đường biên mặt nạ cũng sẽ được kết hợp bởi bằng giá trị trọng lượng trung bình của LA và LB . Hình 9 là một ví dụ dùng kí thuật này: 9a và 9b là hai ảnh nguyên mẫu, một bàn tay và một con mắt. Hình 9c chỉ ra vị trí mà ảnh 1 được khảm vào ảnh 2 còn 9d là kết quả của quá trình nội suy: con mắt nằm trong lòng bàn tay. Hình 9 IV. CÁCH THỰC HIỆN 1. Tóm tắt phương pháp : Để thực hiện việc ghép một ảnh Đức Phật vào trong một quả Táo, ta sẽ dựa vào phương pháp 2 ( Vùng nội suy của hình dạng tùy ý - Splining Regions of Arbitrary Shape ) như đã trình bày ở trên. Ta có thể tóm gọn phương pháp ấy và giải quyết vấn đề “Đưa Đức Phật vào trong một quả Táo” một cách dễ dàng qua các bước như sau : B1a .Xây dựng lần lượt tháp Laplace LA cho ảnh Đức Phật, LB cho ảnh quả Táo. B1b. Xây dựng một tháp Gauss GR cho vùng ảnh MASK. B2. Xây dựng tháp LS từ LA và LB dùng các node của GR như là trọng lượng. Nghĩa là với mọi i, j, l : B3. Expand và cộng các bậc của LS ta sẽ thu được ảnh nội suy S. 2. Source Code : File Nội dung reduce.m Hàm REDUCE (chuyển ảnh từ bậc n sang bậc n+1). Hàm này được sử dụng trong việc xây dựng tháp Gauss. expand.m Hàm EXPAND. Hàm này được sử dụng trong việc xây dựng tháp Laplace. make_gaussian.m Hàm dùng để xây dựng tháp Gauss make_laplacian.m Hàm dùng để xây dựng tháp Laplace read_color_image.m Hàm dùng để đọc một ảnh và phân tích ảnh này sang 3 kênh màu Red, Green, Blue. reconstruct.m Hàm này dùng để trả về ảnh kết quả cuối cùng sau khi ta thu được LS. engine.m Guồng máy chính của chương trình : phân tích các ảnh nguồn (VD như ảnh Đức Phật, ảnh quả Táo, ảnh Mask) và để xây dựng ảnh ghép cuối cùng RS. Sau đó dùng hàm reconstruct để ra xây dựng lại ảnh. main.m Đưa vào ảnh nguồn (VD như ảnh Đức Phật, ảnh quả Táo, ảnh Mask). Chạy engine để ra được kết quả cuối cùng. reduce.m function RESULT = reduce(INPUT) %% Take an image and return a half-sized one. %% Make a padded copy of the image. [HH, WW] = size(INPUT); T1 = zeros(HH + 4, WW + 4); T1(3:HH + 2, 3:WW + 2) = INPUT; %% Fill in the padded area. for RR=3:HH + 2, T1(RR, 1) = (2 * T1(RR, 3)) - T1(RR, 5); T1(RR, 2) = (2 * T1(RR, 3)) - T1(RR, 4); T1(RR, WW + 3) = (2 * T1(RR, WW + 2)) - T1(RR, WW + 1); T1(RR, WW + 4) = (2 * T1(RR, WW + 2)) - T1(RR, WW ); end for CC=3:WW + 2, T1(1, CC) = (2 * T1(3, CC)) - T1(5, CC); T1(2, CC) = (2 * T1(3, CC)) - T1(4, CC); T1(HH + 3, CC) = (2 * T1(HH + 2, CC)) - T1(HH + 1, CC); T1(HH + 4, CC) = (2 * T1(HH + 2, CC)) - T1(HH, CC); end %% Do the convolution. KERN = fspecial('gauss', [5, 1], 1); T2 = conv2(KERN, KERN, T1, 'same'); %% Make a reduced copy. [HH, WW] = size(INPUT); if mod(HH, 2) == 0, HOUT = (HH / 2); else HOUT = ((HH - 1) / 2) + 1; end if mod(WW, 2) == 0, WOUT = (WW / 2); else WOUT = ((WW - 1) / 2) + 1; end RESULT = zeros(HOUT, WOUT); %% Copy the pixels from the original to the reduced. %% Adjust the offset so that we start at (3, 3). for RR=1:HOUT, for CC=1:WOUT, RESULT(RR, CC) = T2((RR * 2) + 1, (CC * 2) + 1); end end expand.m function RESULT = expand(INPUT, HOUT, WOUT) %% Take an image and reconstruct it. %% Build the result image. [HH, WW] = size(INPUT); T1 = zeros(HOUT, WOUT); %% Copy over the pixels. for RR=1:HH, for CC=1:WW, T1((RR * 2) - 1, (CC * 2) - 1) = INPUT(RR, CC); end end %% Do the filtering, to get the image back. KERN = fspecial('gauss', [5, 1], 1) * 2; RESULT = conv2(KERN, KERN, T1, 'same'); make_gaussian.m function RES = make_gaussian(INPUT) IN_RR = INPUT(:,:,1); IN_GG = INPUT(:,:,2); IN_BB = INPUT(:,:,3); II = 1; [HH, WW] = size(IN_RR); while ((HH > 1) & (WW > 1)), %% Fill in the Gaussian. RES{II, 1} = IN_RR; RES{II, 2} = IN_GG; RES{II, 3} = IN_BB; %% Do the reduction. IN_RR = reduce(IN_RR); IN_GG = reduce(IN_GG); IN_BB = reduce(IN_BB); %% Go to the next level. [HH, WW] = size(IN_RR); II = II + 1; end make_laplacian.m function LPYR = make_laplacian(INPUT) IN_RR = INPUT(:,:,1); IN_GG = INPUT(:,:,2); IN_BB = INPUT(:,:,3); II = 1; [HH, WW] = size(IN_RR); while ((HH > 1) & (WW > 1)), %% Do the reduction. REDUCED_RR = reduce(IN_RR); REDUCED_GG = reduce(IN_GG); REDUCED_BB = reduce(IN_BB); %% Set the Laplacian. [REDUCED_HH, REDUCED_WW] = size(REDUCED_RR); if ((REDUCED_HH > 1) & (REDUCED_WW > 1)), LPYR{II, 1} = IN_RR - expand(REDUCED_RR, HH, WW); LPYR{II, 2} = IN_GG - expand(REDUCED_GG, HH, WW); LPYR{II, 3} = IN_BB - expand(REDUCED_BB, HH, WW); else LPYR{II, 1} = IN_RR; LPYR{II, 2} = IN_GG; LPYR{II, 3} = IN_BB; end %% On to the next level. IN_RR = REDUCED_RR; IN_GG = REDUCED_GG; IN_BB = REDUCED_BB; [HH, WW] = size(IN_RR); II = II + 1; End read_color_image.m function RES = read_color_image(filename) %% Read an image as a standard full color. %% Read the image. INPUT = imread(filename); %% Turn it into full color. if isrgb(INPUT), RES(:,:,1) = double(INPUT(:,:,1)) / 255; RES(:,:,2) = double(INPUT(:,:,2)) / 255; RES(:,:,3) = double(INPUT(:,:,3)) / 255; else RES(:,:,1) = double(INPUT) / 255; RES(:,:,2) = double(INPUT) / 255; RES(:,:,3) = double(INPUT) / 255; end reconstruct.m function RES = reconstruct(LPYR) %% This rebuilds an image from a Laplacian pyramid. [II, DUMMY] = size(LPYR); RES = cell(1, 3); RES{1, 1} = LPYR{II, 1}; RES{1, 2} = LPYR{II, 2}; RES{1, 3} = LPYR{II, 3}; while II > 1, [HH, WW] = size(LPYR{II - 1, 1}); EXPANDED_RR = expand(RES{1, 1}, HH, WW); EXPANDED_GG = expand(RES{1, 2}, HH, WW); EXPANDED_BB = expand(RES{1, 3}, HH, WW); TEMP_RR = EXPANDED_RR + LPYR{II - 1, 1}; TEMP_GG = EXPANDED_GG + LPYR{II - 1, 2}; TEMP_BB = EXPANDED_BB + LPYR{II - 1, 3}; RES{1, 1} = TEMP_RR; RES{1, 2} = TEMP_GG; RES{1, 3} = TEMP_BB; II = II - 1; end engine.m function IMG = engine(INPUTA, INPUTB, MASK) %% Given the image sets, this does the actual pyramid stuff. %% Read in the three images. IMG_A = read_color_image(INPUTA); IMG_B = read_color_image(INPUTB); IMG_M = read_color_image(MASK); %% Adjust them all to the same size. [HH, WW, DUMMY] = size(IMG_A); IMG_B = imresize(IMG_B, [HH WW], 'bilinear'); IMG_M = imresize(IMG_M, [HH WW], 'nearest'); %% Make the three pyramids. LA = make_laplacian(IMG_A); LB = make_laplacian(IMG_B); GM = make_gaussian(IMG_M); %% Add the pyramids together. [LEVELS, DUMMY] = size(LA); for II=1:LEVELS, for CC=1:3, ONE = GM{II, CC} .* LA{II, CC}; TWO = (1 - GM{II, CC}) .* LB{II, CC}; FINAL{II, CC} = ONE + TWO; end end %% Reconstruct the image from the pyramids. IMG = reconstruct(FINAL); main.m function IMG = main(INA, INB, MASK, OUTPUT) clear all INPUTA = 'HinhAnh\phat.jpg'; INPUTB = 'HinhAnh\tao.jpg'; MASK = 'HinhAnh\mask.jpg'; OUTPUT = 'HinhAnh\output.jpg'; %% Build the image. IMG = engine(INPUTA, INPUTB, MASK); %% Save the image out to a file. for COLOR = 1:3, LOWER = min(min(IMG{COLOR})); if (LOWER < 0), IMG{COLOR} = IMG{COLOR} - LOWER; end UPPER = max(max(IMG{COLOR})); if (UPPER > 1), IMG{COLOR} = IMG{COLOR} / UPPER; end end IMG_OUT(:,:,1) = uint8(IMG{1} * 255); IMG_OUT(:,:,2) = uint8(IMG{2} * 255); IMG_OUT(:,:,3) = uint8(IMG{3} * 255); imwrite(IMG_OUT, OUTPUT, 'jpg'); %% Show result imshow(IMG_OUT); 3. Thực hiện Chuẩn bị ảnh nguồn : Đức Phật và Trái Táo Phat.jpg Tao.jpg Xây dựng ảnh Mask : chúng ta dùng công cụ ROIPOLY có sẵn trong MatLab 7.4 để xây dựng ảnh Mask ( ảnh Mask là ảnh mà vùng được chọn là các pixel trắng, toàn bộ vùng còn lại không được chọn là các pixel đen) >> I = imread(‘HinhAnh\phat.jpg’); >> r = roipoly(i); >> imwrite(r, ‘HìnhAnh\mask.jpg’); Dùng ROIPOLY để khoanh vùng được chọn : Ta được ảnh Mask như sau : Mask.jpg Chạy hàm main.m : đưa các ảnh nguồn (phat.jpg, tao.jpg, mask.jpg) vào hàm main và kết quả là ảnh output.jpg. Và ta thu được kết quả cuối cùng là ảnh của Đức Phật ngồi trong trái táo rất tự nhiên và rất “thật”, đường biên phân cách giữa các ảnh đã được làm mờ đến mức rất khó nhận ra được. Output.jpg V. TỔNG KẾT 1. Ưu điểm Tuy đề tài diễn giải còn sơ sài và cơ bản nhưng cũng đã đạt được một số kết quả nhất định: Đề tài đã cung cấp một số kiến thức về xử lý ảnh, cụ thể là kĩ thuật Multiresolution Splining, giúp người đọc hiểu rõ hơn về phương thức ghép hai hay nhiều bức ảnh mà không làm cho bức ảnh mới có cảm giác thô kệch và giả tạo mà làm cho nó trở nên trơn tru và “thật” hơn (rõ ràng đường biên phân cách giữa hai ảnh hoàn tòan “biến mất”). Giúp người đọc hình dung phần nào cơ bản về phương pháp, cách thức xử lý ảnh làm cho sản phẩm ảnh cuối cùng trở nên tốt hơn, từ đó ứng dụng có hiệu quả vào thực tế (những phần mềm chuyên xử lý ảnh hay lập trình chương trình xử lý ảnh), đây thật sự là điều rất cần thiết trong thời đại kỹ thuật số ngày nay luôn đòi hỏi những sản phẩm tốt nhất, tinh xảo nhất. 2. Khuyết điểm Vì đây là một đề tài còn khá mới mẻ, thời gian chuẩn bị và thực hiện còn hạn chế nên đề tài trình bày còn một vài điểm thiếu sót: Các ảnh mẫu ban đầu chưa thật sự tốt: ảnh mẫu phải là các ảnh có kích thước tương đương, vị trí ảnh khảm phải tính toán trước để việc khảm ảnh “khớp” hơn. Do đó, kết quả ảnh cuối cùng đạt được chưa thật sự cao. Do tài liệu tham khảo của nước ngoài và kiến thức về ngoại ngữ của chúng tôi còn hạn chế nên một số thuật ngữ liên quan được dịch chưa chính xác. Chỉ mới nêu được những kiến thức cơ bản và một số vấn đề vây quanh cần thiết để giải quyết vấn đề chứ chưa thực sự đào sâu và xây dựng, phát triển thành một phương pháp hoàn chỉnh. 3. Kết luận Trong thời đại bùng nổ thông tin như hiện nay, những cuộc cách mạng nhằm cải tiến kĩ thuật trở nên cần thiết hơn bao giờ hết, những cải tiến máy tính trong đó có những kĩ thuật phân tích và xử lý (mà xử lý ảnh là một mắt xích) đã có những bước tiến thần tốc nhằm đáp ứng nhu cầu của thời đại. Đề tài chúng tôi trình bày chỉ là một trong rất nhiều phương pháp xử lý ảnh nhưng cũng rất hữu ích và cần thiết. Vì đề tài còn rất nhiều hạn chế nên chúng tôi rất mong sự tận tình chỉ dẫn của thầy cô cũng như sự đóng góp của các bạn để đề tài của chúng tôi trở nên đầy đủ hơn, hoàn chỉnh hơn và thật sự hữu ích. Sau cùng, chúng tôi xin gửi lời cảm ơn đến thầy đã tạo điều kiện tốt nhất giúp chúng tôi hoàn thành đề tài một cách tốt đẹp. VI. TÀI LIỆU THAM KHẢO A Multiresolution Spline With Application to Image Mosaics - PETER J. BURT and EDWARD H. ADELSON The Laplacian Pyramid as a Compact Image Code - PETER J. BURT, MEMBER, IEEE, AND EDWARD H. ADELSON Multiresolution Splining - Ing. Ibrahim ABU KTEISH Image pyramids and their applications - Bill Freeman and Fredo Durand Source code - Alan Daniels Các website tham khảo: Computational Photography Link: The Poisson Equation in Image & Shape Processing Link: Image Pyramids Link: Gaussian and Laplacian Pyramid Representation in images Link: Image Processing Toolbox - Roipoly Link: Foundations of Computer Vision Link: Representation in Images

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

  • docBaoCao_BHXLA.doc
  • pptBaoCao_BHXLA.ppt
  • rarSource Code.rar
Tài liệu liên quan