Transform Point Cloud from Millimeters to Meters

이 튜토리얼은 4x4 Homogeneous transformation matrix를 사용하여 포인트 클라우드 데이터를 밀리미터(mm)에서 미터(m)로 변환하는 방법을 보여줍니다.

먼저 포인트 클라우드를 로드합니다.

소스로 이동

소스

const auto dataFile = std::string(ZIVID_SAMPLE_DATA_DIR) + "/CalibrationBoardInCameraOrigin.zdf";
std::cout << "Reading " << dataFile << " point cloud" << std::endl;
auto frame = Zivid::Frame(dataFile);
auto pointCloud = frame.pointCloud();
소스로 이동

소스

var dataFile = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
               + "/Zivid/CalibrationBoardInCameraOrigin.zdf";
Console.WriteLine("Reading " + dataFile + " point cloud");
var frame = new Zivid.NET.Frame(dataFile);
var pointCloud = frame.PointCloud;
소스로 이동

source

data_file = get_sample_data_path() / "CalibrationBoardInCameraOrigin.zdf"
print(f"Reading {data_file} point cloud")
frame = zivid.Frame(data_file)
point_cloud = frame.point_cloud()

그런 다음 0.001 스케일링으로 4x4 변환 행렬을 만듭니다.

소스로 이동

소스

const auto millimetersToMetersTransform =
    Zivid::Matrix4x4{ { 0.001F, 0, 0, 0 }, { 0, 0.001F, 0, 0 }, { 0, 0, 0.001F, 0 }, { 0, 0, 0, 1 } };
소스로 이동

소스

var millimetersToMetersTransform =
    new float[,] { { 0.001F, 0, 0, 0 }, { 0, 0.001F, 0, 0 }, { 0, 0, 0.001F, 0 }, { 0, 0, 0, 1 } };
소스로 이동

source

transform_millimeters_to_meters = np.array(
    [[0.001, 0, 0, 0], [0, 0.001, 0, 0], [0, 0, 0.001, 0], [0, 0, 0, 1]], dtype=np.float32
)

그런 다음 이 변환 행렬을 사용하여 포인트 클라우드를 변환합니다.

소스로 이동

소스

std::cout << "Transforming point cloud from mm to m" << std::endl;
pointCloud.transform(millimetersToMetersTransform);
소스로 이동

소스

Console.WriteLine("Transforming point cloud from mm to m");
pointCloud.Transform(millimetersToMetersTransform);
소스로 이동

source

print("Transforming point cloud from mm to m")
point_cloud.transform(transform_millimeters_to_meters)

마지막으로 변환된 포인트 클라우드를 저장합니다.

소스로 이동

소스

const auto transformedFile = "FrameInMeters.zdf";
std::cout << "Saving transformed point cloud to file: " << transformedFile << std::endl;
frame.save(transformedFile);
소스로 이동

소스

var transformedFile = "FrameInMeters.zdf";
Console.WriteLine("Saving frame to file: " + transformedFile);
frame.Save(transformedFile);
소스로 이동

source

transformed_file = "FrameInMeters.zdf"
print(f"Saving transformed point cloud to file: {transformed_file}")
frame.save(transformed_file)