How to get pixel value on certain coordinates

Viewed 323

i am trying to find x,y,z from RGBD image. In place of data[u,v] i need to get D value from my RGBD image.

i am using formula:

Z = depth_image[v,u] / factor;
X = (u - cx) * Z / fx;
Y = (v - cy) * Z / fy;

where fx,fy,cx,cy are camera interior orientation parameters:

fx = focal length x

fy = focal length y

cx = optical center x

cy = optical center y

RGBD = RED,GREEN,BLUE,DEPTH depth image

import numpy as np
import open3d as o3d
from matplotlib import pyplot as plt
from PIL import Image


xyz = np.array([points[:, 0], points[:, 1], points[:, 2]]).T

XYZ = o3d.geometry.PointCloud()
XYZ.points = o3d.utility.Vector3dVector(xyz)
visZ = o3d.visualization.Visualizer()
visZ.create_window(width=1980, height=1080)
visZ.add_geometry(XYZ)
view_control = visZ.get_view_control()
camera_parameters = view_control.convert_to_pinhole_camera_parameters()
print("# Initial camera parameters\n{}\n{}".format(camera_parameters.extrinsic, camera_parameters.intrinsic.intrinsic_matrix))
intri = camera_parameters.intrinsic.intrinsic_matrix
extri = camera_parameters.extrinsic
visZ.run()
image1 = visZ.capture_depth_float_buffer()
photo_save = np.asarray(image1)
plt.imsave("testov.png", \
           np.asarray(photo_save), dpi=1)
plt.imshow(np.asarray(photo_save))
plt.close()
plt.show()
visZ.destroy_window()
image = Image.open('testov.png')
size = w,h = image.size
print("imagesize",size)
data =image.load()
depthscale = 1000
for u in range(w):
    for v in range(h):
        Z = depth_image[v,u] / depthscale
        x = (u - intri[0,2]) * data[u,v]/ intri[0,0]
        y = (v - intri[1,2]) * data[u,v]/ [1,1]
        print(data[x, y, z])

0 Answers
Related