Augmented Reality auf rotierenden Objekten
ImageDisplacements erfasst das optische Strömungsfeld in einer Filmsequenz in Echtzeit. Durch die Rotation des Verktorfelds
können Sie eine rotierende Handbewegung vor Ihrer eingebauten Kamera erkennen. Dadurch können Sie die Zeit einer virtuellen Uhr in einem Beispiel für Augmented Reality verändern.
Die Rotation eines Vektorfelds
bestimmt die inhärente Anzahl der Drehungen.
In[1]:=

listCurl =
flow \[Function]
ListConvolve[{{0.5`, 0, -0.5`}},
flow[[All, All, 2]], {{1, 2}, {1, 2}}, "Fixed"] -
ListConvolve[{{-0.5`}, {0.`}, {0.5`}},
flow[[All, All, 1]], {{1, 2}, {1, 2}}, "Fixed"];
Den kompletten Wolfram Language-Input zeigen
Der ganze Code, der für diese Beispiel der Augmented Reality benötigt wird, ist weniger als eine Seite lang.
In[3]:=

DynamicModule[
{frames, flow, curl, mask, time = 0, W = 320, H = 240, w = 240,
h = 160, r = 64},
(* specify a sensitive image region *)
mask = ImageCompose[
ConstantImage[0, {W, H}],
ImageAdjust[Image[GaussianMatrix[r/2]]],
{w, h}
];
(* initialize the optical flow acquisition *)
frames = Table[preProcessFrame@CurrentImage[], {2}];
flow = First@ImageDisplacements[frames];
Graphics[
{Inset[
(* read and display camera image, determine the curl *)
Dynamic[
frames[[1]] = frames[[2]];
frames[[2]] = preProcessFrame@CurrentImage[];
flow = First@ImageDisplacements[frames, 0.7 flow];
curl = Image@listCurl@flow;
time -= 2 ImageMeasurements[curl, "Mean", Masking -> mask];
frames[[2]]
],
{0, 0}, {0, 0}, {W, H}
],
Inset[
(* display clock *)
Dynamic[
ClockGauge[
DatePlus[Date[], {Round[5 time, 5], "Minute"}],
GaugeStyle -> RGBColor[1, 0.75, 0],
LabelStyle -> White,
GaugeFaceStyle -> Opacity[0.1]
],
UpdateInterval -> 1
],
{w, h}, {0, 0}, {2 r, 2 r}
]
},
PlotRange -> {{0, W}, {0, H}},
ImageSize -> {W, H}
]
]
