2015-06-19 20 views
5

Tôi hiện đang làm một dự án dựa trên các phương pháp được mô tả trong bài viết này: Camera calibration from a single night sky imagekỹ thuật OpenCV/Xử lý hình ảnh để tìm những trung tâm của điểm sáng trong một hình ảnh

Là một người mới bắt đầu trong computer vision, tôi không khá hiểu cách tôi có thể thực hiện phương pháp được sử dụng trong bài báo để tìm trung tâm của tất cả các điểm sáng (hình sáng) trong một hình ảnh, cụ thể trên đoạn trong mục 4.1:

Bản vá xung quanh 15 × 15 pixel (Hình 1 (a)), được upsampled bởi một yếu tố nhất định (Hình 1 (c)) và bản đồ gradient tương ứng được tính toán (Hình 1 (d)). Bắt đầu từ vùng sáng nhất, ngưỡng giá trị màu xám bị giảm, cho đến khi chức năng năng lượng được phóng to. Hàm năng lượng được định nghĩa là tổng của các độ dốc biên giới và được chuẩn hóa theo độ dài đường biên (Hình 1 (e)). Điều này dẫn đến một hình ảnh ngôi sao được phân đoạn thể hiện trong Hình 1 (f). Phân đoạn này đảm bảo rằng trọng tâm trọng số của thuật toán trọng lực [11] đưa ra một ước tính mạnh mẽ.

upsampled image after gradient function applied after energy-function applied segmented image

Từ hiểu biết của tôi, tôi nghĩ rằng tôi có thể làm một hàm dốc Laplacian/Sobel vào hình ảnh upsampled, nhưng sau đó tôi không quá chắc chắn làm thế nào tôi có thể thực hiện các năng lượng phần chức năng và tạo ra hình ảnh được phân đoạn. Ngoài ra tôi cũng sẽ muốn hiểu cách thực hiện trọng tâm của thuật toán trọng lực để tìm trung tâm của điểm sáng bằng cách sử dụng openCV hoặc thư viện python khác.

Được đánh giá cao nếu bạn có thể cung cấp một số đèn về điều này.

Cảm ơn và kính trọng.

Trả lời

4

Điều chính cần lấy đi là energy function được sử dụng trong ngữ cảnh này là mọi chức năng được sử dụng cho vấn đề tối đa hóa. Ở đây, hàm năng lượng là tổng của các gradient/các dẫn xuất/khác biệt (tức là "khả năng biên giới được phát hiện" trong trường hợp này).

Vì bạn dường như có nền không có thuật toán, tôi khuyên bạn nên đọc trên breadth-first search (nhớ hình ảnh là một loại biểu đồ rất cụ thể, trong đó mỗi cạnh là pixel, được kết nối với cạnh), recursionfloodfill.

  1. Up/downscale hình ảnh
  2. Chạy bộ lọc Sobel ngang và dọc. Kết hợp các hình ảnh kết quả thành grad_img = max_per_pixel (sobel_horiz, sobel_vert).
  3. Đối với mỗi bản vá 15x15 pixel, hãy tìm điểm sáng nhất. Đây là seed của ngôi sao.
  4. Bắt đầu từ 1x1 region bao gồm seed. Tiếp tục thêm các pixel liền kề vào đó region (đề xuất truyền tải ngang đầu tiên). Tính toán năng lượng theo tổng giá trị pixel trong grad_img với pixel tọa độ các đường biên của region. Nếu năng lượng cao hơn năng lượng của lần lặp trước, điểm ảnh mới sẽ được thêm vào region. Nếu không, pixel bị từ chối.
  5. Tìm trung tâm trọng lực của đường bao khép kín hoặc tập hợp các điểm ảnh không phải là một nhiệm vụ khó khăn.Hoặc là làm theo định nghĩa toán học của nó (tổng các tọa độ x và y của tất cả các pixel trong vùng, chia cho khu vực), hoặc thực hiện bằng cách sử dụng các khoảnh khắc hình ảnh (cv :: moment example).

Giải pháp của tôi là một chút khác biệt so với giải pháp của họ. Họ thực sự chạy một thuật toán tràn ngập lấp đầy tất cả các điểm ảnh của độ sáng [ngưỡng; 255], tính toán năng lượng func, giảm ngưỡng, rửa sạch và lặp lại, dừng lại khi chúng tối đa hóa chức năng năng lượng. Lưu ý rằng thuật toán của chúng rất kém hiệu quả vì chúng có hiệu quả lên tới 255 lũ lụt cho mỗi ngôi sao được phát hiện trước so với 1 lần tràn ngập trong đề xuất của tôi và đó có thể là vấn đề hiệu suất trong thực tế.

+0

Hi Boyko, cảm ơn rất nhiều vì đã trả lời nhanh. Chỉ muốn làm rõ hơn nữa, bạn nói "Nếu năng lượng cao hơn năng lượng của lần lặp trước, điểm ảnh mới sẽ được thêm vào vùng" cái nào là lần lặp trước tôi nên tham khảo? Nó có nghĩa là bắt đầu từ hạt giống, tôi kiểm tra mỗi 8-hàng xóm so với các giá trị pixel của hạt giống. Nếu tất cả các hàng xóm được thêm vào, tôi tiếp tục lặp lại mỗi 15-hàng xóm (hoặc tất cả các điểm ảnh biên giới) và kiểm tra với tổng của 8-hàng xóm trước đó và như vậy? – LawrenceH

+0

Khá nhiều những gì bạn đã nói, ngoại trừ lần lặp thứ hai của bạn có thể không quá một hình vuông vì thêm một số 8 pixel vào vùng không thành công. –

+0

Mặc dù, bây giờ tôi đã đọc những gì THEY thực sự làm chỉ là chạy một thuật toán tràn ngập lấp đầy tất cả các điểm ảnh [ngưỡng; 255], tính func năng lượng, giảm ngưỡng, xả và lặp lại, dừng lại khi chúng tối đa hóa chức năng năng lượng. Lưu ý rằng thuật toán của họ là rất kém hiệu quả khi họ đang thực hiện hiệu quả lên đến 255 trận lụt cho mỗi ngôi sao được phát hiện trước. –

Các vấn đề liên quan