Tôi đã gặp một thuật toán tìm đường bao hình, nhưng tôi gặp khó khăn trong việc chứng minh tại sao nó hoạt động, tôi có loại hiểu tại sao nó hoạt động, nhưng tôi không thể lấy được các công thức được sử dụng trong đó .Làm thế nào tôi có thể chứng minh rằng thuật toán vượt qua cạnh này hoạt động?
Đây là thuật toán:
Giả sử rằng chúng ta có một hình ảnh nhị phân (với con số này là đen và background là màu trắng). Tất cả các điểm ảnh được lưu trữ trong một ma trận nhị phân với 1 là màu trắng và 0 là màu đen.
0) Tìm pixel đen đầu tiên (ví dụ: nếu đó là hình vuông thì nó nằm ở góc trên cùng bên trái).
1) Đặt Lx = x và Ly = y (tọa độ của pixel đầu tiên đó) và Rx = x - 1 và Ry = y. Cũng giữ 2 hằng số firstX = x và firstY = y (chúng ta sẽ cần chúng sau này).
2) Tính Tx = Rx + Ly - Ry và Ty = Ry + Rx - Lx.
3) Làm vòng lặp sau:
do {
if (m[Tx][Ty] == 0) {
Lx = Tx;
Ly = Ty;
m2[Tx][Ty] = 0;
} else {
Rx = Tx;
Ry = Ty;
}
if (Lx == Rx || Ly == Ry) {
Tx = Rx + Ly - Ry;
Ty = Ry + Rx - Lx;
} else {
Ty = (Ly + Ry - Lx + Rx)/2;
Tx = (Lx + Rx + Ly - Ry)/2;
}
} while (Tx != firstX || Ty != firstY);
Trong đoạn mã trên m là hình ảnh ban đầu và m2 là hình ảnh chỉ chứa các đường viền.
Tôi đã cố gắng để hình dung cách làm việc này và đây là những gì tôi đã nhận:
Vì vậy, dường như nó đang làm một số loại của các phong trào zigzag để có được những số không trên các cạnh và xác định đường viền.
Vì vậy, câu hỏi của tôi là, đây có phải là thuật toán đã biết không? Và làm thế nào chính xác được các công thức có nguồn gốc:
Tx = Rx + Ly - Ry;
Ty = Ry + Rx - Lx;
và
Ty = (Ly + Ry - Lx + Rx)/2;
Tx = (Lx + Rx + Ly - Ry)/2;
?
Intersting, tôi chưa bao giờ thấy điều đó. Chúng tôi có thể tham khảo không? Nó có thể tương tự như chiến lược "tay phải trên tường" để đi qua một mê cung. Các phương pháp cổ điển được mô tả ở đây: http://www.imageprocessingplace.com/downloads_V3/root_downloads/tutorials/contour_tracing_Abeer_George_Ghuneim/index.html. –
Tôi chưa xem kỹ, nhưng công thức Tx/Ty chắc chắn dựa trên thực tế là các điểm L và R nằm trong vùng lân cận gần của T và được sử dụng để tính điểm khác trong vùng lân cận, chẳng hạn như tìm hàng xóm theo chiều kim đồng hồ hoặc tương tự. –
@ YvesDaoust Thật không may, tôi không có bất kỳ tài liệu tham khảo, tôi đã được gửi thuật toán này bởi một người đã nhận nó từ một người khác, người đã nhận nó từ người khác, vv, nhưng tôi sẽ hỏi nếu họ có bất kỳ dẫn xuất! Cảm ơn bạn rất nhiều về đường link dẫn. – Pavel