Depth Estimation từ hình ảnh
Phân biệt relative depth, metric depth và stereo geometry trước khi dùng bản đồ khoảng cách.
Depth map gắn một giá trị khoảng cách hoặc quan hệ chiều sâu với pixel. Màu đẹp trên bản đồ không chứng minh mỗi giá trị đã có đơn vị mét hay đủ chính xác để điều khiển robot.
Mục tiêu học tập
- Phân biệt độ sâu tương đối và thang đo metric.
- Giải thích disparity trong stereo rectifié.
- Nêu các giả định và trường hợp lỗi trước khi dùng depth.
Một ảnh cho biết gì về 3D?
Vật nhỏ ở gần có thể trông giống vật lớn ở xa. Từ một ảnh, đường phối cảnh, kích thước quen thuộc và vùng che khuất giúp đoán chiều sâu, nhưng không luôn xác định được khoảng cách tuyệt đối.
Một mô hình học có thể dùng kiến thức từ dataset để ước lượng. Khi gặp đồ vật hoặc camera khác, những dấu hiệu quen thuộc có thể không còn đúng; giá trị đầu ra phải được đọc theo mô tả mô hình.
Monocular depth học ánh xạ ảnh sang depth hoặc inverse depth theo mục tiêu cụ thể. Có phương pháp học từ ground-truth depth metric, có phương pháp chỉ được ràng buộc đến một scale hoặc affine ambiguity. Không mặc định mọi mô hình monocular đều không metric hoặc đều metric.
Công trình của Eigen et al. minh họa cách kết hợp thông tin toàn cục và cục bộ cùng sai số liên quan scale. Bài này không tái hiện kiến trúc hay kết quả thực nghiệm của paper.
Ảnh là phép chiếu làm mất một bậc thông tin về khoảng cách. Priors học được có thể bổ sung ràng buộc thống kê nhưng không xóa mọi ambiguity. Đánh giá relative depth sau alignment khác với đo absolute error không alignment.
Phải công bố scale/shift alignment, valid pixel mask và clipping range. Alignment dùng ground-truth test không phải thao tác có sẵn khi triển khai nếu thiếu nguồn scale tương ứng.
Hai ảnh và baseline đã biết
Hai mắt nhìn vật ở vị trí hơi khác nhau. Nếu biết hai camera cách nhau bao xa và được hiệu chỉnh, độ lệch vị trí của cùng điểm giúp suy ra độ sâu. Điểm ở xa thường có disparity nhỏ hơn.
Trong stereo rectifié lý tưởng, , với focal length f và disparity d tính bằng pixel, baseline B theo mét thì Z theo mét. Cần camera calibration, rectification và correspondence đúng. Z là chiều sâu dọc trục quang học, không phải khoảng cách Euclid từ camera đến mọi điểm ảnh.
Không áp dụng công thức cho disparity bằng 0 hoặc âm khi convention yêu cầu disparity dương. Ví dụ f=500 px, B=0.1 m và d=10 px cho Z=5 m trong mô hình pinhole lý tưởng; đây là phép tính giả định, không phải số đo camera.
Độ nhạy theo disparity là . Cùng sai số một pixel có thể tạo sai số depth lớn hơn ở vùng xa. Occlusion và vùng không có texture có thể làm correspondence không xác định.
Stereo thực tế còn chịu distortion, sync error và rolling shutter. Kiểm tra extrinsic và timestamp trước khi quy mọi lỗi cho mạng depth.
Đánh giá trước khi dùng
Thử riêng tường ít texture, bề mặt bóng, vật trong suốt và vật bị che. Không nên hiểu một vùng tô màu liên tục là bằng chứng depth ở đó đáng tin.
Metric depth có thể dùng MAE, RMSE hoặc relative error trên pixel hợp lệ theo protocol. Ghi sensor ground truth, vùng không có nhãn và cách resize output. Kiểm tra cả biên vật thể và vùng xa, nơi lỗi trung bình dễ che khuất.
Uncertainty hoặc consistency check có thể hỗ trợ phát hiện đầu ra nghi ngờ, nhưng cần calibration và đánh giá riêng. Khi depth phục vụ robotics, propagation của lỗi sang bản đồ và khoảng cách vật cản quan trọng hơn hình thức depth visualization.
Workflow & kiến trúc
Ứng dụng & giới hạn
- Tạo hình học gần đúng cho scene understanding.
- Cung cấp đầu vào có kiểm chứng cho mapping hoặc manipulation.
Điểm mạnh
Bổ sung cấu trúc 3D mà box và class label không cung cấp.
Giới hạn cần nhớ
Scale, calibration, domain shift và vật liệu gây ambiguity; depth không tự bảo đảm khoảng cách an toàn.
Thử trong một project nhỏ
Giữ f và B như ví dụ, tính Z khi disparity là 9 và 11 px. So sai số này với trường hợp disparity 2 px để giải thích độ nhạy theo khoảng cách.
def stereo_depth(f_px, baseline_m, disparity_px):
if f_px <= 0 or baseline_m <= 0 or disparity_px <= 0:
raise ValueError("Positive calibrated values required")
return f_px * baseline_m / disparity_px
assert stereo_depth(500.0, 0.1, 10.0) == 5.0
print(stereo_depth(500.0, 0.1, 10.0))Công thức pinhole cho stereo rectifié với số tự chọn; không chạy camera hay ước lượng disparity.
