Có gì mới?
Diễn đàn ứng dụng xử lý ảnh công nghiệp trong sản xuất

Đây là một tin nhắn khách mời. Đăng ký một tài khoản miễn phí ngay hôm nay để trở thành một thành viên! Sau khi đăng nhập, bạn sẽ có thể tham gia trang web này bằng cách thêm các chủ đề và bài đăng của riêng bạn, cũng như kết nối với các thành viên khác thông qua hộp thư đến riêng của bạn!

C/C++ Căn chỉnh hình ảnh dựa trên đặc trưng ảnh bằng OpenCV

Ngôn ngữ C/C++

hieule

Thành viên BQT
CTO
Admin
Dev Leader
Machine Vision Expert
Green Industry
Tham gia
21/10/2023
Bài viết
24
Điểm
1,039
Nơi ở
Việt Nam
Trong bài đăng này, chúng ta sẽ tìm hiểu cách thực hiện căn chỉnh hình ảnh dựa trên tính năng bằng OpenCV. Chúng tôi sẽ chia sẻ mã bằng cả C++.

Tôi sẽ trình bày các bước bằng một ví dụ trong đó chúng tôi sẽ căn chỉnh ảnh của biểu mẫu được chụp bằng điện thoại. Kỹ thuật chúng ta sẽ sử dụng thường được gọi là căn chỉnh hình ảnh “dựa trên điểm đặc trưng” vì trong kỹ thuật này, một tập hợp đặc điểm được phát hiện trong một hình ảnh và khớp với các đặc điểm trong hình ảnh kia. Sau đó, một phép chuyển đổi được tính toán dựa trên các đặc điểm phù hợp này để làm cong hình ảnh này sang hình ảnh khác.
Trước đây, chúng tôi đã căn chỉnh hình ảnh dựa trên vùng được bao phủ trong (căn chỉnh hình ảnh ECC) . Nếu bạn chưa tìm hieeiur về ECC, tôi khuyên bạn nên tìm hiểu trước vì nó đề cập đến một ứng dụng rất hay liên quan đến lịch sử nhiếp ảnh.

Căn chỉnh (alignment) hình ảnh ( hoặc đăng ký - registration) hình ảnh là gì?​

Trong nhiều ứng dụng, chúng ta có hai hình ảnh của cùng một cảnh hoặc cùng một tài liệu nhưng chúng không được căn chỉnh. Nói cách khác, nếu bạn chọn một đặc điểm (chẳng hạn như một góc) trên một hình ảnh, tọa độ của cùng một góc đó trong hình ảnh kia sẽ rất khác nhau.

Căn chỉnh ảnh (còn gọi là đăng ký ảnh) là kỹ thuật làm cong một ảnh (hoặc đôi khi là cả hai ảnh) sao cho các đặc điểm trong hai ảnh thẳng hàng một cách hoàn hảo.
alignment.jpg


Hình 1. Bên trái: Một biểu mẫu văn bản chuẩn. Giữa: Biểu mẫu được chụp bằng điện thoại di động. Phải: Kết quả căn chỉnh ảnh di động (ở giữa) theo mẫu gốc (trái).

Trong ví dụ trên, chúng ta có một biểu mẫu văn bản ở bên trái. Mẫu đơn được in, điền và sau đó chụp ảnh bằng điện thoại di động (ở giữa). Trong ứng dụng phân tích tài liệu này, trước tiên bạn nên căn chỉnh ảnh di động của biểu mẫu với mẫu gốc trước khi thực hiện bất kỳ phân tích nào. Đầu ra sau khi căn chỉnh được hiển thị trên hình ảnh bên phải.

Ứng dụng căn chỉnh hình ảnh​

Căn chỉnh hình ảnh có rất nhiều ứng dụng.

Trong nhiều ứng dụng xử lý tài liệu, bước đầu tiên là căn chỉnh tài liệu được quét hoặc chụp ảnh theo mẫu. Ví dụ: nếu bạn muốn viết một trình đọc biểu mẫu tự động, trước tiên bạn nên căn chỉnh biểu mẫu theo mẫu của nó, sau đó đọc các trường dựa trên một vị trí cố định trong mẫu.

Trong một số ứng dụng y tế, nhiều lần quét mô có thể được thực hiện ở những thời điểm hơi khác nhau và hai hình ảnh được ghi lại bằng cách sử dụng kết hợp các kỹ thuật được mô tả trong hướng dẫn này và hướng dẫn trước đó .

Ứng dụng thú vị nhất của việc căn chỉnh hình ảnh có lẽ là tạo ảnh toàn cảnh. Trong trường hợp này, hai hình ảnh không phải là mặt phẳng mà là cảnh 3D. Nói chung, căn chỉnh 3D yêu cầu thông tin chiều sâu. Tuy nhiên, khi hai hình ảnh được chụp bằng cách xoay máy ảnh quanh trục quang của nó (như trong trường hợp ảnh toàn cảnh), chúng ta có thể sử dụng kỹ thuật được mô tả trong hướng dẫn này để căn chỉnh hai hình ảnh của một bức ảnh toàn cảnh.

Căn chỉnh hình ảnh: Lý thuyết cơ bản​

Trọng tâm của kỹ thuật căn chỉnh hình ảnh là một ma trận 3×3 đơn giản được gọi là Homoography. Mục Wikipedia về homoography có thể trông rất đáng sợ.

Homology là gì?​

Hai hình ảnh của một cảnh có liên quan với nhau bằng một hình ảnh đồng nhất với hai điều kiện.

  1. Hai hình ảnh này là của một chiếc máy bay (ví dụ: tờ giấy, thẻ tín dụng, v.v.).
  2. Hai hình ảnh này được thu được bằng cách xoay camera quanh trục quang của nó. Chúng tôi chụp những hình ảnh như vậy trong khi tạo ảnh toàn cảnh.
Như đã đề cập trước đó, homology không gì khác ngoài ma trận 3 × 3 như được hiển thị bên dưới.

quicklatex-com-d11346122f20efb9f8535913f20fdfd1-l3.png

Cho phép
(x_1,y_1)
là một điểm trong hình ảnh đầu tiên và
(x_2,y_2)}
là tọa độ của cùng một điểm vật lý trong hình ảnh thứ hai. Sau đó, Homology
H
liên hệ chúng theo cách sau
1699840240952.png
Nếu chúng ta biết hình ảnh đồng nhất, chúng ta có thể áp dụng nó cho tất cả các pixel của một hình ảnh để thu được hình ảnh bị biến dạng được căn chỉnh với hình ảnh thứ hai.

Làm thế nào để tìm thấy Homology?​


1699840273789.png

Hình 2. Hai hình ảnh của cùng một mặt phẳng 3D (đầu sách) có liên quan với nhau bằng một Homoography


Nếu biết 4 điểm tương ứng trở lên trong hai hình ảnh, chúng ta có thể sử dụng hàm OpenCV findHomography để tìm điểm tương đồng. Một ví dụ về bốn điểm tương ứng được hiển thị trong Hình trên. Các điểm màu đỏ, xanh lá cây, vàng và cam là các điểm tương ứng.

Bên trong hàm findHomography giải một hệ phương trình tuyến tính để tìm ra homograph, nhưng trong bài đăng này, chúng ta sẽ không đề cập đến phép toán đó.

C++:
findHomography(points1, points2, h)

trong đó, point1point2 là vectơ/mảng của các điểm tương ứng và h là ma trận homograph.

Làm thế nào để tìm điểm tương ứng tự động?​

Trong nhiều ứng dụng Thị giác Máy tính, chúng ta thường cần xác định các điểm ổn định thú vị trong một hình ảnh. Những điểm này được gọi là điểm chính hoặc điểm đặc trưng . Có một số trình phát hiện điểm chính được triển khai trong OpenCV (ví dụ SIFT, SURF và ORB).

Trong hướng dẫn này, chúng ta sẽ sử dụng trình phát hiện tính năng ORB vì nó được đồng phát minh bởi người bạn cùng phòng thí nghiệm cũ của tôi là Vincent Rabaud. Đùa thôi! Chúng tôi sẽ sử dụng ORB vì SIFT và SURF đã được cấp bằng sáng chế và nếu bạn muốn sử dụng nó trong ứng dụng thực tế, bạn cần phải trả phí cấp phép. ORB nhanh chóng, chính xác và không cần giấy phép!

Các điểm chính ORB được hiển thị trong hình ảnh bên dưới bằng các vòng tròn.
1699840339556.png
Hình 3. Vị trí của các điểm chính ORB được hiển thị bằng các vòng tròn.

ORB là viết tắt của TÓM TẮT định hướng NHANH CHÓNG và Xoay vòng. Chúng ta hãy xem NHANH CHÓNG và NGẮN có nghĩa là gì.

Bộ phát hiện điểm đặc trưng có hai phần

  1. Định vị : Điều này xác định các điểm trên hình ảnh ổn định dưới các phép biến đổi hình ảnh như dịch chuyển (dịch chuyển), tỷ lệ (tăng/giảm kích thước) và xoay. Bộ định vị tìm tọa độ x, y của các điểm đó. Bộ định vị được máy dò ORB sử dụng được gọi là FAST .
  2. Bộ mô tả : Bộ định vị ở bước trên chỉ cho chúng ta biết những điểm thú vị ở đâu. Phần thứ hai của bộ phát hiện đặc trưng là bộ mô tả mã hóa hình thức của điểm để chúng ta có thể phân biệt điểm đặc trưng này với điểm đặc trưng khác. Bộ mô tả được đánh giá tại một điểm đặc trưng chỉ đơn giản là một dãy số. Lý tưởng nhất là cùng một điểm vật lý trong hai hình ảnh phải có cùng một bộ mô tả. ORB sử dụng phiên bản sửa đổi của bộ mô tả tính năng có tên BRISK .
Lưu ý : Trong nhiều ứng dụng trong Thị giác máy tính, chúng tôi giải quyết vấn đề nhận dạng theo hai bước - a) Bản địa hóa 2) Nhận dạng.

Ví dụ: để triển khai hệ thống nhận dạng khuôn mặt, trước tiên chúng ta cần một bộ dò khuôn mặt đưa ra tọa độ của một hình chữ nhật bên trong có khuôn mặt. Máy dò không biết hoặc quan tâm người đó là ai. Công việc duy nhất của nó là xác định vị trí một khuôn mặt.

Phần thứ hai của hệ thống là thuật toán nhận dạng. Hình ảnh gốc được cắt theo hình chữ nhật khuôn mặt được phát hiện và hình ảnh đã cắt này được đưa vào thuật toán nhận dạng khuôn mặt để cuối cùng nhận dạng người đó. Bộ định vị của bộ dò tìm tính năng hoạt động giống như một bộ dò tìm khuôn mặt. Nó bản địa hóa các điểm thú vị nhưng không giải quyết được danh tính của điểm. Bộ mô tả mô tả vùng xung quanh điểm để có thể xác định lại nó trong một hình ảnh khác.

Sự đồng nhất liên quan đến hai hình ảnh chỉ có thể được tính toán nếu chúng ta biết các đặc điểm tương ứng trong hai hình ảnh. Vì vậy, một thuật toán so khớp được sử dụng để tìm các đặc điểm trong một hình ảnh khớp với các đặc điểm trong hình ảnh khác. Với mục đích này, phần mô tả của mọi đặc điểm trong một hình ảnh sẽ được so sánh với bộ mô tả của mọi đặc điểm trong hình ảnh thứ hai để tìm ra kết quả phù hợp.

Mã căn chỉnh hình ảnh OpenCV​

Trong phần này, chúng tôi trình bày mã C++ để căn chỉnh hình ảnh bằng OpenCV. Toàn bộ mã có trong phần tiếp theo, nhưng nếu bạn muốn lấy tất cả hình ảnh và mã, hãy tải xuống bằng liên kết bên dưới.

Các bước căn chỉnh hình ảnh dựa trên tính năng​

Bây giờ chúng ta đã có thể tóm tắt các bước liên quan đến việc căn chỉnh hình ảnh. Mô tả bên dưới đề cập đến mã trong các phần tiếp theo.

  1. Đọc hình ảnh : Trước tiên, chúng tôi đọc hình ảnh tham chiếu (hoặc hình ảnh mẫu) và hình ảnh chúng tôi muốn căn chỉnh theo mẫu này trong Dòng 70-80 trong C++
  2. Phát hiện các đặc điểm : Sau đó, chúng tôi phát hiện các đặc điểm ORB trong hai hình ảnh. Mặc dù chúng ta chỉ cần 4 đặc điểm để tính toán đặc điểm tương đồng, nhưng thông thường có hàng trăm đặc điểm được phát hiện trong hai ảnh. Chúng tôi kiểm soát số lượng tính năng bằng cách sử dụng tham số MAX_FEATURES trong mã C++. Các dòng 26-29 trong mã C++ phát hiện các tính năng và tính toán các bộ mô tả bằng cách sử dụng detectAndCompute .
  3. Tính năng so khớp : Trong Dòng 31-47 trong C++ , chúng tôi tìm thấy các đặc điểm trùng khớp trong hai hình ảnh, sắp xếp chúng theo mức độ phù hợp và chỉ giữ lại một tỷ lệ nhỏ so sánh ban đầu. Cuối cùng, chúng tôi hiển thị các kết quả phù hợp trên hình ảnh và ghi tệp vào đĩa để kiểm tra trực quan. Chúng tôi sử dụng khoảng cách Hamming làm thước đo mức độ tương tự giữa hai bộ mô tả tính năng. Các đặc điểm phù hợp được hiển thị trong hình bên dưới bằng cách vẽ một đường nối chúng. Lưu ý, chúng tôi có nhiều kết quả khớp không chính xác và do đó chúng tôi sẽ cần sử dụng một phương pháp mạnh mẽ để tính toán homograph trong bước tiếp theo
keypoint-matching-1024x682.jpg

Hình 4. Các điểm chính phù hợp được hiển thị bằng cách vẽ một đường thẳng giữa chúng. Bấm vào để phóng to hình ảnh. Các kết quả khớp không hoàn hảo và do đó chúng ta cần một phương pháp mạnh mẽ để tính toán độ đồng nhất trong bước tiếp theo.

  • Tính toán đồng nhất : Một đồng nhất có thể được tính toán khi chúng ta có 4 điểm tương ứng trở lên trong hai hình ảnh. Tính năng khớp đối tượng tự động được giải thích ở phần trước không phải lúc nào cũng tạo ra kết quả khớp chính xác 100%. Không hiếm trường hợp 20-30% số trận đấu sai. May mắn thay, phương pháp findHomography sử dụng một kỹ thuật ước tính mạnh mẽ được gọi là Đồng thuận mẫu ngẫu nhiên (RANSAC), kỹ thuật này tạo ra kết quả đúng ngay cả khi có số lượng lớn kết quả không phù hợp. Các dòng 50-60 trong C++ thực hiện điều này trong mã.
  • Hình ảnh cong vênh : Sau khi tính toán hình ảnh đồng nhất chính xác, phép biến đổi có thể được áp dụng cho tất cả các pixel trong một hình ảnh để ánh xạ nó sang hình ảnh khác. Điều này được thực hiện bằng cách sử dụng hàm warpPerspective trong OpenCV. Điều này được thực hiện ở Dòng 63 trong C++.

Mã C++ để đăng ký hình ảnh​




Kết luận​

Trong bài viết này, chúng tôi đã thảo luận về cách thực hiện căn chỉnh hình ảnh dựa trên tính năng bằng OpenCV. Chúng tôi bắt đầu bằng việc giải thích lý thuyết cơ bản đằng sau Homoography. Sau đó, chúng tôi tiếp tục trình bày các bước bằng một ví dụ trong đó chúng tôi căn chỉnh ảnh của biểu mẫu được chụp bằng điện thoại di động với mẫu của biểu mẫu.

Bài học​

  1. Căn chỉnh ảnh (còn gọi là đăng ký ảnh ) là kỹ thuật làm cong một ảnh (hoặc đôi khi là cả hai ảnh) sao cho các đặc điểm trong hai ảnh thẳng hàng một cách hoàn hảo.
  2. Một số ứng dụng thú vị của Image Alignment là:
    • Tạo ảnh toàn cảnh.
    • Trong các ứng dụng xử lý tài liệu, bước đầu tiên tốt nhất là căn chỉnh tài liệu được quét hoặc chụp ảnh theo mẫu.
    • Rất ít ứng dụng y tế trong đó nhiều lần quét mô có thể được thực hiện ở những thời điểm hơi khác nhau và hai hình ảnh được ghi lại bằng cách sử dụng kết hợp các kỹ thuật được mô tả trong hướng dẫn này .
  3. Kỹ thuật chúng tôi sử dụng thường được gọi là căn chỉnh hình ảnh “dựa trên đặc điểm”, một tập hợp đặc điểm thưa thớt được phát hiện trong một hình ảnh và khớp với các đặc điểm trong hình ảnh kia.
  4. Sau đó, một phép chuyển đổi được tính toán dựa trên các đặc điểm phù hợp này để làm cong hình ảnh này sang hình ảnh khác.
 
Sửa lần cuối bởi điều hành viên:
Top