Ich erzeuge eine Tiefenkarte von den Punktwolkenpunkten, und um die fehlenden Daten auszufüllen, möchte ich den am nächsten passenden Farbrahmen betrachten. Ich kann ein Tiefenbild erzeugen (ich erzeuge es, wenn OnDepthAvailable aufgerufen wird), und ich sehe, dass das TangoAR-Einheitsbeispiel die Farbrahmen erhält, wenn OnExperimentalTangoImageAvailable aufgerufen wird.Sync Tiefe und Farbe
Dies ist aus der TangoAR Einheit Beispiel:
/// <summary>
/// This will be called when a new frame is available from the camera.
///
/// The first scan-line of the color image is reserved for metadata instead of image pixels.
/// </summary>
/// <param name="cameraId">Camera identifier.</param>
public void OnExperimentalTangoImageAvailable(TangoEnums.TangoCameraId cameraId)
{
if (cameraId == TangoEnums.TangoCameraId.TANGO_CAMERA_COLOR)
{
m_screenUpdateTime = VideoOverlayProvider.RenderLatestFrame(TangoEnums.TangoCameraId.TANGO_CAMERA_COLOR);
// Rendering the latest frame changes a bunch of OpenGL state. Ensure Unity knows the current OpenGL state.
GL.InvalidateState();
}
}
Allerdings mag ich den Rahmen direkt nach dem Tiefen Rahmen, nicht der letzte Frame zur Verfügung.
Wie kann ich die beiden so nahe wie möglich zu synchronisieren? Ein Blick auf das C RBG Depth Sync Beispiel hat mir nicht geholfen. Ich verstehe, dass Tiefe und Farbe die gleiche Kamera verwenden und dass beides nicht gleichzeitig möglich ist (1 Tiefe für alle 4 Farbrahmen).
Sie können die Bilder in einer Karte speichern. Und verwenden Sie den Zeitstempel als Schlüssel und Farbbild als Wert. Dann können Sie nach dem Bild mit dem geringsten Zeitabstand zum Zeitstempel der Punktwolke suchen. Und Sie sollten die Kartengröße auf vielleicht 20 Bilder einstellen, um zu alte Bilder zu entfernen und um Speicher zu sparen. – bashbug
Wie haben Sie das SDK in Unity3D arbeiten lassen? Für mich (und ungefähr 10 andere, die ich gefragt habe) stürzen die Demos immer nach ungefähr 30 Sekunden ab. –