Thuật toán Singh là phương pháp so khớp hai giai đoạn [36, 37]. Giai đoạn đầu tiên dựa trên việc tính toán các giá trị SSD với ba ảnh kềnhau được lọc thông dải là I-1, I0 và I+1.
𝑆𝑆𝑆𝑆𝐷𝐷0(𝑥𝑥,𝑑𝑑) = 𝑆𝑆𝑆𝑆𝐷𝐷0,1(𝑥𝑥,𝑑𝑑) + 𝑆𝑆𝑆𝑆𝐷𝐷0,−1(𝑥𝑥,−𝑑𝑑), (2.22)
trong đó SSDi,j được cho bởi công thức (2.13). Sau đó Singh biến đổi SSD0 thành một phân bố xác suất sử dụng:
𝑅𝑅𝑐𝑐(𝑑𝑑) = 𝑒𝑒−𝑘𝑘𝑘𝑘𝑘𝑘𝐷𝐷0 (2.23)
trong đó k = -ln(0.95)/(min(SSD0)). Vận tốc vc = (uc, vc) được tính bằng trung bình của phân tán này:
𝑢𝑢𝑐𝑐 =∑ 𝑅𝑅𝑐𝑐(𝑑𝑑)𝑑𝑑𝑥𝑥
∑ 𝑅𝑅𝑐𝑐(𝑑𝑑) ,𝑣𝑣à 𝑣𝑣𝑐𝑐 =
∑ 𝑅𝑅𝑐𝑐(𝑑𝑑)𝑑𝑑𝜕𝜕
∑ 𝑅𝑅𝑐𝑐(𝑑𝑑) . (2.24)
Do điều này chỉ thực hiện tốt khi 𝑅𝑅𝑐𝑐(𝑑𝑑) là gần đối xứng với vận tốc thật, Singh đề nghị một chiến lược tinh chỉnh thô-tinh sử dụng hình chóp Laplacian như trong [3, 4] vì thế bề mặt SSD hiệu quả nằm ở trung tâm của sự di chuyển. Điều này cũng cho phép với các vận tốc lớn và tiết kiệm chi phí tính toán. Cuối cùng, Singh đề nghị các trị riêng của ma trận nghịch đảo hiệp phương sai là các độ đo mức tin cậy, trong đó ma trận hiệp phương sai được cho bởi:
𝑆𝑆𝑐𝑐 =∑ 𝑅𝑅1𝑐𝑐(𝑑𝑑)�
� 𝑅𝑅𝑐𝑐(𝑑𝑑)(𝑑𝑑𝑥𝑥−𝑢𝑢𝑐𝑐)2 � 𝑅𝑅𝑐𝑐(𝑑𝑑)(𝑑𝑑𝑥𝑥−𝑢𝑢𝑐𝑐)(𝑑𝑑𝜕𝜕−𝑣𝑣𝑐𝑐)
� 𝑅𝑅𝑐𝑐(𝑑𝑑)(𝑑𝑑𝑥𝑥−𝑢𝑢𝑐𝑐)(𝑑𝑑𝜕𝜕−𝑣𝑣𝑐𝑐) 𝑅𝑅𝑐𝑐(𝑑𝑑)(𝑑𝑑𝜕𝜕−𝑢𝑢𝑐𝑐)2 �(2.25)
Khi thực hiện bước 1, ta sử dụng một phân giải đơn: bề mặt SSD được tính trong phạm vi di chuyển là số nguyên với −2𝑁𝑁 ≤ 𝑑𝑑𝑥𝑥,𝑑𝑑𝜕𝜕 ≤2𝑁𝑁, trong đó N có độ lớn là 4 điểm ảnh. Như Singh ta sử dụng một cửa sổ đồng nhất W trong (2.13) với độ rộng 5.Từ bề mặt SSD (4N+1) x (4N + 1) ta trích rút ra một vùng con (2N + 1) x (2N + 1) nhỏ nhất tìm được trong vùng trọng tâm của cửa sổ tìm kiếm gốc (tức là
34
bước di chuyển từ -N tới N). Mục tiêu của ta là để trích rút ra mặt phẳng SSD nhỏ nhất thỏa mãn tốt hơn giả thiết đối xứng cho việc phân bốđã đề cập ở trên. Với N = 4 ta nhận được SSD kích thước 9 x 9 từ trong bề mặt SSD gốc kích thước 17 x 17.
Bước thứ hai của thuật toán lan truyền vận tốc sử dụng các ràng buộc lân cận. Tức là nó giả sử rằng một vận tốc ước lượng bình phương tối thiểu có trọng số vn = (un, vn) có thể suy ra từ các vận tốc vi = (ui, vi) trong lân cận cục bộ (2w + 1) x (2w + 1) của nó như sau:
𝑢𝑢𝑛𝑛 =∑ 𝑅𝑅𝑢𝑢 𝑛𝑛(v𝑢𝑢)𝑢𝑢𝑢𝑢
∑ 𝑅𝑅𝑢𝑢 𝑛𝑛(v𝑢𝑢) , 𝑣𝑣𝑛𝑛 =
∑ 𝑅𝑅𝑢𝑢 𝑛𝑛(v𝑢𝑢)𝑣𝑣𝑢𝑢
∑ 𝑅𝑅𝑢𝑢 𝑛𝑛(v𝑢𝑢) , (2.26)
trong đó 𝑅𝑅𝑛𝑛(𝒗𝒗𝑢𝑢) là một hàm Gaussian của khoảng cách giữa trọng tâm của lân cận và vị trí của ước lượng 𝒗𝒗𝑢𝑢. Mặc dù Singh sử dụng w=1, nhưng trong thực nghiệm ta thấy kết quả tốt hơn với w=2. Ma trận hiệp phương sai tương ứng là:
𝑆𝑆𝑛𝑛 =∑ 𝑅𝑅𝑢𝑢 1𝑛𝑛(v𝑢𝑢) ⎝ ⎜ ⎛ � 𝑅𝑅𝑢𝑢 𝑛𝑛(v𝑢𝑢)(𝑢𝑢𝑢𝑢− 𝑢𝑢𝑛𝑛) 2 � 𝑅𝑅𝑛𝑛( 𝑢𝑢 v𝑢𝑢)(𝑢𝑢𝑢𝑢− 𝑢𝑢𝑛𝑛)(𝑣𝑣𝑢𝑢− 𝑣𝑣𝑛𝑛) � 𝑅𝑅𝑛𝑛( 𝑢𝑢 v𝑢𝑢)(𝑢𝑢𝑢𝑢− 𝑢𝑢𝑛𝑛)(𝑣𝑣𝑢𝑢− 𝑣𝑣𝑛𝑛) � 𝑅𝑅𝑛𝑛( 𝑢𝑢 v𝑢𝑢)(𝑣𝑣𝑢𝑢− 𝑣𝑣𝑛𝑛)2 ⎠ ⎟ ⎞ (2.27)
Cuối cùng, vận tốc ước lượng, v = (u, v) được chọn để cực tiểu hàm:
�(v−v𝑛𝑛)𝑇𝑇𝑆𝑆𝑛𝑛−1(v−v𝑛𝑛) + (v−v𝑐𝑐)𝑇𝑇𝑆𝑆𝑛𝑛−1(v−vc)𝑑𝑑𝑥𝑥𝑑𝑑𝑦𝑦 (2.28)
Ở đây, vc và Scđược suy ra trực tiếp từ dữ liệu cường độ ở bước 1, trong khi vn và Sn đòi hỏi các vận tốc được biết ở mỗi điểm lân cận và không thể tính một cách tường minh. Bởi vậy, Singh suy ra các phương trình lặp sử dụng các phép tính các phương sai:
v𝑛𝑛0 = v𝑐𝑐
v𝑛𝑛𝑘𝑘+1 = [𝑆𝑆𝑛𝑛−1+ (𝑆𝑆𝑛𝑛𝑘𝑘)−1]−1+[𝑆𝑆𝑛𝑛−1v𝑐𝑐+ (𝑆𝑆𝑛𝑛𝑘𝑘)−1v𝑛𝑛𝑘𝑘]. (2.29)
Ta sử dụng tối đa 25 vòng lặp. Singh sử dụng một SVD để tính ma trận nghịch đảo trong (2.29), thay thế các giá trị suy biến nhỏ hơn 0.1 bởi 0.1 đểngăn ngừa các hệ thống suy biến.
35
𝜆𝜆1và𝜆𝜆2, trong đó 𝜆𝜆1 ≥ 𝜆𝜆2, hoạt động như các ước lượng độchính xác cho bước 2.