以最快的方式删除Point Cloud中的Inf和NaN值

Saa*_*nia 3 matlab image-processing stereo-3d point-clouds matlab-cvst

我是MATLAB的新手,刚刚开始研究Stereo Vision.在场景的3D立体重建之后,从我获得的点云,我想忽略所有具有值NaN或Inf的坐标.

为此,我遵循以下程序:

对于尺寸为40×40的图像,点云是40×40×3的矩阵(3由于3D; X,Y和Z坐标).

从3D点云(40 X 40 X 3)开始,我得到一个尺寸为1600 X 3的矩阵.3列中的每一列都对应于X,Y和Z坐标

在这一步,我试图删除整行,如果我找到任何Inf或NaN元素.

例如,在连接步骤之后,如果我有矩阵A.

A = [1,11,21; NaN,12,22; 3,13,Inf; NaN,14,N​​aN; 5,Inf,NaN; 6,16,26];

我想消除所有具有Inf或NaN元素的行.

所以预期的结果是:[1,11,21; 6,16,26];

由于我将使用尺寸为4000 X 3000的图像,我想要一种非常快速有效的方法.

我这样做是为了在我获得的点云中拟合一个平面(最合适).拟合平面的函数不采用Inf和NaN值.因此,即使找到一个NaN值,也必须消除所有相应的X,Y和Z坐标.

如果有更好的方法来做到这一点,除了我目前正在做的,请通知.

谢谢=)

Div*_*kar 6

对于1600 x 3尺寸重塑A,您可以使用此 -

A(~any(isinf(A) | isnan(A),2),:)
Run Code Online (Sandbox Code Playgroud)

如果要删除的行数很小,您可以直接删除它们以获得更好的性能 -

A(any(isinf(A) | isnan(A),2),:) = [];
Run Code Online (Sandbox Code Playgroud)