Tôi đã thử nghiệm thành công thuật toán tương quan pha 1D để xác định sự dịch chuyển dọc giữa hai hình ảnh tổng hợp.
Tuy nhiên, khi tôi chuyển sang hình ảnh thực, nó hoàn toàn không thể phát hiện bản dịch (đỉnh nằm ở 0, kết quả sai).
Tôi có những hình ảnh sau:
Và kết quả tương quan pha (Độ lớn, Thực, Tưởng tượng):
Đường quét đầu tiên của hình ảnh hoàn toàn trắng, nhưng sự thay đổi rõ ràng là lớn hơn (20 pixel).
Kết quả dự kiến là dòng trắng trên hàng thứ 20 chỉ xảy ra trên hình ảnh tổng hợp hoặc nhiễu nhẹ.
Thuật toán của tôi rất đơn giản - cho mỗi cột hình ảnh:
- Tính 1D FT của cột hình ảnh nguồn và đích (
a=FT(A)
,b=FT(B)
) - Tính toán phổ công suất chéo (
cross_power = a *. conj(b) / |a *. conj(b)|
) -*.
biểu thị sự biến đổi theo điểm,conj(x)
biểu thị liên hợp phức tạp - Tính tương quan pha (
phase = IFT(cross_power)
) - Tìm cường độ tối đa trong mỗi cột của
phase
. - Tìm vị trí đỉnh đồng thuận (ví dụ: trung vị của các vị trí đỉnh được phát hiện)
Bạn có thể vui lòng tư vấn cho tôi cách cải thiện thuật toán tương quan pha cơ sở để đối phó với hình ảnh trong thế giới thực (nhiễu) không?
Tôi có nên sử dụng NCC (Chuẩn hóa chéo tương quan) thay vì tương quan pha dựa trên FFT không?
CẬP NHẬT
Tôi đã thử nghiệm với phần đệm bằng 0 để loại trừ các lỗi được chuyển bằng cách dịch chuyển vòng tròn (chỉ có sự dịch chuyển tuyến tính đơn giản của hình ảnh là mong muốn) và đã thử nghiệm điều này trên các hình ảnh gốc từ Wikipedia:
Đỉnh đơn rõ ràng là có:
Tuy nhiên - nếu tôi thực hiện làm mịn nhẹ (làm mờ Gaussian) để giảm nhiễu và thực sự cải thiện kết quả, thì mối tương quan pha xuất hiện hoàn toàn sai lệch:
Đây là phiên bản nâng cao - đỉnh ban đầu yếu hơn (tại sao ??) và đã xuất hiện các đỉnh mới xung quanh ca 0 (tại sao ??):