Nhận biết đường thủy trong ảnh trên không - đa giác từ hình ảnh phát hiện cạnh


9

Tôi đang cố gắng nhận ra đường thủy từ các bức ảnh chụp từ trên không (nói từ Google Maps). Chính quyền địa phương thường có dữ liệu GIS cho biết đường thủy (và đường, tòa nhà, v.v.), nhưng dữ liệu nước trong đó thường không chính xác và chúng tôi có thể cải thiện chúng bằng hình ảnh trên không. Vì vậy, chúng tôi đã có một số dữ liệu không phải lúc nào cũng đáng tin cậy.

Tôi biết cách thực hiện một số xử lý hình ảnh cơ bản trên dữ liệu (tiếc là tôi chưa có hình ảnh mẫu để hiển thị ở đây, tôi đang cố gắng tưởng tượng làm thế nào tôi có thể làm điều này, chưa có mã làm việc):

  • Tôi có thể thu thập một số tập hợp các giá trị màu bằng cách sử dụng các bit của đường thủy trong hình ảnh và tìm ra pixel nào gần nhất với các màu này, cũng có thể cho các loại tính năng khác (cỏ, đường, tòa nhà, v.v.). Nếu tôi đặt ngưỡng cho các pixel "đủ gần", tôi sẽ nhận được một tập hợp các pixel có thể là đường thủy (nhưng sẽ có rất nhiều nhiễu).

  • Tôi có thể biến hình ảnh thành thang độ xám và sử dụng thuật toán phát hiện cạnh tiêu chuẩn để tìm ra vị trí của các cạnh. Một lần nữa, điều này mang lại cho tôi một tập hợp các pixel giống như các ranh giới, nhưng sẽ có nhiễu và các cạnh sẽ quá suy nghĩ và / hoặc có các khoảng trống.

Những gì tôi muốn có là đầu ra là một tập hợp các đa giác phác thảo các đường nước có thể xảy ra.

Theo trực giác, tôi muốn sử dụng các cạnh được phát hiện để tạo đa giác và thông tin màu sắc để quyết định chúng là nước, có thể sử dụng dữ liệu chính phủ mà chúng tôi đã có.

Có cách nào để biết từ kết quả của thuật toán phát hiện cạnh đến một tập hợp đa giác khép kín đẹp không? Hoặc bất kỳ lời khuyên nào khác về cách tấn công vấn đề này, nếu có cách tốt hơn?


1
Sidenote: Hãy nhớ rằng giấy phép google không được phép làm điều này! Openstreetmap có cùng một vấn đề . OSM có thỏa thuận sử dụng hình ảnh Bing.
PiTheNumber

Câu trả lời:


6

Điều này là khó thực hiện với thông tin màu sắc một mình. Sự thay đổi màu sắc giữa (hoặc thậm chí bên trong) hình ảnh trên không và vệ tinh có thể rất lớn. Lý tưởng nhất là bạn sẽ muốn siêu âm hoặc ít nhất là hình ảnh hồng ngoại ( xem bài viết này ).

Giả sử phát hiện cạnh của bạn có thể bám vào các ranh giới pixel, bạn có thể lấy các đường viền của mỗi pixel làm một đa giác khép kín và liên kết chúng lại với nhau để tạo thành một đa giác (tùy thuộc vào việc thực hiện liên kết của bạn, bạn có thể kết thúc với một đa giác có các vòng hoặc lỗ bên trong) hoặc một bộ sưu tập của đa giác. Bộ cấu trúc liên kết Java và các triển khai hình học tính toán khác có thể giúp bạn dễ dàng hơn nhiều. Nếu bạn muốn sử dụng các ranh giới pixel phụ, bạn sẽ phải rất cẩn thận rằng bạn có một bộ giá trị epsilon tốt để bạn có thể chụp các cạnh rất gần nhưng không chạm chính xác.

Nếu bạn muốn lấy các cạnh và tự kết hợp chúng, bạn sẽ muốn xây dựng một biểu đồ các cạnh giao nhau và thực hiện mã đi qua biểu đồ (ví dụ ngược chiều kim đồng hồ) để tìm nơi nó tự đóng lại để tạo thành một đa giác. Đây là cách một số thực hiện liên minh của đa giác hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.