我有一张来自 ifm 3D 相机的深度图像,它利用飞行时间概念来捕捉深度图像。相机附带一个软件,可以显示如下所示的图像:
我可以从相机中提取深度数据,并一直在尝试重新创建它们的表示,但一直没有成功。无论我如何尝试规范化数据范围或更改数据类型格式,我总是以中心“较暗”的图像结束,并随着它移开而变亮。由于某种原因,颜色范围也不匹配。这是我尝试的主要代码:
gray_dist = cv2.imread(dist_path, cv2.IMREAD_ANYDEPTH)
# cv2.normalize(dist, dist, 0, 65535, cv2.NORM_MINMAX)
# cv2.normalize(dist, dist, 0, 255, cv2.NORM_MINMAX)
cv2.normalize(dist, dist, 1440, 1580, cv2.NORM_MINMAX)
dist = dist.astype(np.uint8)
dist = cv2.applyColorMap(dist, cv2.COLORMAP_HSV)
# dist = cv2.cvtColor(dist, cv2.COLOR_HSV2BGR)
cv2.imshow("out", dist)
cv2.waitKey(0)
这让我得到以下图像:
我尝试过其他组合,也尝试过编写自己的规范化和着色函数,但我得到了相同的结果。我现在不确定是我做错了什么,还是 openCV 窗口查看器或其他东西的限制。
我还上传了深度图像文件以防有帮助: depth_image
如有任何帮助,我们将不胜感激。
最佳答案
这是 Python/OpenCV 中的一种方法。它不准确,但您可以修改颜色图或更改拉伸(stretch)。基本上,我创建了一个包含以下颜色的 7 色 LUT:红色、橙色、黄色、蓝色和紫色。我注意到使用 HSV 会在两端产生红色,而你使用的颜色图只从红色变为紫色。我也看不到太多绿色。所以我忽略了它。
输入:
import numpy as np
import skimage.exposure
# load image as grayscale
img = cv2.imread("dist_img.png", cv2.IMREAD_ANYDEPTH)
# stretch to full dynamic range
stretch = skimage.exposure.rescale_intensity(img, in_range='image', out_range=(0,255)).astype(np.uint8)
# convert to 3 channels
stretch = cv2.merge([stretch,stretch,stretch])
# define colors
color1 = (0, 0, 255) #red
color2 = (0, 165, 255) #orange
color3 = (0, 255, 255) #yellow
color4 = (255, 255, 0) #cyan
color5 = (255, 0, 0) #blue
color6 = (128, 64, 64) #violet
colorArr = np.array([[color1, color2, color3, color4, color5, color6]], dtype=np.uint8)
# resize lut to 256 (or more) values
lut = cv2.resize(colorArr, (256,1), interpolation = cv2.INTER_LINEAR)
# apply lut
result = cv2.LUT(stretch, lut)
# create gradient image
grad = np.linspace(0, 255, 512, dtype=np.uint8)
grad = np.tile(grad, (20,1))
grad = cv2.merge([grad,grad,grad])
# apply lut to gradient for viewing
grad_colored = cv2.LUT(grad, lut)
# save result
cv2.imwrite('dist_img_colorized.png', result)
cv2.imwrite('dist_img_lut.png', grad_colored)
# display result
cv2.imshow('RESULT', result)
cv2.imshow('LUT', grad_colored)
cv2.waitKey(0)
cv2.destroyAllWindows()
拉伸(stretch)图像:
彩色图像:
查找表:
关于python - 为 16 位深度图像着色的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67678048/