Giải mã tọa độ hòn đảo bí ẩn bằng hình học và lập trình CUDA
Một kỹ sư đã sử dụng kiến thức hình học, thuật toán tìm kiếm không gian và lập trình song song CUDA để xác định vị trí chính xác của một khu nghỉ dưỡng trên đảo chỉ từ một bức ảnh chụp từ trên cao. Phương pháp tiếp cận độc đáo này không dùng đến Google Lens mà dựa trên việc phân tích hình dạng, cụm đảo và dữ liệu vệ tinh, cuối cùng tìm ra đáp án tại Micronesia. Bài viết là một ví dụ ấn tượng về sự kết hợp giữa OSINT (tình báo nguồn mở), khoa học dữ liệu và lập trình hiệu năng cao.

Giải mã tọa độ hòn đảo bí ẩn bằng hình học và lập trình CUDA
Một kỹ sư đã từ chối giải pháp đơn giản là dùng Google Lens để giải một bài tập OSINT (Open Source Intelligence) đầy thách thức. Thay vào đó, anh đã xây dựng một hệ thống lọc dữ liệu địa lý phức tạp, kết hợp hình học tính toán và lập trình song song GPU CUDA để tìm ra chính xác một khu nghỉ dưỡng trên một hòn đảo nhỏ giữa Thái Bình Dương. Kết quả là một hành trình đầy thử nghiệm và thuật toán heuristic, chứng minh sức mạnh của tư duy lập trình trong việc giải quyết các bài toán không gian địa lý.
Bài toán gốc đến từ thử thách gralhix 004 của chuyên gia OSINT Sofia Santos, yêu cầu xác định tên khu nghỉ dưỡng, tọa độ hòn đảo và hướng máy ảnh. Thay vì sử dụng các công cụ nhận diện hình ảnh, tác giả đã tiếp cận bằng cách phân tích cấu trúc hình học của cụm đảo từ bức ảnh, sau đó quét toàn bộ dữ liệu bờ biển thế giới từ OpenStreetMap và dùng GPU để kiểm tra song song hàng chục triệu ứng viên. Sau nhiều bước lọc, đáp án được tìm thấy tại một hòn đảo nhỏ thuộc quần đảo Chuuk, Micronesia.
Phân tích hình ảnh và xây dựng "dấu vân tay" hình học
Điều đầu tiên cần làm là kiểm tra metadata của bức ảnh, nhưng kết quả trả về rỗng, hầu như không có thông tin hữu ích về máy ảnh hay GPS. Không thể xác định độ cao của drone, tác giả quyết định tập trung vào các mối quan hệ không gian tương đối giữa ba khối đất nổi bật trong ảnh: hòn đảo chính (P0), hòn đảo bên phải (P1) và hòn đảo phía trước có đỉnh núi (P2).
Bằng một công cụ GUI tự viết, tác giả đã nhấp chuột để ghi lại tọa độ pixel của ba điểm này và tính toán các góc, khoảng cách tương đối giữa chúng, tạo thành một "dấu vân tay" hình học tam giác. Để bù đắp cho sai số khi nhấp chuột bằng mắt thường, một biên độ dung sai ±20% đã được thêm vào các giá trị này trước khi tiến hành tìm kiếm.
Tìm kiếm trên toàn cầu với bộ lọc địa lý thông minh
Dữ liệu được sử dụng là bộ land-polygons-split-4326 từ OpenStreetMap, chứa toàn bộ đường bờ biển thế giới, nặng khoảng 882 MB. Việc tính toán hình học trên toàn bộ dữ liệu này là không khả thi, vì vậy cần các bộ lọc heuristic để thu hẹp phạm vi một cách nhanh chóng.
- Lọc theo vĩ độ: Do hòn đảo có khí hậu nhiệt đới, tất cả các vùng đất nằm ngoài dải vĩ độ từ -30° đến 30° sẽ bị loại bỏ. Bộ lọc này giúp giảm danh sách xuống còn khoảng 141.131 đa giác.
- Lọc mật độ cục bộ: Một hòn đảo nhỏ và biệt lập như trong ảnh sẽ không nằm trong một quần đảo dày đặc. Điều kiện đặt ra là trong bán kính 5km không được có quá 10 tâm điểm đất liền khác, giúp loại bỏ các rạn san hô và quần đảo chật chội, giảm xuống còn 51.576 điểm.
- Phân cụm: Vì hình ảnh cho thấy ba khối đất gần nhau, thuật toán sẽ tìm các điểm có ít nhất 2 điểm khác trong bán kính 20km để tạo thành một "cụm" tiềm năng. Kết quả là khoảng 23.500 cụm.
Sức mạnh của CUDA khi xử lý 80 triệu tam giác
Mỗi cụm có thể tạo ra rất nhiều bộ ba điểm (tam giác) để so sánh với dấu vân tay hình học. Tổng cộng, có tới 80.690.777 ứng viên tam giác được sinh ra. Việc so sánh tuần tự sẽ mất rất nhiều thời gian, vì vậy tác giả đã sử dụng CUDA để xử lý song song trên GPU.
long long i = blockIdx.x * (long long)blockDim.x + threadIdx.x;
if (i >= n_triples) return;
Mỗi luồng CUDA sẽ xử lý một tam giác, sắp xếp các điểm theo diện tích để xác định P0 (đảo nhỏ nhất, chính là khu nghỉ dưỡng), sau đó tính toán các góc và khoảng cách để so khớp với dấu vân tay đã chọn. Phép cross product được dùng để xác định hướng xoay (trái hoặc phải) giúp phân biệt P1 và P2. Sau khi so khớp, chỉ còn 948 ứng viên được giữ lại.
Từ dữ liệu vệ tinh đến đáp án cuối cùng
Sau bước lọc GPU, tác giả tiếp tục sử dụng các nguồn dữ liệu vệ tinh công khai để kiểm tra thêm, thay vì chỉ dựa vào hình dạng.
- Kiểm tra thực vật (NDVI): Sử dụng chỉ số thực vật NDVI từ vệ tinh Sentinel-2 thông qua API Earth Search. Khu nghỉ dưỡng nằm trên đảo có cây cối rậm rạp, do đó NDVI phải lớn hơn 0.6.
- Kiểm tra độ cao: Hòn đảo P0 phải thấp (dưới 50m), trong khi hòn đảo có núi P2 phải có độ cao từ 100m đến 500m trong phạm vi tìm kiếm.
- Kiểm tra độ "tròn" của đảo: Hòn đảo phải có hình bầu dục, không quá tròn và cũng không quá dài.
Sau khi vượt qua tất cả các bộ lọc, chỉ còn 26 ứng viên cuối cùng. Tác giả đã tạo một báo cáo HTML kèm liên kết Google Maps để kiểm tra từng ứng viên bằng mắt thường. Ngay lập tức, ứng viên thứ 8 tại Micronesia đã khớp hoàn hảo với hình ảnh gốc.
Hình ảnh hòn đảo được tìm thấy trên Google Maps
Kết quả
- Tên khu nghỉ dưỡng: Oan
- Tọa độ hòn đảo: 7°21'48.4" N, 151°45'20.7" E
- Hướng máy ảnh: Camera quay về hướng Tây Bắc (NW, 324.97°)
Biểu đồ phân tích hướng máy ảnh
Hành trình này không chỉ là một lời giải cho một bài tập OSINT, mà còn là một minh chứng tuyệt vời cho thấy việc kết hợp tư duy hình học, xử lý dữ liệu lớn và lập trình GPU có thể giải quyết các bài toán không gian phức tạp như thế nào. Toàn bộ mã nguồn và báo cáo đều được công khai trên GitHub để cộng đồng tham khảo và học hỏi.
Minh họa quá trình lọc và các ứng viên được tìm thấy
Toàn bộ mã nguồn và báo cáo cuối cùng có thể được tìm thấy trên GitHub của tác giả. Đây là một nguồn tài liệu học tập quý giá cho bất kỳ ai quan tâm đến OSINT, phân tích dữ liệu địa lý và lập trình song song trên GPU.