code: def img_to_pcd_2d(img, norm_coord=True):
      assert isinstance(
          img, np.ndarray
      ), f"cannot process data type: {type(img)}"
      assert len(img.shape) == 3
  
      _h, _w, _c = img.shape
      if norm_coord:
          x, y = np.meshgrid(
              np.linspace(-1, 1, num=_w),
              np.linspace(-1, 1, num=_h),
          )
      else:
          x, y = np.meshgrid(
              np.linspace(0, _w - 1, num=_w),
              np.linspace(0, _h - 1, num=_h),
          )
      x, y = x.reshape(-1, 1), y.reshape(-1, 1)
      feat = img.reshape(-1, _c)
      pcd_2d = np.concatenate([x, y, feat], axis=1)
      return pcd_2d
  
file_path: ml-neuman/geometry/pcd_projector.py
imports: import numpy
  import torch
label_desc: Use image node_id 6 for calling the PointCloudProjectorNp obj's underlying member method code with example usage: obj.img_to_pcd_2d(img, norm_coord) and returns: pcd_2d