LRTKレフィクシア株式会社

点群OBJアップロード前に無限大座標を除外する4ステップ

点群OBJアップロード前に無限大座標を除外する理由

点群OBJアップロードで読込エラーが発生したときは、ファイル容量や通信状態だけでなく、頂点座標に非有限値が混入していないか確認する必要があります。非有限値とは、正の無限大、負の無限大、NaNなど、通常の有限な座標として扱えない値です。

見た目には正常な点群であっても、数百万点のうち一つだけ異常な頂点が含まれていることで、アップロード後の解析、表示範囲の計算、縮尺の決定、座標変換、空間分割などが正常に進まない場合があります。読込処理がその場で停止することもあれば、読み込み後の境界計算や描画処理で異常が表面化することもあります。

OBJでは、頂点位置は一般に行頭がvの行に記録されます。たとえばv 123.456 789.012 34.500のように、識別子の後ろへ座標値が並びます。点群用途では主にX、Y、Zの三成分が使われますが、出力元によっては追加成分や頂点色などの属性が付くことがあります。追加項目の解釈は利用環境によって異なるため、検査時には座標三成分と付加属性を混同しないことが重要です。

異常値は、inf、+inf、-inf、Infinity、NaNなどの文字列として記録されることがあります。また、文字列自体は指数表記でも、数値へ変換した結果が処理系の表現範囲を超えて無限大になる場合があります。たとえば極端に大きな指数を持つ値は、使用する数値型や読み込み処理によって、変換エラーになったり無限大として扱われたりする可能性があります。

すべてのOBJ読込処理が同じ反応を示すわけではありません。非有限値を数値として受け付けずエラーを返す処理もあれば、値を保持したまま読み込みを続け、その後の計算で異常になる処理もあります。異常点を無視して表示できた場合でも、変換後の別ファイルや後続処理へ不正値が残る可能性があるため、アップロードできたことだけで安全と判断するのは避けます。

点群OBJアップロード前の検査では、明示的に記録された無限大、数値変換後に生じた無限大、NaN、項目不足、数値として解釈できない文字列を分けて記録します。原因を分類しておけば、不正点を除外するだけでなく、点群生成、座標変換、結合、書き出しといった前工程のどこで問題が起きたかを追跡しやすくなります。

無限大座標が混入する主な原因

点群OBJに無限大座標が混入する原因は、OBJという形式そのものより、書き出し前の計算処理や欠損値処理にあることが少なくありません。

最初に考えられるのは、ゼロまたは極端に小さい値を分母とする計算です。座標変換、投影、正規化などの処理で分母がゼロになった場合、使用する言語、ライブラリ、数値型によってはエラーで停止することもあれば、正負の無限大やNaNが生成されることもあります。ゼロに近い値で除算した結果が非常に大きくなり、その後の計算で数値型の表現範囲を超える場合もあります。

同次座標を三次元座標へ変換する工程や、投影行列を適用する工程でも注意が必要です。補助成分でX、Y、Zを除算する処理において、その成分がゼロまたは計算上不安定な値になると、有限な座標を得られない可能性があります。ただし、OBJの頂点行に追加される値の解釈と、上流工程で使用される同次座標の計算は区別して確認します。

次に考えられるのが、単位や縮尺の誤りです。メートルで管理すべき値をミリメートルとして再変換したり、縮尺係数を複数回適用したりすると、座標の絶対値が急激に大きくなります。その時点では有限値であっても、距離の二乗、行列演算、回転、投影などを経て表現範囲を超える可能性があります。

座標系変換の方向や入力条件を誤った場合にも異常な値が生じます。本来は逆変換に使う式を順変換として使用した場合や、角度を前提とする入力へ平面座標を渡した場合などは、計算式の適用範囲から外れます。処理によっては明確なエラーにならず、極端な有限値、無限大、NaNなどが出力されることがあります。

複数の点群を結合するときは、欠損値の表現にも注意が必要です。あるデータでは欠測点を空欄とし、別のデータでは特定の大きな数値、さらに別のデータではNaNとして管理している場合、統一されないままOBJへ書き出されることがあります。欠損値をゼロとして扱う処理と、変換失敗として扱う処理が混在すると、同じ入力でも処理経路によって結果が変わる可能性があります。

未初期化の変数や、変換失敗時の値の再利用が原因になるケースもあります。座標を格納する領域を確保した後、すべての成分を代入する前に出力すると、予期しない値が残るおそれがあります。変換に失敗した点へ直前の正常点や中間計算値を流用する実装も、異常点を発生させる原因になります。

近傍点、法線、曲率、平均距離などを求める処理でも、必要な点数が不足している場合や近傍距離がゼロになる場合に、計算結果を定義できないことがあります。異常点を除去するための前処理が、別の非有限値を作ってしまう可能性もあるため、各計算段階で有限値判定を行うことが望まれます。

原因を直ちに特定できない場合でも、公開用またはアップロード用ファイルの検査は省略できません。原因調査と配布ファイルの安全確認を分け、まず非有限値を含まないファイルを作成します。そのうえで、除外ログ、元データ、処理条件を使って発生工程を調査する流れが実務的です。

ステップ1 元ファイルを保全し検査条件を決める

最初のステップは、元のOBJファイルを直接編集せず、原本、検査用複製、処理後ファイルを分けることです。点群OBJは行数が多く、手作業で上書きすると元の状態へ戻すことが難しくなるため、検査前の保全が欠かせません。

原本は読み取り専用として残し、複製したファイルに対して検査と除外を行います。ファイル名には、取得日、対象範囲、座標系、処理段階、版など、後から識別できる情報を含めます。ただし、条件をファイル名だけで管理せず、原本名、複製名、処理日時、使用した検査条件、処理結果を別の作業記録にも残します。

次に、OBJ内に含まれる行の種類を確認します。頂点位置を表すvのほか、テクスチャ座標のvt、法線のvn、パラメータ空間の頂点を表すvp、面のf、線のl、点要素のpなどが記録されている場合があります。点群として頂点行だけを利用しているOBJと、面や線が頂点番号を参照しているOBJでは、不正頂点を除外した後の処理が異なります。

ここで重要なのは、非有限値判定と、異常に大きい有限値の判定を分けることです。無限大やNaNは有限な座標として使用できないため、原則として正常点から除外します。一方、絶対値が大きい有限座標は、必ずしも誤りとは限りません。原点から離れた座標系や大きなオフセットを使用していれば、正常な座標でも桁が大きくなる場合があります。

有限値の範囲検査には、対象業務の条件を反映させます。想定するX、Y、Zの範囲、点群の幅、奥行き、高さ、座標単位、基準点との位置関係を整理し、必要な余裕を持たせた判定範囲を定めます。全国一律の固定値で異常と判断するのではなく、座標系と現場範囲を確認したうえで基準を設定します。

検査結果として記録する項目も事前に決めます。元の行番号、頂点番号、行の種類、異常があった成分、元の文字列、判定理由を残すと、後工程で原因を追いやすくなります。Xが正の無限大だったのか、ZがNaNだったのか、項目数が不足していたのか、数値変換自体に失敗したのかを区別します。

除外点の件数だけでなく、正常点数に対する除外率も確認します。100万点中の1点と、1000点中の300点では、同じ対応を取るべきではありません。異常の割合が大きい場合は、個別点を削除して処理を続けるより、座標変換条件や書き出し設定を見直す必要があります。

自動処理を行う場合は、中止条件も決めます。非有限値が設定した割合を超えた場合、特定区間へ集中している場合、基準点や構造物端部など重要な場所に異常がある場合は、機械的な除外を続けず前工程へ戻します。固定割合だけでなく、異常点の位置と用途も含めて判断することが大切です。

ステップ2 OBJの座標値を有限値として検査する

二つ目のステップでは、OBJの頂点行を識別し、座標文字列を実際に数値へ変換して有限値かどうかを検査します。文字列検索だけでは、表記の違いや、変換後に無限大となる値を見逃す可能性があります。

行を解析するときは、行頭の識別子が正確にvであることを確認します。vn、vt、vpは別の種類のデータであり、単純な前方一致で頂点位置として処理すると誤判定につながります。コメント行や空行も座標検査の対象から外します。

各座標文字列は、空白やタブを区切りとして項目へ分解し、X、Y、Zに相当する値を数値へ変換します。項目数が足りない行、途中で切れている行、数値以外の文字が混入した行は、無限大とは別の書式異常として記録します。追加属性がある場合は、座標三成分を確認したうえで、出力先が必要とする形式に応じて保持方法を決めます。

数値へ変換できた後は、X、Y、Zのすべてが有限値であることを確認します。一つでも正の無限大、負の無限大、NaNであれば、その頂点全体を不正点として扱います。NaNは通常の大小比較だけでは検出しにくいため、有限値を直接判定する処理を使用します。

inf、+inf、-inf、infinity、nanなどの文字列を受け付けるかどうかは処理系によって異なります。大文字と小文字の扱いも同一とは限りません。そのため、特定の文字列一覧だけへ依存せず、数値変換の成否と変換後の有限性の両方を確認します。

Xだけが無限大だからといって、その成分だけをゼロへ置き換え、YとZを残す修正は避けます。三次元点は三成分の組み合わせで位置を表すため、一成分だけを補うと観測されていない架空の位置へ点を移すことになります。

反対に、値が非常に小さいという理由だけで削除する必要はありません。有限値であり、対象業務の必要精度と座標条件に合っていれば、ゼロ付近の座標も正常です。非有限値検査では値の大小ではなく、有限な数値として扱えるかを判定します。

有限値判定に合格した後は、別工程として範囲検査を行います。点群全体のX、Y、Zについて最小値と最大値を求め、想定範囲と比較します。この計算は、非有限値を除外した正常点だけで行います。無限大を含めたまま境界を計算すると、範囲そのものが意味を持たなくなる場合があります。

点群の中心位置、幅、奥行き、高さも確認します。大部分の点が数十メートル程度の範囲にある一方、一点だけ極端に離れている場合、その点は有限値でも異常の可能性があります。ただし、機械的に削除せず、座標系、単位、原点、元データ、現場範囲と照合して判断します。

Zだけが大きく外れている場合は、高さ単位、基準面、符号、オフセットなどを確認します。XとYが同じ値で大量に繰り返されている場合は、変換失敗時の既定値が出力されていないか調べます。すべてゼロの点は正常な原点である可能性もありますが、大量に集中している場合は欠測値の置換処理を疑います。

大容量ファイルでは、全行を一度にメモリへ読み込まず、行単位で処理する方法が適しています。各行を読みながら、頂点数、正常点数、非有限点数、書式異常数、有限値の座標範囲を更新すれば、必要な記憶領域を抑えられます。

ただし、面や線の参照を再構成する場合は、旧頂点番号と新頂点番号の対応情報が必要です。ファイル全体の文字列を保持する必要はありませんが、各頂点の採用可否と番号対応を後から参照できる設計にします。

異常の分布も確認します。連続した頂点番号へ集中している場合は、特定の取得区間や変換単位で処理が失敗した可能性があります。ファイル全体へ散在している場合は、個別点の計算条件や欠測処理に原因があるかもしれません。行番号と頂点番号の両方を記録すると、元データとの照合がしやすくなります。

ステップ3 不正点を除外し参照関係を再構成する

三つ目のステップでは、検査で不正と判定した頂点を除外し、OBJとして矛盾のない状態へ再構成します。基本方針は、不正値を任意の座標へ置き換えるのではなく、頂点単位で除外し、その事実を記録することです。

無限大のXだけをゼロに変更すると、YとZを保ったまま点がX方向の原点付近へ移動します。その点は実測位置ではなく、修正処理によって作られた架空の点です。表示時に筋状のノイズや孤立点となるほか、面生成、断面、距離、面積、体積などの計算へ影響する可能性があります。

極端に大きな有限値へ置き換える方法も適切ではありません。読込時のエラーを避けられたとしても、点群全体の表示範囲が広がり、正常な範囲が画面上で極端に小さく表示されることがあります。空間分割、近遠クリッピング、中心位置の計算などへ影響する可能性もあります。

不正点の近傍から座標を推定する方法は、形式修復とは別の品質管理工程として扱います。地表面の連続性、補間方法、許容誤差、生成点の識別方法が定められている場合は補完できることもあります。しかし、アップロードを通すためだけに近傍平均へ置き換えると、観測点と補間点の区別が失われます。単純な修復では不正点を除外し、欠損の影響を別途評価する方が安全です。

頂点位置だけで構成され、面、線、点要素の参照行がないOBJであれば、正常なv行だけを新しいファイルへ出力できます。ただし、ファイル後半に参照行が存在しないか、ファイル全体を確認してから判断します。

面や線を含むOBJでは、頂点行を削除するだけでは不十分です。OBJの参照番号は、頂点の並び順に対応します。途中の頂点を一つ削除すると、それ以降の番号が変わるため、旧頂点番号から新頂点番号への対応表を作り、参照行を書き換える必要があります。除外された頂点には新番号を割り当てません。

たとえば、旧頂点4が新頂点3へ変わった場合、旧番号4を参照していた面や線は新番号3を参照するよう変換します。一方、除外された頂点を参照している要素は、そのまま出力できません。

不正頂点を含む面について、一つの参照だけを取り除いて残す方法は慎重に扱います。四角形から一頂点を除いて三角形にすると、形状や面の分割方法が変わる可能性があります。三角形から一頂点を除けば、面として成立しません。原則として、不正頂点を参照する面全体を除外し、必要であれば正常な元データから再生成します。

線も同様です。連続線から不正頂点の番号だけを削除すると、本来つながっていなかった離れた頂点同士が直接接続される可能性があります。線を分割するのか、線要素全体を除外するのかを、形状の意味に応じて決めます。

面の参照では、位置頂点、テクスチャ座標、法線を別々の番号で指定する場合があります。v/vt/vnのような組み合わせでは、位置頂点を削除しても、テクスチャ座標番号や法線番号まで同じ規則でずらしてはいけません。削除した配列ごとに対応表を分け、各参照を正しく書き換えます。

法線やテクスチャ座標にも非有限値がある場合は、それらを参照する要素の扱いを決めます。不要な属性を外して位置情報だけを残せる場合もありますが、出力先がその記述を受け付けるか確認が必要です。判断が難しい場合は、対応する読み書き処理を使って形状を再出力し、参照関係を再構築します。

負の参照番号にも注意が必要です。OBJの負の番号は、記述位置までに定義された要素を基準とする相対参照として使われます。頂点を削除すると相対関係が変わるため、解析時に参照先を旧来の絶対番号へ解決し、その後で新番号へ変換する方法が分かりやすくなります。

処理後は、元の頂点数、正常頂点数、除外頂点数、書式異常行数、削除した面数、線数などを記録します。点数の差を説明できることが重要です。元ファイルに100万点あり、非有限値を10点だけ除外したのであれば、ほかの処理を行っていない限り、処理後の頂点数は99万9990点になるはずです。差が合わない場合は、書式異常や別の除去処理が同時に適用されていないか確認します。

詳細な異常内容は別のログファイルへ保存する方法が無難です。OBJ内のコメントとして記録することもできますが、利用環境によってコメントの扱いが異なる可能性があります。公開用OBJには必要な幾何情報を残し、詳細な処理履歴は内部記録として管理します。

ステップ4 再検査して小規模アップロードで確認する

四つ目のステップでは、修正後のOBJを最初から再検査します。不正頂点を除外できたとしても、番号の書き換えミス、行の欠落、出力途中の停止、文字コードや改行の変化など、新しい問題が発生している可能性があります。

最初に、座標三成分の非有限値がゼロ件になっていることを確認します。座標を再計算せず転記する処理でも、数値の整形や変換を行っていれば、意図しない値が生成される可能性があります。頂点位置だけでなく、利用する法線やテクスチャ座標も必要に応じて検査します。

次に、すべての頂点行へ必要な項目がそろっているか確認します。空欄、途中で切れた行、数値以外の文字、想定外の項目数がないかを調べます。大容量ファイルの出力が途中で停止した場合、ファイル末尾の行が不完全な状態で残ることがあるため、正常終了の記録と末尾の状態も確認します。

面や線がある場合は、参照番号が存在する範囲に収まっているか検査します。頂点数が50万点であるのに、50万1番を参照する要素があれば不整合です。OBJで通常使用されないゼロ番が含まれていないか、相対参照を正しく解決できるかも確認します。

面を構成する参照数も調べます。頂点除外後に面として成立しない数になっていないか、同じ位置頂点が一つの面内で意図せず重複していないかを確認します。面の縮退や重複は、番号変換の誤りや頂点統合の影響で生じる場合があります。

修正後点群のX、Y、Zの最小値と最大値、幅、奥行き、高さ、中心位置も計算します。元ファイルの正常点だけから求めた範囲と比較し、非有限値を除外したことで想定した範囲になっているか、必要な領域まで失われていないかを確認します。

除外点の空間的な分布も重要です。除外率が小さくても、構造物の角、地形の端部、基準点付近などへ集中していれば、業務への影響が大きくなることがあります。件数だけで品質を判断せず、欠損した位置と利用目的を確認します。

本番ファイルをアップロードする前に、同じ記述構造を持つ小規模な確認用ファイルを作成すると、基本的な形式対応を確認しやすくなります。面や線がある場合は、参照関係が完結する範囲を抽出します。頂点行だけを先頭から切り出すと、後続の参照行が成立しないことがあります。

小規模アップロードでは、アップロード完了の有無だけでなく、表示位置、縮尺、上下方向、点数、色や属性、面の接続状態、エラー表示などを確認します。アップロードできても、点群が想定位置から大きく離れていたり、高さ方向が反転していたりすれば、別の座標問題が残っています。

ただし、小規模ファイルの成功だけで本番ファイルの成功を保証することはできません。ファイル容量、総頂点数、処理時間、保存領域など、本番規模でのみ現れる問題があるためです。小規模アップロードは形式と基本表示の確認として使い、本番ファイル自体の再検査も省略しません。

確認用ファイルが正常に処理された後、本番ファイルをアップロードします。処理中にファイルを変更せず、版を識別できる名称を使用します。同名の旧ファイルが残っている場合は、アップロード対象を取り違えないように管理します。

エラーが出た場合は、同じファイルを繰り返し送る前に、発生段階を切り分けます。送信途中、送信後の解析、変換、表示のどこで停止したかによって、通信、容量、構文、座標、参照関係など、確認すべき項目が異なります。

除外時に避けたい危険な修正

無限大座標を見つけたときに避けたいのは、すべてをゼロへ一括置換する方法です。数値として読み込める形になっても、不正点が原点や座標軸付近へ集まり、実在しない高密度な点の塊を作る可能性があります。

点群から面を生成すると、正常な現場範囲と原点付近の不正点を結ぶ長い三角形が作られることがあります。体積、表面積、断面、距離などの結果にも影響するため、表示上の小さなノイズとして軽視できません。

一つ前の正常座標を複製する方法も避けます。同じ位置へ複数の点が重なり、点密度、重複判定、近傍計算などへ影響するからです。異常点が連続していれば、同じ座標が大量に複製される可能性があります。

座標成分を文字列検索し、該当する行を無条件に削除する方法にも限界があります。コメント、グループ名、外部参照名などに同じ文字列が含まれる可能性があります。また、文字列としては通常の指数表記でも、数値変換後に表現範囲を超えるケースは単純検索だけでは判定できません。

OBJの頂点行だけを削除し、面や線の番号をそのまま残す方法は形状破損につながります。番号範囲外としてエラーになることもあれば、番号のずれによって別の頂点を参照し、誤った形状が表示されることもあります。読込エラーが出ないことは、形状が正しいことを意味しません。

除外記録を残さず原本へ上書きすることも危険です。後から欠損が見つかっても、どの点を何の理由で削除したか確認できません。原本、処理後ファイル、除外ログを分け、処理を再現できる状態にします。

異常点の割合が大きいのに除外を続ける方法も適切ではありません。大量の頂点が非有限値になっている場合は、個別点の問題ではなく、座標変換やデータ生成全体が失敗している可能性があります。ファイルを開ける状態にできても、必要な範囲を大きく失っていれば業務には使用できません。

固定した座標上限をすべての現場へ適用する方法にも注意が必要です。対象地域、座標系、単位、原点によって正常な値の桁は異なります。有限値の範囲検査では、対象データの設計条件と現場条件を基準にします。

一方、座標範囲が分からないことを理由に、非有限値検査まで省略してはいけません。無限大とNaNの検出は、現場の座標範囲が未確定でも実施できます。非有限値の検査と、業務上の範囲検査を分けて進めることが重要です。

大容量点群で検査を自動化する考え方

点群OBJの頂点数が多い場合、目視や一般的なテキスト編集だけで無限大座標を探すのは現実的ではありません。数百万行あるファイルでは、開くだけで時間がかかるほか、編集時に行が欠落したり、保存形式や改行が変わったりする可能性があります。

自動検査では、入力、解析、判定、出力、記録の役割を分けます。入力処理は原本を行単位で読み込みます。解析処理は行頭の識別子と各項目を分けます。判定処理は項目数、数値変換、有限値、想定範囲を確認します。出力処理は正常な要素を新しいファイルへ書き込み、記録処理は異常行と集計結果を残します。

面や線を含む場合は、頂点の採用可否と番号対応を確定した後、参照行を書き換える二段階処理が分かりやすくなります。一度目の読み込みで頂点を検査して対応表を作り、二度目の読み込みで各行を変換しながら出力します。

点だけのOBJで参照要素が存在しなければ、一度の読み込みで正常頂点を出力する方法もあります。ただし、ファイル後半へ面、線、点要素が記録されていないか確認します。冒頭の数行だけで構成を判断しないことが大切です。

自動処理には、異常件数や異常率が設定値を超えた場合に処理を中止する仕組みを設けます。中止条件がなければ、ほとんどの点が異常であっても、わずかな正常点だけで修正済みファイルが作られてしまいます。異常が特定範囲へ集中している場合にも警告または中止できると、重要箇所の欠損を見逃しにくくなります。

処理終了時には、正常終了したことを確認できる記録を残します。入力途中の読込エラー、出力先の容量不足、権限不足などが起きると、不完全なファイルが残る場合があります。一時ファイルとして出力し、すべての検査に合格してから正式なファイル名へ切り替える方法も有効です。

原本を識別できる情報も記録します。同じ名前のOBJが複数ある場合、どの原本を処理したか分からなくなることがあります。ファイル容量、更新日時、内容から計算した識別値などを処理履歴と対応させると、取り違えの防止に役立ちます。

検査処理は、実際に使用するアップロード環境の数値形式やOBJ対応範囲も考慮します。ある読込処理では受け付ける指数表記や付加属性が、別の処理ではエラーになることがあります。修正後の出力では、必要な精度を維持しながら、利用環境が解釈しやすい一般的な数値表記へ統一します。

小数点以下の桁数を変える場合は、必要精度を確認します。非有限値の除外と同時に過度な丸めを行うと、正常な点の位置まで変化します。形式修復では元の有限値をできるだけ維持し、座標の丸め、間引き、軽量化は別工程として管理します。

自動化後も、初期段階では原本と処理後ファイルを比較します。正常点の値が変わっていないか、コメントやグループ情報が意図せず失われていないか、面や線の参照番号が正しく変換されているかを確認します。

運用上は、正常終了、警告終了、処理中止を区別すると判断しやすくなります。非有限値がなく範囲も想定内であれば正常終了、少数の不正点を除外した場合は警告終了、異常率が高い場合や参照関係を安全に再構成できない場合は処理中止とするなど、判定条件を明文化します。

アップロード後の品質確認

無限大座標を除外してアップロードが完了しても、品質確認は必要です。アップロード成功は、点群が業務に使用できる品質であることを保証するものではありません。

最初に、点群全体が想定した位置に表示されているか確認します。座標原点付近に不自然な点の塊がないか、正常な点群から遠く離れた孤立点がないかを見ます。無限大をゼロへ置き換えた点が残っていれば、原点付近へ直線状または塊状のノイズが現れる場合があります。

次に、高さ方向を確認します。上下が反転していないか、地表と構造物の位置関係が正しいか、想定外の高低差がないかを確認します。非有限値を除外できていても、単位、符号、基準面、オフセットなどの誤りが残っている可能性があります。

点数を確認できる環境では、処理後OBJの頂点数とアップロード後の点数を比較します。アップロード先で重複点、孤立点、使用されていない頂点などが処理される場合もあるため、常に完全一致するとは限りません。しかし、大きな差がある場合は、仕様による変換なのか、読込漏れなのかを確認します。

点群の端部や重要箇所も拡大します。全体表示では分からない小さな欠損でも、施工位置、構造物の角、地形の変化点、基準となる場所にあれば影響が大きくなります。

複数の点群や既存図面と重ねる場合は、既知点や明確な地物で位置関係を照合します。無限大座標がなくても、座標系、単位、原点、軸方向が異なれば正しく重なりません。表示できたことだけで座標が正しいと判断しないことが大切です。

アップロード後に点群から面、断面、距離、面積、体積などを求める場合は、その結果も確認します。不正点の除外箇所に大きな穴が生じていないか、離れた点を結ぶ不自然な面が作られていないかを見ます。面を含むOBJを修正した場合は、面の向き、法線、接続状態も確認します。

除外点が重要範囲へ集中している場合は、元の計測データや中間データから再生成します。アップロードを成功させるために点を除外することと、業務に必要な点群品質を確保することは別の課題です。欠損が許容できなければ、除外済みファイルを最終成果として使用しない判断も必要です。

まとめ

点群OBJアップロード前に無限大座標を除外するには、特定の文字列を検索して置き換えるだけでは不十分です。OBJ内の頂点座標を実際に数値へ変換し、正の無限大、負の無限大、NaN、数値変換エラー、項目不足を区別して検出します。

最初に元ファイルを保全し、頂点だけのOBJなのか、面や線などの参照要素を含むOBJなのかを確認します。次に、各座標を数値へ変換して有限値判定を行い、非有限値と異常に大きい有限値を分けて扱います。

不正点はゼロや直前の座標へ安易に置き換えず、原則として頂点単位で除外します。面や線を含む場合は、旧頂点番号と新頂点番号の対応表を作り、参照関係も再構成します。不正頂点を参照する要素は、形状の意味を確認したうえで除外または再生成します。

修正後は、非有限値、行の書式、頂点数、参照番号、座標範囲を再検査します。同じ構造を持つ小規模な確認用ファイルで基本的な読込結果を確認し、その後に本番ファイルをアップロードします。ただし、小規模ファイルの成功だけに頼らず、本番ファイル自体の完全性も確認します。

無限大座標の除外は、アップロードエラーを回避するだけの作業ではありません。異常点が後工程へ流れ、表示範囲、面生成、距離、断面、面積、体積などへ影響することを防ぐ品質管理です。除外件数、位置、原因を記録し、異常が多い場合は前工程の座標変換や書き出し条件まで見直します。

現場で取得した点群を安定して共有し、確認や記録へつなげるには、取得、変換、書き出し、検査、アップロードを一つの工程として管理する必要があります。LRTK Phoneを含む利用環境へ点群データを取り込む場合も、利用する機能の対応形式、座標条件、ファイル上限などを事前に確認したうえで、安全なOBJを準備することが大切です。

現場を3Dで残して、あとから測る。
実際の画面と動画で使い方を確認できます。

LRTK Phoneの使い方・実例を見る
資料請求導入相談
現場をスマホで3DスキャンLRTK Phone実例を見る