Kỹ thuật đồ họa và thiết kế: Trong lĩnh vực kiến trúc, thiết kế nội thất và kỹ thuật đồ họa, hình ảnh panorama có thể được sử dụng để tạo ra các mô phỏng và hình ảnh 3D của không gian..
KHẢO SÁT HIỆN TRẠNG
Tính cấp thiết của đề tài
Ghép ảnh panorama là một công cụ thiết yếu trong nhiếp ảnh và đồ họa, cho phép kết hợp nhiều bức ảnh thành một hình ảnh rộng lớn, mô tả toàn cảnh của một cảnh quan hoặc không gian Công nghệ này có nhiều ứng dụng thực tiễn quan trọng.
Du lịch ảo đang trở thành xu hướng mới, với hình ảnh panorama giúp người dùng trải nghiệm cảnh quan và địa điểm du lịch một cách toàn diện và sống động Điều này không chỉ mang lại cảm giác chân thực mà còn mở ra cơ hội khám phá những địa điểm mới mà không cần phải di chuyển.
Việc tạo ra hình ảnh panorama cho căn nhà hoặc không gian bất động sản là rất quan trọng, giúp người mua hoặc thuê nhà có cái nhìn tổng quát và chi tiết về không gian mà họ đang quan tâm.
Quảng cáo và marketing: Hình ảnh panorama mang đến một cách tiếp cận hấp dẫn và thực tế để quảng bá sản phẩm, dịch vụ và địa điểm du lịch.
Kỹ thuật đồ họa và thiết kế đóng vai trò quan trọng trong kiến trúc và thiết kế nội thất, nơi hình ảnh panorama được ứng dụng để tạo ra các mô phỏng và hình ảnh 3D sống động của không gian.
Việc nghiên cứu và phát triển các công nghệ tạo ra hình ảnh panorama chất lượng cao là rất quan trọng để đáp ứng nhu cầu ngày càng tăng của người dùng và ứng dụng trong nhiều lĩnh vực khác nhau.
Mục tiêu của đề tài
Mục tiêu của nghiên cứu ghép ảnh panorama là phát triển các phương pháp và công nghệ nhằm tạo ra hình ảnh panorama chất lượng cao bằng cách ghép nhiều bức ảnh lại với nhau Các mục tiêu cụ thể bao gồm cải thiện độ chính xác trong việc nối ghép, tối ưu hóa quy trình xử lý hình ảnh và nâng cao trải nghiệm người dùng khi tạo ra những bức ảnh panorama ấn tượng.
1 Phân tích và tự động xác định vị trí và góc quay của các ảnh để tối ưu quá trình ghép ảnh
2 Phát triển các thuật toán và phương pháp để giảm thiểu hiện tượng nhiễu và sai lệch trong quá trình ghép ảnh
3 Tạo ra giao diện người dùng thân thiện và dễ sử dụng để cho phép người dùng tạo ra hình ảnh panorama một cách dễ dàng và nhanh chóng
4 Tối ưu hóa quá trình ghép ảnh để giảm thời gian xử lý và tăng tốc độ hiệu quả của quá trình ghép ảnh
5 Nghiên cứu và áp dụng các công nghệ mới như học máy và trí tuệ nhân tạo để cải thiện chất lượng và hiệu suất của quá trình ghép ảnh panorama
Mục tiêu của nghiên cứu là phát triển các phương pháp và công nghệ mới nhằm tạo ra hình ảnh panorama chất lượng cao, đồng thời tối ưu hóa quy trình ghép ảnh để đáp ứng hiệu quả nhu cầu của người dùng.
Nội dung nghiên cứu
Nội dung nghiên cứu về ghép ảnh panorama có thể bao gồm:
1 Phân tích và xử lý ảnh: Nghiên cứu về các phương pháp phân tích và xử lý ảnh để xác định vị trí, góc quay và thu thập thông tin từ các ảnh để chuẩn bị cho quá trình ghép ảnh panorama
2 Thuật toán ghép ảnh: Phát triển các thuật toán và phương pháp để ghép các ảnh lại với nhau một cách mượt mà và chính xác, đảm bảo sự liên kết hợp lý giữa các ảnh để tạo ra hình ảnh panorama
3 Xử lý nhiễu và sai lệch: Nghiên cứu về cách giảm thiểu nhiễu và sai lệch trong quá trình ghép ảnh, bao gồm cả nhiễu do ánh sáng, nhiễu do chuyển động và sai lệch hình học
4 Tối ưu hóa hiệu suất: Nghiên cứu về cách tối ưu hóa quá trình ghép ảnh để giảm thời gian xử lý và tăng tốc độ hiệu quả của quá trình ghép ảnh
5 Giao diện người dùng: Nghiên cứu về cách thiết kế giao diện người dùng thân thiện và dễ sử dụng để cho phép người dùng tạo ra hình ảnh panorama một cách dễ dàng và nhanh chóng.
GIỚI THIỆU BÀI TOÁN
Tổng quan về xử lí ảnh
Xử lý ảnh là quá trình áp dụng các kỹ thuật nhằm cải thiện hoặc thay đổi hình ảnh số Mục tiêu chính của xử lý ảnh bao gồm nâng cao chất lượng hình ảnh, trích xuất thông tin giá trị, nhận diện đối tượng và tạo ra hình ảnh mới từ dữ liệu gốc.
Các khái niệm chính trong xử lý ảnh bao gồm:
1 Tiền xử lý: Đây là quá trình chuẩn bị dữ liệu ảnh trước khi áp dụng các phương pháp xử lý chính Tiền xử lý có thể bao gồm việc làm sạch dữ liệu, loại bỏ nhiễu, cân bằng độ sáng, cân bằng màu sắc, và các bước chuẩn bị khác để chuẩn bị dữ liệu cho quá trình xử lý chính
2 Trích xuất đặc trưng: Quá trình trích xuất các đặc trưng quan trọng từ hình ảnh, chẳng hạn như cạnh, điểm đặc trưng, texture, màu sắc, hình dạng, hoặc bất kỳ thông tin nào khác có thể hữu ích cho mục tiêu cụ thể
3 Biến đổi hình ảnh: Sử dụng các phép biến đổi hình ảnh như phép xoay, co giãn, phóng to, thu nhỏ, đổi độ sáng, đổi màu sắc, lọc ảnh, và các phương pháp khác để thay đổi hình ảnh theo ý muốn
4 Nhận diện và phân loại: Quá trình nhận diện đối tượng, phân loại, và nhận biết thông tin từ hình ảnh, chẳng hạn như khuôn mặt, chữ viết, đối tượng trong hình ảnh y tế, xe cộ, vật thể, và các loại đối tượng khác
5 Phục hồi thông tin: Các phương pháp để khôi phục thông tin bị mất, chẳng hạn như khôi phục ảnh bị mờ, giảm nhiễu, hoặc tái tạo ảnh từ dữ liệu hỏng hóc
Xử lý ảnh là một công nghệ quan trọng với nhiều ứng dụng đa dạng trong các lĩnh vực như y tế, công nghệ thông tin, an ninh, công nghiệp, điện ảnh và nhiều lĩnh vực khác.
2.1.2 Sơ lược lịch sử phát triển của xử lí ảnh
Vào đầu những năm 1920, ngành báo chí đã ứng dụng công nghệ xử lý ảnh thông qua dịch vụ truyền ảnh Bartlane, kết nối London và New York bằng cáp ngầm Ảnh được mã hóa để truyền qua hệ thống cáp dưới đại dương và sau đó được khôi phục và in ra giấy bằng máy in điện báo tại điểm nhận.
- Giữa đến cuối những năm 1920, hệ thống truyền ảnh được cải tiến để có thể truyền được các bức ảnh với chất lượng cao hơn
Vào những năm 1960, sự bùng nổ công nghệ máy tính và xu hướng nghiên cứu vũ trụ đã thúc đẩy mạnh mẽ ngành xử lý ảnh Các thuật toán được phát triển nhằm tăng cường chất lượng ảnh đã được ứng dụng để cải thiện hình ảnh chụp từ vệ tinh.
Vào những năm 1970, ứng dụng xử lý ảnh đã được áp dụng trong lĩnh vực kinh tế, đặc biệt với sự ra đời của máy chụp cắt lớp CAT (Computerised Axial Tomography) Phát minh này của hai nhà khoa học Godfrey N Hounsfield và Allan M Cormack đã mang lại cho họ giải Nobel Y học.
Kể từ những năm 1980, lĩnh vực xử lý ảnh đã có sự phát triển nhanh chóng và hiện nay được ứng dụng rộng rãi trong nhiều lĩnh vực, từ khoa học đến đời sống xã hội.
2.1.3 Các bước chính trong hệ thống xử lý ảnh
Hình 2.1 Sơ đồ các bước chính trong hệ thống xử lý ảnh 2.1.4 Mục đích, yêu cầu, phạm vi của báo cáo
- Là giúp mọi người có bức ảnh toàn cảnh, chụp với góc rộng hơn, ghép những
- Xây dựng chương trình có giao diện dễ dàng thao tác
- Cài đặt thuật toán xử lý cho mỗi thao tác
- Nghiên cứu thuật toán ghép các ảnh nhỏ thành 1 ảnh lớn
Khái niệm ảnh Panorama
Ảnh panorama là hình ảnh rộng, cho phép người xem bao quát toàn bộ cảnh quan một cách toàn diện hơn so với ảnh thông thường Đặc điểm nổi bật của ảnh panorama là khả năng mở rộng góc nhìn, giúp người xem trải nghiệm cảnh quan mà không cần di chuyển Để tạo ra ảnh panorama, người ta thường kết hợp nhiều hình ảnh đơn lẻ, có thể thực hiện bằng cách chụp nhiều ảnh và ghép lại qua phần mềm hoặc sử dụng thiết bị chụp ảnh panorama với tính năng tự động ghép ảnh.
Ảnh panorama là một công cụ tuyệt vời để ghi lại vẻ đẹp của thiên nhiên, như núi non, biển cả, và các thành phố lớn Chúng không chỉ được sử dụng trong nghệ thuật nhiếp ảnh mà còn trong quảng cáo, du lịch và nhiều lĩnh vực khác, nơi cần thiết phải hiển thị một khung cảnh rộng lớn.
Khái niệm ảnh Panorama (hình ảnh toàn cảnh) là loại hình ảnh được tạo ra bằng cách ghép nhiều hình ảnh lại với nhau, mang đến một bức ảnh rộng hơn và có góc nhìn bao quát hơn so với ảnh đơn lẻ Mục tiêu là tạo ra một hình ảnh liền mạch, mô phỏng góc nhìn rộng mà con người có thể cảm nhận trong thực tế.
Dưới đây là một số khái niệm liên quan đến ảnh Panorama:
1 Hình ảnh Panorama 360 độ: Đây là loại hình ảnh Panorama mô tả một cảnh quan hoặc một không gian với góc nhìn 360 độ, cho phép người xem nhìn thấy xung quanh mọi góc độ
2 Kỹ thuật ghép ảnh: Để tạo ra một hình ảnh Panorama, cần sử dụng kỹ thuật ghép ảnh để kết hợp các hình ảnh riêng lẻ lại với nhau Các phần mềm và công cụ xử lý ảnh có thể được sử dụng để tự động hoặc thủ công ghép nối các hình ảnh
3 Hình ảnh Panorama dọc: Ngoài việc tạo ra các hình ảnh Panorama ngang, cũng có thể tạo ra các hình ảnh Panorama dọc, mô tả một cảnh quan hoặc không gian theo chiều dọc
4 Ứng dụng: Hình ảnh Panorama được sử dụng rộng rãi trong du lịch, bất động sản, kiến trúc, và nhiều lĩnh vực khác nhau để hiển thị cảnh quan hoặc không gian một cách toàn diện và sống động
5 Công nghệ Panorama ảo: Với sự phát triển của công nghệ, cũng có sự xuất hiện của hình ảnh Panorama ảo, nơi người xem có thể tham gia vào hình ảnh và thậm chí điều chỉnh góc nhìn của họ
Hình ảnh Panorama là một công cụ mạnh mẽ để tái tạo và chia sẻ trải nghiệm thực tế trong môi trường số.
Tổng quan về phương pháp ghép ảnh Panorama từ các ảnh nhỏ
Chế độ chụp ảnh Panorama cho phép người dùng ghép nhiều bức ảnh lại với nhau để tạo thành một bức ảnh rộng góc duy nhất Tính năng này có mặt trong hầu hết các ứng dụng camera, giúp bạn dễ dàng thực hiện bằng cách chỉ cần ấn chụp và di chuyển camera để thu được toàn bộ khung cảnh mong muốn.
Góc chụp của bức ảnh panorama rất quan trọng, yêu cầu tối thiểu 110 độ để đạt tầm nhìn bằng hoặc lớn hơn mắt người Tỉ lệ ảnh panorama thường là 2:1, nhưng cũng có thể là 4:1 hoặc 10:1 với góc chụp lên đến 360 độ Trong nhiếp ảnh panorama, tỉ lệ khung hình và độ bao trùm trường ảnh được xem là hai thành phần quan trọng nhất.
Chụp ảnh Panorama đã trở nên đơn giản hơn bao giờ hết nhờ vào các phần mềm tích hợp sẵn như AutoPano, Panorama Make, và Photoshop Hầu hết các thiết bị như máy ảnh kỹ thuật số, DSLR, điện thoại thông minh, và máy ảnh du lịch đều hỗ trợ tính năng này, giúp người dùng dễ dàng tạo ra những bức ảnh toàn cảnh ấn tượng.
Chế độ chụp ảnh Panorama, có mặt trên nhiều máy ảnh kỹ thuật số và điện thoại di động hiện đại, giúp người dùng dễ dàng tạo ra những bức ảnh Panorama ấn tượng Dưới đây là hướng dẫn sử dụng chế độ chụp ảnh Panorama trên một số thiết bị phổ biến.
- Trên các điện thoại thông minh, tính năng Panorama thường được tìm thấy trong ứng dụng máy ảnh
Để chụp ảnh Panorama, bạn cần kích hoạt chế độ Panorama trong ứng dụng máy ảnh và di chuyển điện thoại theo hướng dẫn trên màn hình để ghi lại từng khung hình.
- Khi bạn hoàn thành việc di chuyển, ứng dụng máy ảnh sẽ tự động ghép nối các khung hình lại với nhau để tạo ra một hình ảnh Panorama
2 Máy ảnh kỹ thuật số:
- Trên các máy ảnh kỹ thuật số, chế độ chụp ảnh Panorama thường được tìm thấy trong các cài đặt chụp hoặc trong menu chụp đặc biệt
- Để chụp ảnh Panorama, bạn thường cần điều chỉnh các cài đặt như hướng di chuyển, tốc độ và độ rộng của chụp
- Sau khi điều chỉnh các cài đặt, bạn chỉ cần nhấn nút chụp và di chuyển máy ảnh theo hướng chỉ dẫn trên màn hình hoặc qua viewfinder
Khi chụp ảnh Panorama, việc giữ máy ảnh hoặc điện thoại ở một vị trí ổn định và di chuyển theo một hướng nhất định là rất quan trọng để tránh méo mó hình ảnh.
- Thường thì các hướng di chuyển đều được hướng dẫn trên màn hình hoặc qua viewfinder của máy ảnh
Khi thực hiện chụp ảnh Panorama, cần lưu ý rằng không nên có vật cản nào trong khung hình Nếu có vật cản, hãy di chuyển máy ảnh một cách nhẹ nhàng và liên tục để đảm bảo hình ảnh cuối cùng không bị gián đoạn.
XÂY DỰNG THUẬT TOÁN TẠO ẢNH PANORAMA
Các thuật toán xử lý hình ảnh cổ điển
1, Xử lý ảnh hình thái học (Morphological Image Processing)
Xử lý ảnh hình thái học là một lĩnh vực quan trọng trong xử lý ảnh, tập trung vào việc biến đổi hình ảnh thông qua các phép biến đổi như co giãn, co lại, mở rộng và thu nhỏ Các kỹ thuật này giúp cải thiện và trích xuất thông tin từ hình ảnh, đóng vai trò thiết yếu trong nhiều ứng dụng thực tiễn Dưới đây là một số khái niệm và kỹ thuật phổ biến trong xử lý ảnh hình thái học.
1 Các phép biến đổi hình thái cơ bản:
- Co giãn (Erosion): Giảm kích thước của các vùng sáng trong hình ảnh bằng cách lấy giá trị nhỏ nhất trong các vùng lân cận của mỗi điểm ảnh
- Mở rộng (Dilation): Tăng kích thước của các vùng sáng trong hình ảnh bằng cách lấy giá trị lớn nhất trong các vùng lân cận của mỗi điểm ảnh
- Mở (Opening): Kết hợp phép co giãn và phép mở rộng để loại bỏ nhiễu và các chi tiết nhỏ không mong muốn trong hình ảnh
- Đóng (Closing): Kết hợp phép mở rộng và phép co giãn để đóng các khe và lấp đầy các lỗ trong vật thể trong hình ảnh
2 Biến đổi hình thái kết hợp:
Biến đổi top-hat là một kỹ thuật mạnh mẽ dùng để phát hiện các chi tiết nhỏ và cạnh nhỏ trong hình ảnh Phương pháp này hoạt động bằng cách lấy sự khác biệt giữa hình ảnh gốc và hình ảnh đã được mở rộng, giúp làm nổi bật các yếu tố quan trọng trong bức ảnh.
Biến đổi bottom-hat là một kỹ thuật được sử dụng để phát hiện các chi tiết nhỏ và cạnh nhỏ trong hình ảnh Phương pháp này hoạt động bằng cách tính toán sự khác biệt giữa hình ảnh gốc và hình ảnh đã được đóng, giúp làm nổi bật các đặc điểm quan trọng trong quá trình xử lý ảnh.
3 Áp dụng trong các ứng dụng cụ thể:
- Trích xuất biên: Sử dụng các phép biến đổi hình thái để phát hiện và trích xuất biên của các vật thể trong hình ảnh
- Loại bỏ nhiễu: Sử dụng các phép biến đổi hình thái để loại bỏ nhiễu và cải thiện chất lượng của hình ảnh
Xử lý ảnh hình thái học là một kỹ thuật quan trọng được áp dụng rộng rãi trong các lĩnh vực như y học, nhận diện biển báo giao thông, nhận diện vật thể, cũng như trong nhiều ứng dụng công nghiệp và nghiên cứu khác.
Xử lý ảnh hình thái (Morphological Image Processing) bao gồm các phép toán phi tuyến tính tác động đến hình dạng của ảnh nhị phân Thuật toán này giúp loại bỏ điểm nhiễu và làm mịn hình ảnh, cải thiện chất lượng và độ rõ nét của ảnh.
Xử lý hình thái học có thể áp dụng cho hình ảnh thang độ xám thông qua các thao tác phi tuyến tính dựa trên cấu trúc vị trí pixel Kỹ thuật này phân tích hình ảnh bằng cách sử dụng phần tử cấu trúc, một ma trận nhỏ chứa giá trị 0 và 1, được đặt ở các vị trí khác nhau và so sánh với các pixel lân cận.
Hai thao tác cơ bản của quá trình xử lý hình thái học là Dilation (phép giãn) và Erosion (phép co)
Phép giãn thêm pixel vào ranh giới của đối tượng trong một hình ảnh
Phép co loại bỏ các pixel khỏi ranh giới đối tượng
Số lượng pixel được xóa hoặc thêm vào hình ảnh gốc phụ thuộc vào kích thước của phần tử cấu trúc
Hình 3.1 Số lượng pixel trong hình ảnh
2 Xử lý hình ảnh Gaussian
Xử lý hình ảnh Gaussian là kỹ thuật làm mờ ảnh thông qua bộ lọc Gaussian, giúp giảm nhiễu và làm mềm bề mặt hình ảnh Phương pháp này tạo ra phiên bản mới của hình ảnh với độ mờ được điều chỉnh theo hàm Gaussian, mang lại chất lượng hình ảnh tốt hơn.
Dưới đây là một số đặc điểm chính của xử lý hình ảnh Gaussian:
1 Bộ lọc Gaussian: Trong xử lý hình ảnh Gaussian, một bộ lọc Gaussian được sử dụng để làm mờ hình ảnh Bộ lọc này áp dụng một bản sao của hàm Gaussian lên từng điểm ảnh của hình ảnh
2 Hàm Gaussian: Hàm Gaussian là một hàm mà giá trị tại mỗi điểm x, y được tính toán bằng cách sử dụng phương trình Gaussian Hàm này có dạng của một đỉnh đơn điểm và mở rộng đều xung quanh điểm đỉnh
3 Tham số của hàm Gaussian: Trong quá trình xử lý hình ảnh Gaussian, một số tham số quan trọng cần được xác định, bao gồm kích thước của cửa sổ lân cận và độ lớn của Gaussian (thường được đo bằng tham số sigma)
4 Tích chập: Xử lý hình ảnh Gaussian thực hiện tích chập giữa bộ lọc
Gaussian và từng cửa sổ lân cận của hình ảnh, để tạo ra một hình ảnh mới có độ mờ được điều chỉnh bởi hàm Gaussian
5 Ứng dụng: Xử lý hình ảnh Gaussian thường được sử dụng để làm mờ hình ảnh, giảm nhiễu và chuẩn bị dữ liệu cho các bước xử lý hình ảnh khác như phân loại, nhận diện đối tượng, hoặc trích xuất đặc trưng
Xử lý hình ảnh Gaussian là một kỹ thuật quan trọng trong lĩnh vực xử lý ảnh, với nhiều ứng dụng đa dạng trong y học, công nghệ thông tin và nhiều lĩnh vực khác.
Xử lý hình ảnh Gaussian là một kỹ thuật quan trọng trong lĩnh vực xử lý ảnh, được sử dụng để làm mờ hình ảnh thông qua bộ lọc Gaussian Bộ lọc này giảm độ tương phản và làm mềm các cạnh, giúp cải thiện chất lượng hình ảnh bằng cách giảm nhiễu và loại bỏ chi tiết không mong muốn Quá trình này thực hiện bằng cách sử dụng một cửa sổ trượt, thường là ma trận vuông với kích thước cố định như 3x3, 5x5 hoặc 7x7, để tính toán giá trị trung bình có trọng số của các điểm ảnh dựa trên hàm phân phối Gaussian Mặc dù bộ lọc Gaussian mang lại nhiều lợi ích, nhưng cũng có thể dẫn đến mất mát thông tin chi tiết quan trọng trong hình ảnh, do đó cần phải cân nhắc kỹ lưỡng khi áp dụng.
Kỹ thuật xử lý hình ảnh Gaussian thường sử dụng bộ lọc Gaussian để làm mờ hình ảnh Các bước cơ bản để thực hiện kỹ thuật này bao gồm: xác định kích thước bộ lọc, chọn độ lệch chuẩn phù hợp và áp dụng bộ lọc lên hình ảnh để đạt được hiệu ứng làm mờ mong muốn.
1 Chuẩn bị hình ảnh: Bước đầu tiên là chuẩn bị hình ảnh đầu vào mà bạn muốn xử lý
2 Chọn kích thước và độ lớn của bộ lọc Gaussian: Xác định kích thước
Phạm vi của cửa sổ lân cận và kích thước của bộ lọc Gaussian rất quan trọng Kích thước này thường được đo bằng tham số, đại diện cho độ mở rộng của hàm Gaussian.
Một số phương pháp tạo ảnh Panorama
Tạo ảnh Panorama là quá trình kết hợp nhiều bức ảnh thành một hình ảnh rộng lớn, thường để ghi lại cảnh quan hoặc không gian mà máy ảnh không thể chụp được trong một lần Dưới đây là một số phương pháp phổ biến để thực hiện việc này.
1 Phương pháp Dựa trên Phối hợp Hình ảnh (Image Stitching):
Feature detection is a crucial process in image analysis, employing algorithms such as SIFT (Scale-Invariant Feature Transform), SURF (Speeded Up Robust Features), and ORB (Oriented FAST and Rotated BRIEF) to identify distinctive points in images These techniques enhance the ability to recognize and match features across varying scales and orientations, making them essential for applications in computer vision and image processing.
- Khớp điểm chung (Feature Matching): Tìm các điểm đặc trưng tương ứng giữa các hình ảnh để xác định sự chồng chéo giữa chúng
Biến đổi hình ảnh có thể được ước lượng thông qua các phương pháp như RANSAC (Random Sample Consensus), giúp xác định các chuyển đổi tịnh tiến, quay và tỉ lệ giữa các hình ảnh dựa trên các điểm chung.
- Ghép hình ảnh (Image Blending): Kết hợp các hình ảnh đã được biến đổi thành một hình ảnh panorama hoàn chỉnh
2 Phương pháp Dựa trên Trình tự Hình ảnh (Image Sequence-Based):
- Sử dụng một máy ảnh để chụp một loạt các hình ảnh khi di chuyển từ trái sang phải hoặc từ trên xuống dưới
- Ghép các hình ảnh này lại với nhau bằng cách sử dụng các phương pháp như phương pháp tự động hoặc thủ công để tạo ra ảnh Panorama
3 Phương pháp Dựa trên Cảm biến (Sensor-Based):
- Sử dụng cảm biến hình ảnh xoay quay hoặc dịch chuyển để tự động chụp một loạt các hình ảnh và tạo ra ảnh panorama một cách tự động
4 Phương pháp Dựa trên Thực tế Ảo (Virtual Reality-Based):
- Sử dụng các kỹ thuật thực tế ảo để chụp hình ảnh từ nhiều góc độ và tạo ra ảnh panorama cho môi trường thực tế ảo
Mỗi phương pháp đều có những ưu điểm và hạn chế riêng, vì vậy việc lựa chọn phương pháp phù hợp sẽ phụ thuộc vào yêu cầu cụ thể của ứng dụng và tài nguyên hiện có.
+Kỹ thuật ghép ảnh Panorama có rất nhiều cách khác nhau, tuy nhiên chúng đều có những đặc trưng cơ bản:
1 Sử dụng các thuật toán chuyên biệt để detect tập các keypoint cho từng ảnh Những keypoint này là những điểm đặc biệt, mang tính chất đặc trưng và không bị ảnh hưởng (hoặc ảnh hưởng ít) bởi độ sáng, các phép xoay, scale (zoom)
2 Tìm cách so khớp (matching) 2 tập keypoint này, tìm ra các cặp keypoint tương ứng
3 Dựa vào các cặp keypoint đó để tìm ra cách biến đổi (transform) -> để ghép
2 ảnh lại với nhau Như vậy ra đã thu được ảnh panorama
+ Kĩ thuật ghép ảnh Panorama gồm các bước sau:
1 Trích chọn điểm đặc trưng giữa hai ảnh: Đây là quá trình trích xuất các điểm đặc trưng như điểm góc, điểm giao điểm, hoặc điểm kéo dài từ hai bức ảnh cần được ghép lại
2 Tìm những điểm tương đồng giữa hai bức ảnh: Sử dụng các thuật toán như SIFT hoặc SURF để so khớp các điểm đặc trưng giữa hai bức ảnh và xác định
3 Tính ma trận Homography: Dựa trên các điểm tương đồng, tính toán ma trận Homography (ma trận biến đổi hình học) để ánh xạ các điểm từ một bức ảnh sang bức ảnh khác
4 Chọn ma trận Homography tốt nhất bằng RANSAC: Sử dụng thuật toán RANSAC (RANdom SAmple Consensus) để chọn ra ma trận Homography tốt nhất từ một tập hợp các điểm tương đồng RANSAC giúp loại bỏ các điểm nhiễu và tìm ra một mô hình tốt nhất dựa trên các điểm được chọn một cách ngẫu nhiên
5 Ghép nối hai bức ảnh với nhau: Sử dụng ma trận Homography đã được tính toán để ghép nối hai bức ảnh lại với nhau Quá trình này thường bao gồm việc biến đổi một trong hai bức ảnh sao cho chúng phù hợp với nhau và sau đó ghép chúng lại với nhau để tạo thành một bức ảnh panorama liền mạch
Bạn có thể lặp lại quy trình này cho các bức ảnh tiếp theo nếu muốn ghép nhiều hơn hai bức ảnh để tạo thành một panorama lớn hơn.
Các phương pháp trích chọn đặc trưng từ các điểm nổi bật như là:
+Thuật toán tìm kiếm góc Harris
Thuật toán Harris Corner Detection là một phương pháp quan trọng trong xử lý ảnh và thị giác máy tính, được giới thiệu bởi Chris Harris và Mike Stephens vào năm 1988 Thuật toán này chuyên phát hiện các điểm góc trong hình ảnh, đóng vai trò thiết yếu trong nhiều ứng dụng như nhận diện đối tượng và theo dõi chuyển động Các bước chính của thuật toán bao gồm tính toán ma trận hình ảnh, xác định điểm góc và lọc các điểm không cần thiết để đảm bảo độ chính xác cao.
1 Tính toán độ gradient: Trước tiên, ảnh đầu vào được làm mịn (thông thường bằng cách sử dụng bộ lọc Gaussian) để giảm nhiễu Sau đó, đạo hàm theo các hướng x và y của mỗi điểm ảnh được tính toán bằng cách sử dụng một bộ lọc gradient (thông thường là Sobel hoặc Prewitt)
2 Tính toán ma trận tự lực lượng: Sử dụng các đạo hàm đã tính toán, ma trận tự lực lượng (structure tensor) được tính bằng cách tích chập của các đạo hàm của hình ảnh Ma trận này cung cấp thông tin về biến thiên địa phương của cường độ pixel
3 Tính toán ma trận Harris: Dựa trên ma trận tự lực lượng, ma trận Harris được tính toán bằng cách sử dụng một hàm số mục tiêu đơn giản Công thức Harris được sử dụng để xác định mức độ khác biệt giữa hai hướng chính của cường độ pixel, làm nổi bật các vùng có sự biến thiên lớn và có hình dạng góc
Xây dựng thuật toán thủ công
Hướng giải quyết cho bài toán này được thể hiện qua sơ đồ sau
Hình 3.11 Sơ đồ thuật toán
Dựng thuật toán panorama thủ công bao gồm nhiều bước phức tạp như chụp ảnh, tiền xử lý ảnh và ghép ảnh Dưới đây là phác thảo cơ bản các bước cần thực hiện để tạo ra một bức ảnh panorama chất lượng.
1 Chụp ảnh: Chụp một loạt các hình ảnh sẽ được sử dụng trong panorama Cố
- Cân bằng sáng: Đảm bảo các bức ảnh có cùng một cân bằng sáng
- Chỉnh sửa ảnh nền: Loại bỏ bất kỳ nhiễu nào trên ảnh, như các đối tượng không mong muốn hoặc các đối tượng chuyển động
- Chỉnh sửa màu sắc và độ tương phản: Điều chỉnh màu sắc và độ tương phản để các bức ảnh hợp nhất một cách mượt mà
3 Phát hiện điểm điểm đặc trưng (keypoints): Sử dụng một thuật toán như SIFT hoặc SURF để phát hiện các điểm đặc trưng trên các bức ảnh
4 Khớp các điểm điểm đặc trưng: Dùng một thuật toán như RANSAC để ghép các điểm đặc trưng giữa các bức ảnh
5 Tạo ma trận chuyển đổi (homography): Sử dụng các điểm đặc trưng đã khớp để tạo ra ma trận chuyển đổi cho mỗi cặp ảnh
6 Ghép ảnh: Áp dụng ma trận chuyển đổi để ghép các bức ảnh lại với nhau
7 Blend các ảnh: Sử dụng các thuật toán như feathering hoặc multi-band blending để làm cho các đường biên trở nên mượt mà và không nhìn thấy rõ ràng
8 Kiểm tra và điều chỉnh: Kiểm tra kỹ lưỡng panorama đã tạo và điều chỉnh nếu cần thiết
Quá trình này yêu cầu sự kiên nhẫn và kỹ thuật Sử dụng các công cụ phần mềm như OpenCV trong Python sẽ hỗ trợ bạn thực hiện nhiều bước trong quy trình này.
Để xử lý nhiều bức ảnh, trước tiên ta cần thực hiện bước Xác định các Keypoint (Keypoint Detection) nhằm tìm ra những điểm đặc trưng của bức ảnh Tiếp theo, bước So khớp các Keypoint (Keypoint Matching) sẽ giúp xác định các Keypoint tương ứng, từ đó tiến hành ghép nối chúng với nhau.
Bước quan trọng tiếp theo là Biến đổi ảnh (Image Transformation) bằng cách sử dụng
Ma trận đồng nhất (Estimate Homography Matrix) để match các tập Keypoint lại với nhau và biến đổi ảnh từ góc độ này sang góc độ khác
Xác định các Keypoint (Keypoints detection)
Keypoint Annotation, hay nhận diện điểm đặc trưng, là phương pháp gắn nhãn hình ảnh thông qua việc sử dụng nhiều điểm được đánh số (keypoint) và kết nối chúng bằng các đường thẳng Phương pháp này rất hiệu quả cho các bài toán theo dõi biến thể giữa các đối tượng có cấu trúc tương tự, chẳng hạn như hình dáng con người và các đặc điểm khuôn mặt.
Keypoint Annotation là quá trình xác định vị trí, hình dạng, hướng và chuyển động của các đối tượng trong hình ảnh hoặc video Nhiều keypoint có thể được kết nối để hình thành các cấu trúc lớn hơn, được gọi là keypoint skeleton.
Trong xử lý ảnh, keypoint (điểm chính) là các điểm đặc trưng quan trọng, được lựa chọn để đại diện cho những phần nổi bật của hình ảnh Các keypoint thường được xác định dựa trên các đặc tính độc đáo như điểm cực đại cục bộ của độ sáng, góc cạnh, hoặc các cấu trúc đặc biệt khác trên hình ảnh.
Các keypoint là yếu tố quan trọng trong việc tạo ra các đặc trưng mô tả hình ảnh, giúp nhận diện và so sánh hình ảnh hiệu quả Một số thuật toán phổ biến được sử dụng để phát hiện keypoint và tạo ra các đặc trưng mô tả bao gồm SIFT, SURF và ORB.
1 SIFT (Scale-Invariant Feature Transform): SIFT là một phương pháp phát hiện keypoint không bị ảnh hưởng bởi tỷ lệ và xoay của hình ảnh Nó tạo ra các vector đặc trưng mô tả mỗi keypoint dựa trên gradient của các pixel xung quanh
2 SURF (Speeded-Up Robust Features): SURF là một phương pháp tương tự như SIFT nhưng được thiết kế để tăng tốc độ tính toán bằng cách sử dụng các bộ lọc và phép biến đổi đơn giản hơn
3 ORB (Oriented FAST and Rotated BRIEF): ORB là một phương pháp kết hợp giữa phát hiện keypoint nhanh FAST và việc tạo ra đặc trưng mô tả nhanh BRIEF, thường được sử dụng trong các ứng dụng thời gian thực
Các keypoint và đặc trưng mô tả từ chúng đóng vai trò quan trọng trong việc nhận dạng đối tượng, đo lường sự tương đồng giữa các hình ảnh, và tái tạo hình ảnh từ nhiều góc độ, cùng với nhiều ứng dụng khác trong xử lý ảnh.
Mỗi dự án và nhiệm vụ trong Machine Learning đều có những yêu cầu riêng biệt và đa dạng Do đó, các bài toán này có thể cần những hình thức Keypoint Annotation khác nhau.
Gán nhãn keypoint khuôn mặt là quá trình xác định các đặc trưng quan trọng trên khuôn mặt, bao gồm các điểm như mắt, mũi và miệng Phương pháp này được ứng dụng phổ biến trong nhận dạng khuôn mặt, phân tích biểu cảm và phát hiện các đặc điểm khuôn mặt, giúp cải thiện độ chính xác trong các công nghệ liên quan.
Hình 3.12 Gán nhãn Keypoint khuôn mặt
Gán nhãn keypoint vị trí cơ thể (Body Pose Keypoint Annotation) là quá trình đánh dấu các điểm chính trên cơ thể con người nhằm xác định tư thế và vị trí Phương pháp này thường bao gồm các điểm mốc tại các khớp như vai, khuỷu tay, cổ tay, hông, đầu gối và mắt cá chân Body Pose Keypoint Annotation được ứng dụng rộng rãi trong việc ước lượng tư thế, nhận diện hành động và phân tích hoạt động con người trong các lĩnh vực như giao thông và thể thao.
Hình 3.13 Gán nhãn Keypoint cơ thể
CÀI ĐẶT VÀ THỬ NGHIỆM HỆ THỐNG
Các công cụ để cài đặt hệ thống
- Cài đặt vscode và cài đặt ngôn ngữ Python
- Cài đặt thư viện OpenCV, Tkinter, Imutils, Panorama
- Sử dụng thư viện Tkinter để tạo ra giao diện chương trình
4.1.1 Ngôn ngữ lập trình Python
Python là một ngôn ngữ lập trình thông dịch, hướng đối tượng và cấp cao, nổi bật với ngữ nghĩa động Được thiết kế bởi Guido van Rossum, Python mang triết lý thiết kế ưu tiên sự dễ đọc, đơn giản và rõ ràng trong mã nguồn.
Guido Van Rossum đã phát hành phiên bản đầu tiên của Python (0.9.0) vào tháng 2 năm 1991 tại alt.sources Phiên bản này bao gồm các tính năng quan trọng như xử lý ngoại lệ, hàm, và các kiểu dữ liệu cốt lõi như list, dict, str cùng nhiều loại khác Nó cũng hỗ trợ lập trình hướng đối tượng và có một hệ thống mô-đun đầy đủ.
Phiên bản Python 1.0 ra mắt vào tháng 1 năm 1994, giới thiệu các tính năng lập trình chức năng quan trọng như lambda, map, filter và reduce, mặc dù Guido Van Rossum, người sáng lập Python, không ưa thích những công cụ này.
Vào tháng 10 năm 2000, Python 2.0 được ra mắt sau sáu năm rưỡi phát triển, mang đến nhiều tính năng mới như danh sách toàn diện, bộ thu gom rác hoàn chỉnh và hỗ trợ unicode.
Bắt đầu từ năm 2000, các nhà phát triển cốt lõi đã hướng tới việc phát triển Python 3.0 với mục tiêu hợp lý hóa ngôn ngữ Họ mong muốn loại bỏ những cấu trúc và chức năng không cần thiết đã tích lũy trong gần 20 năm Như câu nói trong Zen of Python: “Nên có một - và tốt nhất là chỉ một - cách rõ ràng để làm điều đó”.
Những nỗ lực phát triển ngôn ngữ Python đã dẫn đến sự ra mắt của Python 3.0 vào tháng 12 năm 2008, phiên bản này không tương thích ngược với các phiên bản trước Tuy nhiên, việc phát hành này đã gây ra một số phức tạp cho người dùng.
Nhiều nhà phát triển chưa nhận thức được mức độ phổ biến của Python và sự phụ thuộc của mã Python vào các thư viện bên ngoài Mặc dù việc chuyển đổi các tập lệnh sang Python 3 tương đối đơn giản, nhưng việc nâng cấp các chương trình sử dụng thư viện của bên thứ ba gặp nhiều khó khăn hơn do tốc độ cập nhật không đồng đều.
Việc chuyển đổi từ Python 2 sang Python 3 có thể gây khó khăn và đau đớn cho một số người, nhưng đã mang lại sự cải thiện đáng kể cho ngôn ngữ lập trình Python 2 đã chính thức ngừng hoạt động vào năm 2020 Python có nhiều ưu điểm, nhưng cũng tồn tại một số nhược điểm cần lưu ý.
Dễ đọc và dễ học
Giảm chi phí bảo trì
Tránh tác hại từ lỗi phần mềm
Khả năng ứng dụng rộng rãi
Quản lý bộ nhớ Đơn giản và nhanh chóng
Mã hóa không đồng bộ
Tốc độ thực thi chậm Tiêu thụ bộ nhớ lớn Không thích hợp cho phát triển trò chơi và thiết bị di động
Hạn chế của Nhà phát triển Hạn chế của Nhà phát triển Hạn chế của Nhà phát triển Hạn chế thiết kế
Project OpenCV was initiated by Intel in 1999 by Gary Bradsky OpenCV stands for Open Source Computer Vision Library and is the leading open-source library for Computer Vision and Machine Learning It now includes GPU acceleration features for real-time processing tasks.
OpenCV là thư viện mã nguồn mở được phát hành theo giấy phép BSD, cho phép người dùng tự do học tập và sử dụng cho mục đích thương mại Thư viện này hỗ trợ nhiều ngôn ngữ lập trình như C++, C, Python và Java, và tương thích với các hệ điều hành như Windows, Linux, Mac OS, iOS và Android OpenCV được tối ưu hóa cho các ứng dụng thời gian thực, mang lại hiệu suất cao trong tính toán Khi được phát triển trên nền tảng C/C++ tối ưu, OpenCV có khả năng khai thác hiệu quả công nghệ xử lý đa lõi.
OpenCV có một cộng đồng người dùng lớn mạnh trên toàn cầu, đáp ứng nhu cầu ngày càng tăng về công nghệ computer vision trong các công ty Với hơn 47.000 thành viên, OpenCV được ứng dụng rộng rãi trong nhiều lĩnh vực khác nhau, từ nghệ thuật tương tác đến khai thác mỏ, bản đồ web và robotics cao cấp.
OpenCV được sử dụng cho đa dạng nhiều mục đích và ứng dụng khác nhau bao gồm:
Kiểm tra và giám sát tự động
Robot và xe hơi tự lái
Phân tích hình ảnh y học
Tìm kiếm và phục hồi hình ảnh/video
Phim – cấu trúc 3D từ chuyển động
Nghệ thuật sắp đặt tương tác
4.1.2.3 Tính năng và các module phổ biến của OpenCV
Theo tính năng và ứng dụng của OpenCV, có thể chia thư viện này thánh các nhóm tính năng và module tương ứng như sau:
Xử lý và hiển thị Hình ảnh/ Video/ I/O (core, imgproc, highgui)
Phát hiện các vật thể (objdetect, features2d, nonfree)
Geometry-based monocular hoặc stereo computer vision (calib3d, stitching, videostab)
Computational photography (photo, video, superres)
Machine learning & clustering (ml, flann)
OpenCV có cấu trúc module, nghĩa là gói bao gồm một số thư viện liên kết tĩnh (static libraries) hoặc thư viện liên kết động (shared libraries)
Imutils là thư viện mạnh mẽ cho xử lý ảnh, cung cấp nhiều chức năng cơ bản như dịch chuyển, xoay và thay đổi kích thước Thư viện này rất cần thiết cho việc giải quyết các vấn đề liên quan đến ảnh và thực hiện ghép ảnh Panorama.
Thao tác với các chức năng cơ bản này của Imutils chỉ cần những câu lệnh đơn giản:
- Dịch chuyển ảnh: ta sẽ thay đổi tọa độ (x, y) của ảnh gốc bằng một tọa độ bất kỳ cho ảnh mới mà cần thay đổi
Hình 4.1 Lệnh dịch chuyển ảnh
Xoay ảnh là quá trình cung cấp tọa độ (x, y) để thực hiện việc xoay Mặc dù các lệnh tính toán có thể phức tạp, nhưng thư viện imutils giúp đơn giản hóa quy trình này.
Để thay đổi kích thước hình ảnh mà không làm mất tỷ lệ khung hình, bạn cần lưu ý sử dụng chức năng thay đổi kích thước của imutils Chức năng này giúp duy trì tỷ lệ co và cho phép bạn chỉ định các đối số từ khóa về chiều rộng và chiều cao, giúp hình ảnh được điều chỉnh theo kích thước mong muốn.
Hình 4.3 Lệnh thay đổi kích cỡ 4.1.4 Gói thư viện Tkinter
Tkinter là thư viện GUI tiêu chuẩn cho Python, giúp người dùng dễ dàng và nhanh chóng tạo ra các ứng dụng giao diện đồ họa Với Tkinter, Python cung cấp các công cụ mạnh mẽ để phát triển ứng dụng GUI thông qua giao diện hướng đối tượng của bộ công cụ tk.
Sử dụng Tkinter để tạo một ứng dụng GUI khá đơn giản với một vài các thao tác:
- Tạo cửa sổ ứng dụng chính của GUI
- Thêm một vài các widgets vào ứng dụng GUI
- Tạo các sự kiện chính để thực hiện thao tác với từng sự kiện do người dùng kích hoạt
Cài đặt và thử nghiệm
Đoạn mã dưới đây định nghĩa một lớp `Panaroma` nhằm thực hiện việc ghép ảnh panorama từ một chuỗi các bức ảnh Lớp này bao gồm các phương thức khác nhau, trong đó phương thức `image_stitch` nhận vào các tham số như danh sách ảnh, tỷ lệ lowe, ngưỡng tối đa và trạng thái khớp.
#phát hiện các tính năng và điểm chính từ SIFT
(KeypointsA, features_of_A) = self.Detect_Feature_And_KeyPoints(imageA)
(KeypointsB, features_of_B) = self.Detect_Feature_And_KeyPoints(imageB)
#nhận được các điểm phù hợp hợp lệ
KeypointsB,features_of_A, features_of_B, lowe_ratio, max_Threshold) if Values is None: return None
In the context of image processing, the alignment of images can be achieved through homography calculations By utilizing matches and homography values, the function retrieves a warped perspective of the images The resulting image is then populated with the content of the second image, ensuring a seamless blend with the first image's dimensions.
# kiểm tra xem các điểm trùng khớp có nên được hiển thị hay không if match_status: vis = self.draw_Matches(imageA, imageB, KeypointsA,
The function `getwarp_perspective` combines two images, `imageA` and `imageB`, using a specified homography matrix, producing a result image that extends the width of both input images The `Detect_Feature_And_KeyPoints` function converts the input image to grayscale, which is essential for feature detection and keypoint extraction.
# phát hiện và trích xuất các tính năng từ hình ảnh descriptors = cv2.xfeatures2d.SIFT_create()
(Keypoints, features) = descriptors.detectAndCompute(image, None)
Keypoints = np.float32([i.pt for i in Keypoints]) return (Keypoints, features) def get_Allpossible_Match(self,featuresA,featuresB):
# compute the all matches using euclidean distance and opencv provide
#DescriptorMatcher_create() function for that match_instance = cv2.DescriptorMatcher_create("BruteForce")
All_Matches = match_instance.knnMatch(featuresA, featuresB, 2) return All_Matches def All_validmatches(self,AllMatches,lowe_ratio):
To obtain all valid points based on the Lowe's ratio, we initialize an empty list called `valid_matches` We iterate through all matches and check if each match has two elements and if the distance of the first element is less than the second element's distance multiplied by the Lowe's ratio If these conditions are met, we append the indices of the valid matches to our list Finally, we return the list of valid matches Additionally, we define a function to compute the homography between two sets of points, `pointsA` and `pointsB`, with a specified maximum threshold.
#tính toán đồng nhất bằng cách sử dụng các điểm trong cả hai hình ảnh
(H, status) = cv2.findHomography(pointsA, pointsB, cv2.RANSAC, max_Threshold) return (H,status) def matchKeypoints(self, KeypointsA, KeypointsB, featuresA, featuresB,lowe_ratio, max_Threshold):
AllMatches = self.get_Allpossible_Match(featuresA,featuresB); valid_matches = self.All_validmatches(AllMatches,lowe_ratio) if len(valid_matches) > 4:
# xây dựng hai tập hợp điểm pointsA = np.float32([KeypointsA[i] for (_,i) in valid_matches]) pointsB = np.float32([KeypointsB[i] for (i,_) in valid_matches])
(Homograpgy, status) = self.Compute_Homography(pointsA, pointsB, max_Threshold) return (valid_matches, Homograpgy, status) else: return None def get_image_dimension(self,image):
(h,w) = image.shape[:2] return (h,w) def get_points(self,imageA,imageB):
(hA, wA) = self.get_image_dimension(imageA)
To create a visual representation of two images side by side, the dimensions of both images are obtained, and a blank canvas is initialized The first image is placed on the left, while the second image is positioned to the right Additionally, the function `draw_Matches` is designed to display keypoints and matches between the two images, enhancing the visual comparison This approach effectively combines image processing and visualization techniques for better analysis.
(hA,wA) = self.get_image_dimension(imageA) vis = self.get_points(imageA,imageB)
The code iterates through the matched keypoints, checking the status of each match For matches that are valid (status equal to 1), it retrieves the coordinates of the keypoints from both images It then draws a line between the matched points on a visual representation, using a green color for the lines Finally, the function returns the visual output with the drawn connections.
`image_stitch`: Phương thức này thực hiện việc ghép ảnh bằng cách sử dụng các tính năng và điểm chính từ thuật toán SIFT (Scale-Invariant Feature
Hàm Transform nhận đầu vào là danh sách ảnh cần ghép và các tham số như `lowe_ratio` và `max_Threshold` để điều chỉnh quá trình tìm điểm trùng khớp Kết quả trả về có thể là hình ảnh ghép hoặc cả hai hình ảnh ban đầu cùng với các điểm trùng khớp nếu `match_status` được đặt thành `True`.
Phương thức `getwarp_perspective` cho phép chuyển đổi hình ảnh sang góc nhìn mới thông qua phép biến đổi đồng nhất Nó nhận đầu vào là hai hình ảnh cùng với ma trận biến đổi đồng nhất và trả về hình ảnh đã được chuyển đổi.
Phương thức Detect_Feature_And_KeyPoints sử dụng thuật toán SIFT để phát hiện các tính năng và điểm chính từ hình ảnh đầu vào, cung cấp các điểm chính cùng với các đặc trưng tương ứng.
Phương thức `get_Allpossible_Match` tính toán tất cả các điểm trùng khớp giữa hai tập hợp điểm đặc trưng bằng cách sử dụng khoảng cách Euclide và một máy phù hợp từ OpenCV.
`All_validmatches`: Phương thức này lọc ra các điểm trùng khớp hợp lệ dựa trên ngưỡng lowe_ratio
`Compute_Homography`: Phương thức này tính toán ma trận biến đổi đồng nhất giữa hai tập hợp điểm trùng khớp sử dụng phương pháp RANSAC
Phương thức `matchKeypoints` kết hợp các phương thức trước đó để xác định các điểm trùng khớp và tính toán ma trận biến đổi đồng nhất Nếu số lượng điểm trùng khớp hợp lệ đủ, phương thức sẽ trả về các điểm trùng khớp cùng với ma trận biến đổi đồng nhất; nếu không, kết quả trả về sẽ là `None`.
`get_image_dimension`: Phương thức này trả về kích thước của một hình ảnh dưới dạng tuple (chiều cao, chiều rộng)
`get_points`: Phương thức này kết hợp hai hình ảnh thành một hình ảnh lớn hơn để hiển thị cả hai hình ảnh ban đầu
`draw_Matches`: Phương thức này vẽ các điểm trùng khớp giữa hai hình ảnh lên một hình ảnh kết quả
The following code implements the SIFT (Scale-Invariant Feature Transform) algorithm to detect and visualize key points in an image First, the image is read using `cv2.imread('anh1.jpg')`, and displayed with `cv2.imshow("Input image", img)` It is then converted to grayscale using `cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)` The SIFT feature detector is initialized with `sift = cv2.xfeatures2d.SIFT_create()`, and key points along with their descriptors are computed using `kp, sift_vector = sift.detectAndCompute(gray, None)` The number of detected key points is printed with `print("so keypoint", len(kp))` The key points are drawn on the grayscale image using `img1 = cv2.drawKeypoints(gray, kp, img)`, and the resulting image is saved as 'sift_keypoints.jpg' with `cv2.imwrite('sift_keypoints.jpg', img1)` Finally, the image with SIFT key points is displayed using `cv2.imshow("SIFT keypoints", img1)`.
#surf = cv2.xfeatures2d_SURF.create(hessianThreshold=minHessian)
#surf_kp, surf_vector = surf.detectAndCompute(gray,None)
#img2=cv2.drawKeypoints(gray,surf_kp,img)
#cv2.imshow("SURF keypoints", img2) cv2.waitKey(0) cv2.destroyAllWindows()
`img = cv2.imread('anh1.jpg')`: Đọc hình ảnh từ tệp 'anh1.jpg' và lưu vào biến `img`
`cv2.imshow("Input image", img)`: Hiển thị hình ảnh gốc trong một cửa sổ có tiêu đề là "Input image"
`gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)`: Chuyển đổi hình ảnh gốc sang ảnh grayscale để thuận tiện cho việc xử lý
`sift = cv2.xfeatures2d.SIFT_create()`: Tạo một đối tượng SIFT để sử dụng trong việc phát hiện các điểm chính
Phương thức `detectAndCompute()` của đối tượng SIFT được sử dụng để phát hiện các điểm chính trên ảnh grayscale và tính toán vector đặc trưng tương ứng Kết quả trả về bao gồm danh sách các điểm chính trong biến `kp` và vector đặc trưng cho mỗi điểm chính trong biến `sift_vector`.
`print("so keypoint", len(kp))`: In ra số lượng điểm chính được phát hiện trong hình ảnh
`img1 = cv2.drawKeypoints(gray, kp, img)`: Vẽ các điểm chính được phát hiện lên hình ảnh grayscale gốc và lưu kết quả vào biến `img1`
`cv2.imwrite('sift_keypoints.jpg', img1)`: Lưu hình ảnh có các điểm chính được vẽ lên vào tệp 'sift_keypoints.jpg'
`cv2.imshow("SIFT keypoints", img1)`: Hiển thị hình ảnh với các điểm chính được vẽ lên trong một cửa sổ mới có tiêu đề là "SIFT keypoints"
`cv2.waitKey(0)`: Đợi cho đến khi một phím bất kỳ được nhấn
`cv2.destroyAllWindows()`: Đóng tất cả các cửa sổ hiển thị
Xây dựng một ứng dụng GUI sử dụng thư viện Tkinter trong Python để ghép các ảnh nhỏ thành một bức ảnh panorama lớn Đoạn code này cho phép người dùng dễ dàng tạo ra những bức ảnh ghép ấn tượng từ nhiều hình ảnh khác nhau.
Import thư viện: from tkinter import * import tkinter.filedialog as filedialog from panorama import Panaroma import imutils import cv2
‘Tkinter’ được sử dụng để tạo giao diện người dùng
‘filedialog’ được sử dụng để mở hộp thoại chọn tệp
‘Panaroma’ là một lớp trong module panorama được import để sử dụng các phương thức để ghép ảnh
‘imutils’ và ‘cv2’ là các thư viện được sử dụng cho xử lý ảnh và thư viện OpenCV
Tạo cửa sổ chính và thiết lập các thuộc tính: root=Tk() root.title("Ghép ảnh panorama") root.resizable(heightse,widthse) root.minsize(height 0,width@0)
Tạo một cửa sổ tkinter mới với tiêu đề "Ghép ảnh panorama"
Set a fixed window size and a minimum size Define the input function to allow users to select image files via a file dialog, updating the input entry field with the selected paths Implement the 'giai' function to read the selected image files, resizing each image to specified dimensions using the imutils library Finally, check if the number of images is two to proceed with panorama creation.
(result, matched_points) = panaroma.image_stitch([images[0], images[1]], match_status=True) else:
(result, matched_points) = panaroma.image_stitch([images[no_of_images - 2], images[no_of_images - 1]], match_status=True) for i in range(no_of_images - 2):
(result, matched_points) = panaroma.image_stitch([images[no_of_images - i - 3], result], match_status=True) for i in range(no_of_images): cv2.imshow("Image {k}".format(k=i + 1), images[i])
‘input’: Mở hộp thoại chọn tệp và cập nhật đường dẫn vào input_entry
‘giai’: Đọc các ảnh từ đường dẫn đã chọn, thực hiện ghép ảnh và hiển thị kết quả