デプスマップを3Dポイントクラウドに変換すると、スケーリング係数と呼ばれる用語があることがわかりました。誰かが私にスケーリング係数が実際に何であるかについていくつかの考えを与えることができますか?倍率と焦点距離の間に関係はありますか?コードは次のとおりです。
import argparse
import sys
import os
from PIL import Image
focalLength = 938.0
centerX = 319.5
centerY = 239.5
scalingFactor = 5000
def generate_pointcloud(rgb_file,depth_file,ply_file):
rgb = Image.open(rgb_file)
depth = Image.open(depth_file).convert('I')
if rgb.size != depth.size:
raise Exception("Color and depth image do not have the same
resolution.")
if rgb.mode != "RGB":
raise Exception("Color image is not in RGB format")
if depth.mode != "I":
raise Exception("Depth image is not in intensity format")
points = []
for v in range(rgb.size[1]):
for u in range(rgb.size[0]):
color = rgb.getpixel((u,v))
Z = depth.getpixel((u,v)) / scalingFactor
print(Z)
if Z==0: continue
X = (u - centerX) * Z / focalLength
Y = (v - centerY) * Z / focalLength
points.append("%f %f %f %d %d %d 0\n"%
この文脈では、「スケーリング係数」は深度マップの単位とメートルの間の関係を指します。カメラの焦点距離とは何の関係もありません。
デプスマップは通常、ミリメートルスケールで16ビットの符号なし整数で格納されるため、メートル単位のZ値を取得するには、デプスマップのピクセルを1000で割る必要があります。5000というやや型破りなスケーリング係数があります。デプスマップは200マイクロメートルです。