【发布时间】:2018-04-18 21:13:19
【问题描述】:
我正在尝试按照 -here 提供的公式将 3D 点云投影到图像平面上。 我的代码是:
Td=[0.994700168903275 0.0521802707917803 0.0885934158044077 -1.09405637454607/1000; -0.0536097887263755 0.998466155670681 0.0138320834629078 24.2728498290288/1000; -0.0877357654352521 -0.0185082500606608 0.995971826982662 9.35239973330908/1000; 0 0 0 1];
xd=xyz(:,1);
yd=xyz(:,2);
zd=xyz(:,3);
xyz_c=zeros(76800,4);
for i=1:76800
b=[xd(i); yd(i); zd(i); 1];
xyz_c(i,:)=mtimes(Td,b);
end
uc=(xyz_c(:,1)./xyz_c(:,3))*250.406303917333+162.663763325924;
vc=(xyz_c(:,2)./xyz_c(:,3))*249.362838052888+119.937781665327;
figure(1)
imshow(scene2);hold on; plot(uc,vc);hold off;
平移向量除以 1000,因为该值以 mm 为单位,但我需要以 m 为单位。 scene2 是我想要匹配 3D 点的对应场景。不知何故,我知道投影点太低,换句话说,vc 值太大。当我在图像上绘制uc 和vc 时,我得到了这个:
很难看到,但 3D 点的标记顶部位于标记顶部开始的位置,这些点应高出 60 像素左右。当我执行以下imshow(scene2);hold on; plot(uc,vc-60);hold off; 时,结果会好得多:
我获得了一个带有 XYZ 坐标的点云,所以 xyz 变量基本上是直接来自导出的点云的信息。希望我能很好地解释我的问题。
问题是,代码有什么问题还是我遗漏了什么?
【问题讨论】:
-
你应该嵌入图片,这样更容易阅读
-
@Tobi 我会,但我在这里没有足够的声誉。我最近加入了
-
你能添加没有重叠点的图像吗(我很难弄清楚图片中发生了什么)
-
@SneakyPolarBear 我添加了原始图像、生成的 [uc,vc] 图和原始点云(黑色圆圈是粉色标记所在的位置,很难看到)
-
也许你们当中有人知道为点云点分配像素颜色值的代码,所以结果我得到了彩色点云
标签: matlab image-processing 3d mapping