程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为 16 位深度图像着色的正确方法是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决为 16 位深度图像着色的正确方法是什么??

开发过程中遇到为 16 位深度图像着色的正确方法是什么?的问题如何解决?下面主要结合日常开发的经验,给出你关于为 16 位深度图像着色的正确方法是什么?的解决方法建议,希望对你解决为 16 位深度图像着色的正确方法是什么?有所启发或帮助;

我有一个来自 ifm 3D 相机的深度图像,它利用飞行时间概念来捕捉深度图像。相机随附一个软件,可以显示如下所示的图像:

为 16 位深度图像着色的正确方法是什么?

我可以从相机中提取深度数据,并一直试图重新创建它们的表示,但我没有成功。无论我如何尝试标准化数据范围或更改数据类型格式,我最终都会得到一个中心“较暗”的图像,并且随着它的移动而变得更亮。由于某种原因,颜色范围也不匹配。这是我尝试的主要代码:

gray_dist = cv2.imread(dist_path,cv2.IMREAD_ANYDEPTH)

# cv2.normalize(dist,dist,65535,cv2.norM_MINMAX)
# cv2.normalize(dist,255,cv2.norM_MINMAX)
cv2.normalize(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)

这让我得到了以下图像:

为 16 位深度图像着色的正确方法是什么?

我尝试了其他组合并编写了自己的归一化和着色函数,但得到了相同的结果。我现在不确定是我做错了什么,还是 openCV 窗口查看器或其他东西的限制。

我还上传了深度图像文件,以防万一: depth_image

对此的任何帮助将不胜感激。

解决方法

这是 Python/OpenCV 中的一种方法。这并不准确,但您可以修改颜色图或更改拉伸。基本上,我创建了一个带有颜色的 7 色 LUT:红色、橙色、黄色、蓝色和紫色。我注意到使用 HSV 会在两端产生红色,并且您使用的颜色图仅从红色变为紫色。我也没有看到太多的绿色。所以我忽略了这一点。

输入:

为 16 位深度图像着色的正确方法是什么?

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,255)     #red
color2 = (0,165,255)   #orange
color3 = (0,255,255)   #yellow
color4 = (255,0)   #cyan
color5 = (255,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,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()

拉伸图像:

为 16 位深度图像着色的正确方法是什么?

彩色图像:

为 16 位深度图像着色的正确方法是什么?

LUT:

为 16 位深度图像着色的正确方法是什么?

大佬总结

以上是大佬教程为你收集整理的为 16 位深度图像着色的正确方法是什么?全部内容,希望文章能够帮你解决为 16 位深度图像着色的正确方法是什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。