最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

3 次元点群のアフィン変換

この例では、3 次元点群のアフィン変換を説明します。指定するフォワード変換は、剛体変換または非剛体変換にすることができます。ここで示す変換には、入力点群の回転 (剛体変換) とせん断 (非剛体変換) が含まれます。

点群をワークスペースに読み取ります。

ptCloud = pcread('teapot.ply');

3 次元点群の回転

z 軸に沿って 45 度の回転を定義するアフィン変換オブジェクトを作成します。

A = [cos(pi/4) sin(pi/4) 0 0; ...
     -sin(pi/4) cos(pi/4) 0 0; ...
     0 0 1 0; ...
     0 0 0 1];
tform = affine3d(A);

点群を変換します。

ptCloudOut1 = pctransform(ptCloud,tform);

3 次元点群のせん断

x 軸に沿ってせん断を定義するアフィン変換オブジェクトを作成します。

A = [1 0 0 0; ...
     0.75 1 0 0; ...
     0.75 0 1 0; ...
     0 0 0 1];
tform = affine3d(A);

点群を変換します。

ptCloudOut2 = pctransform(ptCloud,tform);

元の 3 次元点群とアフィン変換後の 3 次元点群の表示

元の 3 次元点群をプロットします。

figure1 = figure('WindowState','maximized');
axes1 = axes('Parent',figure1,'Position',[0.28 0.54 0.46 0.41]);
pcshow(ptCloud,'Parent',axes1); 
xlabel('X');
ylabel('Y');
zlabel('Z');
title('3-D Point Cloud','FontSize',14)

回転およびせん断アフィン変換後の 3 次元点群をプロットします。

axes2 = axes('Parent',figure1,'Position',[0.15 0.02 0.35 0.42]);
pcshow(ptCloudOut1,'Parent',axes2);
xlabel('X');
ylabel('Y');
zlabel('Z');
title({'Rotation of 3-D Point Cloud'},'FontSize',14)

axes3 = axes('Parent',figure1,'Position',[0.5 0.02 0.35 0.42]);
pcshow(ptCloudOut2,'Parent',axes3);
xlabel('X');
ylabel('Y');
zlabel('Z');
title({'Shearing of 3-D Point Cloud'},'FontSize',14)