-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain2_video.m
77 lines (58 loc) · 2.03 KB
/
main2_video.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
% C2カメラで記録したビデオデータで深度推定をする
% GMSL-USB3変換を利用した際はCX3の律速により10FPSでしか行えない
% 簡易的には問題ない精度と思われる
clc;
clear;
% 結果をムービーで記録(trueで記録)
out_mov = false;
% 光源推定バッファ
pos_buf = ones(10, 3) .* [0.5, 0.5, -0.8];
% C2カメラで録画したデータ(各自用意)
vid_read = VideoReader('./img/c2cam_sample.mov');
if out_mov
vid_write = VideoWriter('./img/encode00','Motion JPEG AVI');
vid_write.FrameRate = 10;
open(vid_write);
end
while hasFrame(vid_read)
% グレースケールに変換
RGB_I = readFrame(vid_read);
I = im2double(im2gray(RGB_I));
% 光源の方向を設定
%
% y
% ↑
% |
% | z (奥行き、画面内へ)
% | ↙
% |
% ───────────→ x
%
% 光源推定(ロジック非公開)
% 光源推定は使用環境によって最適な状態は異なります
% 各自で用意してください
% 試験的に固定値(例:pos = [0.5, 0.5, -0.7];)で試すことも可能です
pos_buf(1,:) = estimate_lightsource(I);
% 毎フレームごとに光源推定をするが、中央値を正しい光源位置とする
pos = median(pos_buf, 1);
% 法線推定(ロジック非公開)
% こちらも光源推定の結果に大きく依存します
% 各自で実装してください
[p, q] = estimate_normal(I, pos);
pos_buf = circshift(pos_buf,[1 0]); % pos_bufを下にシフト
% 推定された法線から深度推定(ロジック公開)
Z = fcmethod(p, q, false); % false:通常解像度, true:高解像度
% 結果表示
figure(1);
tiledlayout(1,2);
nexttile
imshow(RGB_I);
nexttile
clims = [-100 200];
imagesc(Z, clims); colormap("jet"); colorbar; title('depth estimate');
drawnow
if out_mov
writeVideo(vid_write,getframe(gcf));
end
end
if out_mov, close(vid_write); end