コード例 #1
0
 private void DepthScanToXYZ(int[] depth, ros.sensor_msgs.CameraInfo info, out double[] x, out double[] y, out double[] z)
 {
     x = new double[depth.Length];
     y = new double[depth.Length];
     z = new double[depth.Length];
     int[] u;
     int[] v;
     DepthScanToXYZ(depth, info, out x, out y, out z, out u, out v);
 }
コード例 #2
0
    private void DepthScanToXYZ(int[] depth, ros.sensor_msgs.CameraInfo info, out double[] x, out double[] y, out double[] z, out int[] u, out int[] v)
    {
        x = new double[depth.Length];
        y = new double[depth.Length];
        z = new double[depth.Length];
        u = new int[depth.Length];
        v = new int[depth.Length];
        // Get z values
        for (int i = 0; i < depth.Length; i++)
        {
            z[i] = depth[i] * 0.001;
            // Set 0 values to 'far away'
            if (depth[i] == 0)
            {
                z[i] = 10;
            }
        }
        // Get x y values (intrinsic camera matrix)
        Debug.Log(info);
        Debug.Log(info.width);
        Debug.Log(info.K);
        double u0    = info.K[2];
        double v0    = info.K[5];
        double fxinv = 1.0 / info.K[0];
        double fyinv = 1.0 / info.K[4];
        int    width = (int)info.width;

        for (int i = 0; i < z.Length; i++)
        {
            int ui = (i % width);
            int vi = (i / width);
            u[i] = ui;
            v[i] = vi;
            x[i] = z[i] * (ui - u0) * fxinv;
            y[i] = z[i] * (vi - v0) * fyinv;
        }
    }