AI

点群データのCAD化:メッシュ化・面フィッティングの処理フローとOpen3DでDXFを書き出す実装

点群データのCAD化:メッシュ化・面フィッティングの処理フローとOpen3DでDXFを書き出す実装

3Dスキャナーやレーザー計測で取った点群データは、そのままではCADで寸法を変えたり図面に起こしたりできません。点群データのCAD化とは、点の集まりからノイズを落とし、面を当てはめ、面同士のつながりを復元してCADで編集できる形状に作り直す作業です。この記事では処理を工程に分け、Open3Dで前処理からメッシュ化までを行うコードと、RANSACで壁面を抜き出してDXFに書き出すスクリプトを示します。そのうえで、どこまで自動化でき、どこに人手が残るか、自社開発と専用ソフトのどちらを選ぶかの条件まで言い切ります。

まとめ|点群のCAD化は面の抽出まで自動化し、形状の意図づけは人が担う

点群からCADへの変換は、前処理・メッシュ化・面フィッティング・トポロジー再構築の順に進みます。前処理とメッシュ化はOpen3Dなどのライブラリで数十行のコードにでき、平面・円筒のような単純な形状の抽出もRANSACで自動化できます。

自動化が止まるのは、自由曲面の面張りと、「この穴は直径10mmの設計値」といった設計意図を寸法に戻す工程です。ここはソフトの機能ではなく、図面や現物を知る人の判断に依存します。

結論として、壁・配管・鋼材のように形が定型で数が多い現場なら自動化パイプラインを組む価値があります。一品物の機械部品を数点だけCAD化するなら、開発せず専用ソフトか外注のモデリングで済ませるほうが安く上がります。

点群データをCADモデルへ起こす工程と、メッシュとソリッドの違い

CAD化の工程を設計する前に、点群・メッシュ・CADソリッドの3つが何を持っているデータなのかを押さえます。工程の多くは、この3段階の間を埋める処理です。

点群・メッシュ・CADソリッドで変わるデータの持ち方と編集できる範囲

点群は座標の集まりで、点と点の間に何があるかを持ちません。メッシュは点を三角形でつないで表面を表したもので、見た目は形になりますが、平面や円筒という情報はありません。CADソリッドは「この面は平面」「この穴は円筒で半径はいくつ」という数式と、面同士の接続関係を持っています。

データ 持っている情報 できること
点群 各点の座標と色・反射強度 表示と2点間の距離計測
メッシュ 三角形の頂点と接続 3Dプリントと形状比較
CADソリッド 面の数式と面同士の接続 寸法変更と図面化と解析

表のとおり、寸法を変えて設計に戻すにはソリッドまで作る必要があります。メッシュ止まりで足りる用途(3Dプリントや出来形との比較)なら、後半の工程は省けます。

計測から位置合わせ・メッシュ化・面フィッティング・トポロジー再構築まで

CVPR 2024で発表されたPoint2CADの論文は、点群からCADを復元する従来手法の流れを、計測と前処理・領域分割・領域ごとの形状分類・数式による表現の生成・トポロジーの再構築として整理しています。実務の工程に置き換えると次の順になります。

  1. 計測と位置合わせ(複数回のスキャンを1つの座標系にまとめる)
  2. 前処理(外れ値の除去と点の間引き)
  3. メッシュ化(点を三角形でつなぎ表面を作る)
  4. 領域分割と面フィッティング(平面・円筒・自由曲面を当てはめる)
  5. トポロジー再構築(面同士を交差させて稜線と頂点を作る)

1の位置合わせで使うICPやNDT、センサーの測距原理はLiDARの仕組みと点群処理パイプラインを解説した記事で扱っています。台車や手持ちで歩きながら計測した点群なら、SLAMで自己位置推定と地図構築を同時に行う仕組みの記事が前提になります。本記事で扱う範囲は2以降の工程です。

E57・PLY・PCDの入力形式とOpen3Dで直接読めない形式の扱い方

地上型レーザースキャナーの書き出しで多いのは、ASTMがE2807として規格化しているE57形式です。点の座標に加えて色・反射強度・スキャン位置の画像を1ファイルに持てます。測量分野ではLAS形式もよく使われます。

注意したいのは、Open3DのFile IOの対応形式に載っている点群形式がxyz・xyzn・xyzrgb・pts・ply・pcdの6つだという点です。E57とLASは一覧にありません。スキャナー付属ソフトや点群ビューアでPLYに書き出してから読み込むか、変換処理をパイプラインの先頭に入れます。

Open3Dで点群のノイズを除去しPoisson再構成でメッシュ化する手順

ここからは手を動かす工程です。サンプルは単位がメートルのPLYファイル「scan.ply」を前提にしています。

検証環境の用意とOpen3D 0.20系のインストールで確認する対応環境

Open3Dは2026年9月16日にv0.20.0をリリースしました。リリースノートではPython 3.10〜3.14に対応し、3.13と3.14向けのwheelが新たに加わっています。PyPIに置かれたwheelはWindows x64・macOS(Apple Silicon)・Linux(x86_64とaarch64)向けで、Windows on Armのネイティブ版はありません(2026年10月時点)。

python -m venv .venv
.venv\Scripts\activate
pip install open3d==0.20.0 ezdxf numpy

Windows on Armの端末では、x64版のPythonを入れるか、WSLのLinux環境で動かします。なお公式チュートリアルの表記はv0.19.0のままですが、本記事で使う関数の呼び出し方は両版で変わりません。

統計的外れ値除去とボクセル間引きでスキャンの浮遊点を落とす設定

スキャン直後の点群には、ガラスの反射や人の通過でできた浮遊点が混ざります。Open3Dの外れ値除去のチュートリアルでは、近傍点との平均距離から外れる点を落とす統計的外れ値除去(nb_neighbors=20、std_ratio=2.0)と、半径内の点数で判定する半径外れ値除去の2つを紹介しています。std_ratioを小さくするほど除去が強くなる設定です。

先にvoxel_down_sampleでボクセル単位に間引くと、後の法線推定とメッシュ化の計算量が減ります。格子の大きさは、CADで再現したい最小の形状の半分程度が目安です。5mmの面取りを残したいなら2〜3mm、壁の位置だけ分かればよいなら1〜2cmまで粗くできます。

法線推定とPoisson再構成で穴の少ないメッシュを作るコードと調整値

Poisson再構成とボールピボッティングは、どちらも点に法線が付いていることを前提にしています。Open3DのSurface reconstructionのチュートリアルに沿って、前処理からSTLの書き出しまでをまとめると次のコードになります。

import numpy as np
import open3d as o3d

pcd = o3d.io.read_point_cloud("scan.ply")           # 単位はメートル
pcd = pcd.voxel_down_sample(voxel_size=0.005)        # 5mm格子で間引く
pcd, ind = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0)

pcd.estimate_normals(
    search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.02, max_nn=30))
pcd.orient_normals_consistent_tangent_plane(100)     # 法線の向きを揃える

mesh, densities = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd, depth=9)
densities = np.asarray(densities)
mesh.remove_vertices_by_mask(densities < np.quantile(densities, 0.01))  # 点の薄い所の膜を削る
mesh.compute_triangle_normals()                      # STLは面の法線が必要
o3d.io.write_triangle_mesh("scan_mesh.stl", mesh)

depthは八分木の深さで、大きいほど細部が出る代わりにメモリと時間を食います。Poissonは点の無い場所にも面を張るため、密度が下位1%の頂点を削る処理をチュートリアルと同じく入れています。v0.20.0ではfull_depth・samples_per_node・point_weightの3引数もPythonから渡せるようになりました。

ボールピボッティングは入力点をそのまま頂点に使うので、計測誤差の凹凸も残ります。CAD化の下地にするなら、表面が滑らかになるPoissonのほうが後工程で扱いやすいと判断しています。

RANSACで平面を抽出し、壁の線をDXFへ書き出すPythonスクリプト

メッシュは形の確認には使えますが、CADの線や面にはなっていません。建物の平面図のように平面だけで構成される対象なら、メッシュを経由せず点群から直接平面を抜き出して線を引くほうが早く済みます。

segment_planeの3つの引数と、反復抽出で複数の面を取り出す仕組み

RANSACは、ランダムに選んだ3点で平面を仮定し、その平面から一定距離以内にある点を数える試行を繰り返して、最も多くの点を含む平面を採用する手法です。考え方はPCLのPlane model segmentationのチュートリアルが図付きで説明しています。

Open3Dではsegment_plane(distance_threshold, ransac_n, num_iterations)が平面の係数(a, b, c, d)と、平面に乗る点の番号を返します。1回で取れるのは最大の平面1枚だけです。複数の壁を取るには、見つかった点を除いた残りに対してもう一度呼ぶ処理を繰り返します。v0.19.0のリリースノートでは、この関数の結果が実行のたびに変わらないよう修正されたと記載されています。

鉛直な面から壁線を作りezdxfでDXFに保存するスクリプトの全文

次のスクリプトは、平面を最大20枚まで順に抜き出し、床や天井のように水平な面を除外して、鉛直な面だけをXY平面上の線分としてDXFに書き出します。DXFの書き出しにはezdxf(PyPI上の最新は1.4系)を使います。

import numpy as np
import open3d as o3d
import ezdxf

pcd = o3d.io.read_point_cloud("scan.ply")
pcd = pcd.voxel_down_sample(voxel_size=0.01)                  # 1cm格子
pcd, _ = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0)

doc = ezdxf.new("R2010")
msp = doc.modelspace()
rest = pcd
for i in range(20):
    if len(rest.points) < 500:                                # 残りが少なければ終了
        break
    (a, b, c, d), inliers = rest.segment_plane(
        distance_threshold=0.01, ransac_n=3, num_iterations=2000)
    plane = rest.select_by_index(inliers)
    rest = rest.select_by_index(inliers, invert=True)
    if abs(c) > 0.1:                                          # 水平に近い面は壁線にしない
        continue
    xy = np.asarray(plane.points)[:, :2]
    direction = np.array([-b, a]) / np.hypot(a, b)            # 壁がXY上で延びる向き
    t = xy @ direction
    origin = xy.mean(axis=0)
    p1 = origin + (t.min() - t.mean()) * direction
    p2 = origin + (t.max() - t.mean()) * direction
    msp.add_line(tuple(p1), tuple(p2), dxfattribs={"layer": f"WALL_{i:02d}"})

doc.saveas("walls.dxf")

壁ごとに別レイヤーへ書くので、CAD側で誤検出の線をレイヤー単位で消せます。distance_thresholdの設定値は、計測誤差より少し大きい値が目安です。地上型スキャナーの点群なら1cm前後から試し、壁が2枚に割れるなら大きく、隣り合う壁が1本に混ざるなら小さくします。

開口部・柱・曲面で自動抽出が崩れる典型パターンと人手で補う箇所

上のスクリプトは、同じ平面に乗る点を1本の線にまとめる仕組みです。そのため、ドアや窓で途切れた壁も、両端を結んだ1本の線として出力されます。開口部を残すには、線の向きに沿って点の分布を調べ、点が途切れた区間で線を分ける処理が要ります。

崩れやすいのは次の4つです。優先度の高い順に並べます。

  • 家具や機械で壁の下半分が隠れ、壁の点が上部しか取れていない
  • 柱の小さな面が点数不足で拾われず、壁と柱の取り合いが欠ける
  • 円筒の配管やアーチが、細切れの平面として誤って抽出される
  • 計測時の位置合わせのずれで、1枚の壁が数mm離れた2枚に割れる

1つ目は計測計画で防ぐしかありません。2〜4つ目は抽出結果をCAD上で人が確認し、線をつなぎ直す作業として見積もりに入れておきます。

自由曲面と機械部品のCAD化で、専用ソフトと研究実装を比べる判断材料

建物の平面図は平面の組み合わせで済みますが、鋳物や樹脂成形品の外形は自由曲面が中心です。ここで自動化の難度が一段上がります。

自由曲面のNURBS面張りとパラメトリック化を人手に残すべき理由

自由曲面をCADで扱うには、メッシュの上にNURBS曲面を張り、隣の面となめらかにつなぐ必要があります。専用ソフトには自動で面を張る機能がありますが、出来上がるのは形をなぞった面の集まりです。「この肉厚は2mm」「このリブは抜き勾配1度」という設計の意図は点群に含まれていないので、パラメトリックな特徴として作り直すには、設計者が寸法を決め直す作業が残ります。

生成AIでこの工程を置き換えられるかは、CAD側の機能を見ると判断できます。主要CADのAI機能が現時点で何を自動化しているかは、CADのAI搭載機能と生成AIでCADデータを扱う方法を整理した記事にまとめました。導入前に、寸法の決め直しまでAIが担えるのか、形状の提案にとどまるのかを、各製品の公式の機能説明で確かめてから工程に組み込みます。

Point2CADなど学習ベース手法の入力条件とライセンス上の制約

研究分野では、点群から面と稜線を復元する手法が公開されています。Point2CADのGitHubリポジトリによると、入力は各点に面のIDを付けた(x, y, z, s)形式の点群で、面ごとの分割はParseNetやHPNetという別の手法で先に済ませておく必要があります。出力は切り取り前の面・切り取り後の面・稜線と頂点の3種類です。

業務で使う前に確認したいのはライセンスです。READMEは研究と個人利用に限るCC BY-NC 4.0と記載しており、商用利用には著者との別契約が要るとしています。受託案件の納品物に組み込むなら、研究実装をそのまま使わず、手法を参考に自前で実装するか、商用ライセンスの交渉を前提に計画します。

点群のCAD化を自社開発するか専用ソフトで済ますかの採用条件と見送り場面

ここまでの工程を踏まえて、自動化パイプラインを開発する価値がある場面と、開発しないほうがよい場面を分けます。

定型形状を大量に処理する現場で自動化パイプラインを組む採用条件

開発を勧めるのは、次の条件が2つ以上そろう場合です。

  • 対象が平面・円筒・H形鋼など、数式で表せる定型形状で占められている
  • 同じ種類の計測が月に数十件以上あり、手作業のモデリング時間が積み上がっている
  • 出力先が自社の図面テンプレートやBIMの属性など、市販ソフトの書き出しでは合わない
  • 点群を社外に出せず、クラウドのモデリングサービスに預けられない

建築なら既存建物の改修で、点群から壁・床・開口の位置を起こしてBIMモデルの土台にする用途が代表例です。BIMとCADの役割の違いや、2026年4月に始まったBIM図面審査の動きはBIMとCADの違いと図面審査の開始を解説した記事で整理しています。

一品物の部品や点数の少ない案件で開発を見送るべき費用の分岐点

見送るべきなのは、対象が自由曲面の多い一品物で、年に数点しかCAD化しない場合です。この条件では、前述の面張りと設計意図の付与に人手がかかる構造は変わらず、開発しても削れる工数が小さいためです。

判断の目安は、1件あたりのモデリング時間×年間件数と、パイプラインの開発・保守にかかる工数の比較です。手作業が年間で数十時間程度に収まるなら、専用ソフトのライセンスか、モデリングの外注で済ませます。逆に数百時間を超え、しかも形状が定型なら、開発の回収が見込めます。

受託で点群処理を組むときに要件定義で最初に固める精度と出力形式

外部に開発を依頼する場合も、社内で組む場合も、最初に決めるのは次の3点です。許容誤差(壁位置で±1cmか、部品で±0.1mmか)、出力形式(DXFの線か、STEPのソリッドか、IFCのBIMモデルか)、入力の点群の形式と密度です。許容誤差がスキャナーの計測精度より厳しいと、どの処理を組んでも要件を満たせません。

外部に依頼するときは、計測データのサンプルと完成形の見本(既存図面やBIMのテンプレート)を渡し、本記事の工程のどこまでを自動化の対象にするかを最初に合意します。画像認識やデータ処理のアルゴリズム実装と、既存システムへの組み込みをまとめて相談したい場合は、一創のAI受託開発サービスで要件の整理から受け付けています。

点群データのCAD化でよくある質問|ソフト・精度・メッシュの扱い

点群のCAD化を検討する段階で寄せられやすい質問に答えます。

点群データをCAD化するには、どんなソフトが必要ですか?

必要なソフトは、担当する工程ごとに異なる構成です。前処理とメッシュ化はスキャナー付属ソフトか、Open3D・CloudCompareのような無償ツールで足ります。メッシュからCADソリッドを作る工程での選択肢は、リバースエンジニアリング専用ソフトか、メッシュを下絵にしてCAD上で作図し直す方法です。プラントや鉄骨なら、配管・鋼材の自動モデリングをうたう専用ソフトもあります。まずは出力したいデータ(線か、ソリッドか、BIMか)を決めてから選ぶと、ソフトの過不足が出ません。

点群からCAD化したデータの精度はどれくらいになりますか?

計測機器の精度が上限です。そのうえで、間引きの格子幅、RANSACの距離のしきい値、面フィッティングの誤差がそれぞれ上乗せされます。たとえば1cm格子で間引いた点群から壁線を引けば、壁位置の精度も1cm程度より細かくはなりません。スナップや切断を繰り返すと小さなずれが積み重なるので、最終データは元の点群と重ねて差分を確認する工程を入れます。

点群から作ったメッシュはそのままCAE解析に使えますか?

スキャンから作ったメッシュは三角形の大きさが不揃いで、穴や自己交差が残ることが多いため、そのまま構造解析や流体解析の格子には使えません。解析用には、CADソリッドに起こしてから解析ソフトで格子を切り直すのが一般的です。CADと解析の役割分担はCAEの解析種別とCAD・CAMとの役割分担を解説した記事を参照してください。

写真や画像だけでも3Dモデルを作れますか?

作れます。複数の写真から点群を作るフォトグラメトリのほか、1枚の画像から3Dメッシュを生成するAIモデルも公開されています。ただし後者は形状を推定で補うため、寸法の正しさは保証されません。仕組みと商用条件は画像から3Dメッシュを作るSPAR3Dの記事で扱っています。寸法が要るCAD化には、レーザーや構造化光で実測した点群を使います。

点群データのCAD化を外注するときの費用は何で決まりますか?

費用を主に左右するのは、対象の大きさと複雑さ、求める精度、出力形式の3つです。同じ建物でも、壁の位置を線で起こすだけの平面図と、開口や設備まで属性を持たせたBIMモデルでは作業量が大きく違います。見積もりを取る前に、点群のサンプルと、完成データのイメージ(既存の図面テンプレートなど)を用意しておくと、作業範囲のずれによる追加費用を防げます。

関連記事

お気に入りに入れた記事の一覧

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.23 テックブログ Renta!不正アクセスでサービス停止:再開未定の現状と運営側の停止判断・証拠保全・段階的再開
  2. 2025.01.09 コラム アドレサブルCM(Addressable CM)とは?フジテレビで出る表示の意味・仕組みと視聴データの扱い
  3. 2026.10.21 テックブログ ふるさとチョイス不正アクセスで445万件流出:対象確認・パスワード変更と再開時期
  4. 2026.07.09 テックブログ Muse Imageとは?Metaの画像生成AIの使い方・API料金(1枚0.01ドル)と日本での提供状況【2026年10月】
  5. 2025.12.10 コラム 今の50代は何世代?バブル世代・団塊ジュニア・氷河期の境目と特徴

RELATED POSTS 関連記事

目次