Kinect Azure Body Tracking Coordinate Mapping - azurekinect

I am wondering, is there is a way to get Joint Position in color and depth space, similar to the v2 coordinate mapper MapCameraPointToColorSpace and MapCameraPointToDepthSpace?
Also how can I map the body index image to color image?
Thanks

The k4abt_skeleton_t from Azure Kinect Body Tracking SDK provides 3D joint locations in the depth camera space. You can project the skeleton joints into the color sensor space using the provided 3d to 2d conversion APIs from the Azure Kinect Sensor SDK.
k4a_calibration_3d_to_2d
k4a::calibration::convert_3d_to_2d
"Transform a 3D point of a source coordinate system into a 2D pixel coordinate of the target camera."
For transforming the body index image to the RGB image, take a look at the following APIs in the Azure Kinect Sensor SDK:
k4a::transformation::depth_image_to_color_camera_custom
k4a_transformation_depth_image_to_color_camera_custom
"Transforms depth map and a custom image into the geometry of the color camera."

It seems that MapCameraPointToColorSpace and MapCameraPointToDepthSpace are replaced by Calibration TransfromTo2D.
I haven't found a solution for mapping the body index image.

Related

How to transform a 3D bounding box from pointclouds to matched RGB frames in ROS?

i am doing SLAM with depth camera realsense D455 on ROS (https://github.com/IntelRealSense/realsense-ros/wiki/SLAM-with-D435i) and I am able to create 3D point clouds of the environment.
I am new in ROS and my goal is to bound a 3d box in a region of global pointcloud then transform the same box on RGB frames that are matched with that points(at the same coordinates) in the global point cloud.
now i have RGB, depth, and point cloud topic and tf but since i am new in this field i do not know how can i find RGB frames that are matched with each point in the global point cloud?
and how do the same operation from point cloud to RGB frames?
i would be grateful if someone can help me with that
Get 3D bounding box points.
Transform them into camera's frame (z is depth).
Generate your camera's calibration model (intrinsic and extrinsic parameters of the camera, focal length etc.) -> Check openCV model, Scaramuzza Model or another stereo camera calibration model
Project 3D points to 2D pixels. (openCV has one projectPoints() function).

How to store useful information about a polygon drawn by google maps drawing tool and then again draw it by that information?

I am trying to draw a polygon with maps drawing tool. Now I want to store useful information about that polygon in the database so I can again draw that same polygon by retrieving the data.
what is that information and how I can use that to draw same polygon?
I would suggest you use a Data type of Varchar/ Specific data type (depending of Database in use) in the table and store the metadata of Polygon or any shape as XML/JSON.
Here's link a https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingResults

Mapping Lat And Lon on a blank page

VB.net, WPF
Been researching for a while and come across nothing that is exactly what im looking for
Basically I am required to make a program that can map area covered by a machine this map can be either be a polygon covering a white screen or a polygon overlaying an offline satellite/Street map.
I have the NMEA serial GPS setup and running perfectly however I am now required to store the Lat and lon data of the machine for each second tick and then overlay this as a polygon map for area covered.
The machine width will be set by the user and map area covered with the GPS.
My Question.
Is there a way I can overlay a gps generated coverage map on either a white screen or an offline street map?
I think I understand what you're trying to achieve here.
You can draw the coverage of your machine as a circle of machine width on a canvas. See here for a tutorial
When it comes to converting your lat/long to pixels for the centre of your machine you need to account for the projection of the chart. Lat/Long describes a location on the surface of a sphere. However your map is a flat 2d shape. To enable us to plot these points the maps are squished using a projection, the most common of which is the mercator projection
Here's an example of transforming lat / long for mercator: Covert latitude/longitude point to a pixels (x,y) on mercator projection

Is it possible to integrate maps in Cytoscape.js?

I am currently using cytoscapeJS to visualize a network but I would like to overlay the graph on a map and plot the nodes to specific locations. The Tokyo Railways Demo is similar to what I have imagined but the background is black.
In a perfect world I could dynamically calculate the longitude and latitude from the node's address data (but I guess this would require cytoscape to have geocoding capabilities) and then plot that on a map.
Here's an example of what I'm trying to do: http://xliberation.com/googlecharts/d3flights.html

Plot a known pixel (x,y) from original image using custom Bing Maps WPF tiles

I am trying to use the Bing Maps WPF control to render custom map tiles from an image of a fictional game world map, but I also need to plot X,Y values on the map from the original world image (sort of like an in-world GPS).
The image is 5720x5720 and I already have working (in a different application) a function that manually crops, scales and redraws sections of the image and plots the pixelX and pixelY coordinates in a PictureBox. I would like to get the same functionality working using the map control.
I used this Photoshop plugin to cut the tiles from the original custom image (works like maptiler for google mapes)
https://github.com/bramus/photoshop-google-maps-tile-cutter/
The problem is I know the X,Y values to plot from the original image, but I'm not not quite sure how to calculate Lat/Long for drawing a point in the custom tile system.
<m:Map Name="Map">
<m:Map.Mode>
<!-- set empty map mode, i.e. remove default map layer -->
<m:MercatorMode/>
</m:Map.Mode>
<local:MyTileLayer UriFormat="file:///C:/map_tiles/{z}_{x}_{y}.jpg"/>
</m:Map>
The map is displaying great and everything looks fine using the custom map tiles. I found this link that provides a class for converting PixelXY to LatLong in the TileSystem, but they are all for realistic world points.
https://msdn.microsoft.com/en-us/library/bb259689.aspx
My custom map tiles are actually for a fictional map for a game so I don't believe the projection and earth-curvature calculations are needed in my situation.
How might I go about plotting a point accurately in the Bing Maps WPF control if I only know the X,Y pixel coordinates from the original untiled image?
Given that your 5720x5720px map image covers the standard Bing Maps (or Google Maps or OpenStreetMap) coordinate range of longitude = -180..180 and latitude = -85.0511..85.0511, the following method would convert from image pixel coordinates to lat/lon according to the Mercator projection:
public static void PixelXYToLatLon(
double pixelX, double pixelY, out double latitude, out double longitude)
{
var imageSize = 5720d;
var maxLatitude = 85.05112878; // = Math.Atan(Math.Sinh(Math.PI)) / Math.PI * 180d;
var y = (0.5 - pixelY / imageSize) * (2d * maxLatitude);
latitude = Math.Atan(Math.Sinh(y * Math.PI / 180d)) / Math.PI * 180d;
longitude = (pixelX / imageSize - 0.5) * 360d;
}
The imageSize variable might of course also be a method parameter.
If you use MapTiler (http://www.maptiler.com) to create the tiles you have two ways how to achieve what you want:
A) Map your game map to the artificial world with Lat/Lon coordinates
In this case you will map the world coordinates to your pixel coordinates. The tiles must be prepared in a correct way, same as those for real world maps.
To create the tiles with MapTiler you should follow this steps:
Choose "Mercator tiles" in the first step
Drop in your image file
Choose "Web mercator (EPSG:3857)" in the dropdown in the "Coordinate system" dialog - it is a square image of the whole world and you don't want to deform it.
Choose "Bounding box (West South East North)" in the dialog "Geographical location" and copy&paste in the input the world coordinates: "-20037508.342789244 -20037508.342789244 20037508.342789244 20037508.342789244"
Render the tiles
With this approach you can load the tiles in your Bing Maps WPF control and position the markers or other data by using Lat/Lon coordinates.
The point [0,0] is going to be center of the image, and you can calculate the other lat/lon coordinates appropriately.
See this page and source code down on the page:
http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/
The globalmaptiles.py code embedded in the page is available in different languages including C# (.cs) if you need it. It has been ported by other people from our code.
B) Stay in raster coordinates
A different approach - where you create the map tiles in the original raster coordinates of the input file. There are no Lat/Lon involved, coordinate system is in pixels and you can draw markers and polygons in pixel coordinates as well. MapTiler gives you sample JavaScript viewer in Leaflet and in OpenLayers. Other viewers you have to patch yourself for using with pixel coordinates. To generate the tiles just choose "Raster tiles" - as in this tutorial: http://youtu.be/9iYKmRsGoxg?list=PLGHe6Moaz52PiQd1mO-S9QrCjqSn1v-ay
I expect the tiles made with your Photoshop plugin are going to be similar to the raster coordinates made with MapTiler.

Resources