← プロジェクト一覧へ戻る解説ブラウザ内で表示(外部送信なし)

計算方法

このアプリが表示する数値の計算式・前提・閾値・バージョンの一覧です。 式の一覧は計算エンジンの Formula Registry から生成しているため、実装と食い違いません。個々のカメラの実際の入力値でのトレースは、ワークスペースでカメラを選択し 「計算根拠を表示」から確認できます。

バージョン

アプリ
0.1.0
計算エンジン
0.1.0
ルールセット
0.1.0
評価プロファイル
0.1.0
データスキーマ
1

レポートにも同じバージョンが記録されます。式を変更した場合は式バージョンが上がり、 過去のレポートがどの版で計算されたか追えます。

閾値・仮設定値(ASSUMED)

以下は実機 PoC 前の仮設定値です。物理的に決まる値ではなく、 校正前の暫定値であることを前提に読んでください(変更禁止原則 §8-10 により、 これらはコードの一箇所にまとめてあり、画面へ直接書き込んでいません)。

項目使いどころ
要求画素密度(既定)100 px/mゾーンに個別指定がない場合のカバレッジ判定基準
品質プリセット「概況把握要求画素密度 ×0.5人の在・不在や重機の動きなど、状況の大枠を掴む用途
品質プリセット「標準要求画素密度 ×1服装・姿勢・保護具の有無など、通常の巡視で確認する水準
品質プリセット「詳細確認要求画素密度 ×2細部の状態や表示の読み取りまで求める用途(高い画素密度が必要)
ゾーン優先度 REQUIRED の要求カバー率95%ゾーン判定(第2段階)の合格ライン
ゾーン優先度 HIGH の要求カバー率80%ゾーン判定(第2段階)の合格ライン
ゾーン優先度 NORMAL の要求カバー率60%ゾーン判定(第2段階)の合格ライン
ゾーン優先度 LOW の要求カバー率30%ゾーン判定(第2段階)の合格ライン
取付「単管パイプ」の推奨高さ1.54 m仮設の単管足場パイプ。控え・根がらみなしで安定して立てられる高さの目安(警告のみ・判定には使わない)
取付「専用ポール」の推奨高さ26 mカメラ専用の自立ポール・基礎付きポール(警告のみ・判定には使わない)
取付「フェンス」の推奨高さ1.22.2 m仮囲い・フェンス上部への取付。フェンス高さに依存(警告のみ・判定には使わない)
取付「建物壁面(低層)」の推奨高さ2.56 m既存建物・現場事務所の壁面ブラケット(警告のみ・判定には使わない)
取付「建物上層階・屋上」の推奨高さ630 m上層階の壁面・屋上パラペット等。俯瞰配置向け(階高は現場により異なる)(警告のみ・判定には使わない)
PTZ ズーム遷移時間(非公表時)5カタログ非公表機種の補完値。現行の静的評価では未使用
プリセット公称 HFOV の許容ずれ±3°カメラプリセット登録時の検算(超えると警告)
カバレッジのサンプル上限4000格子間隔の自動決定(0.5 / 1 / 2 / 4 m から選択)

2D カバレッジの前提

これらは評価エンジンが返す前提そのもので、レポートにも同じ内容が記録されます。

計算式一覧(17 件)

Formula Registry から生成。各式の ID はレポートやトレース表示に現れる識別子と同じです。

画角

センサー実寸と焦点距離から決まる画角。歪みのないピンホールモデルで、レンズ歪みは含みません。

水平画角CAMERA_HFOV

HFOV = 2 × atan(Sw / (2f))

入力
sensorWidthMm, focalLengthMm
出力
hfovRad
前提
歪みのないピンホールカメラモデル
実装
computeFov() / 式 v0.1.0
垂直画角CAMERA_VFOV

VFOV = 2 × atan(Sh / (2f))

入力
sensorHeightMm, focalLengthMm
出力
vfovRad
前提
歪みのないピンホールカメラモデル
実装
computeFov() / 式 v0.1.0
対角画角CAMERA_DFOV

DFOV = 2 × atan(sqrt(Sw² + Sh²) / (2f))

入力
sensorWidthMm, sensorHeightMm, focalLengthMm
出力
dfovRad
前提
歪みのないピンホールカメラモデル
実装
computeFov() / 式 v0.1.0

距離ごとの撮影範囲

光軸に垂直な平面での撮影幅・高さ。3D 空間全体で一定の値ではありません。

距離ごとの撮影範囲VIEW_WIDTH_AT_DISTANCE

Width = 2Z × tan(HFOV / 2), Height = 2Z × tan(VFOV / 2)

入力
hfovRad, vfovRad, distanceM
出力
widthM, heightM
前提
光軸に垂直な平面上の値であり、3D空間全体で一定ではない
実装
computeFootprintAtDistance() / 式 v0.1.0

画素単位焦点距離

実距離と画素数を結ぶ量。品質判定では Stream 解像度で計算した fx を使います(配信で失われた画素は戻らないため)。

画素単位焦点距離(水平)FOCAL_LENGTH_PX_X

fx = Nx × f / Sw

入力
resolutionXPx, focalLengthMm, sensorWidthMm
出力
fxPx, cxPx
前提
主点は画像中心とする
実装
computeIntrinsics() / 式 v0.1.0
画素単位焦点距離(垂直)FOCAL_LENGTH_PX_Y

fy = Ny × f / Sh

入力
resolutionYPx, focalLengthMm, sensorHeightMm
出力
fyPx, cyPx
前提
主点は画像中心とする
実装
computeIntrinsics() / 式 v0.1.0

画素密度と判定距離

2D カバレッジの塗り分け・判定の中核。対象 1m あたり何画素が割り当たるかで判定します。

距離ごとの画素密度PIXEL_DENSITY_AT_DISTANCE

pxPerM = fx / Z(パノラマは pxPerRadian / Z)

入力
fxPx, distanceM
出力
pixelDensityPxPerM
前提
正対近似。斜め視認・遮蔽は含まない / Stream 解像度基準の fx を用いる(デジタルズームは情報画素を増やさない)
実装
computePixelDensityPxPerM() / 式 v0.1.0
要求画素密度を満たす最大距離MAX_DISTANCE_FOR_PIXEL_DENSITY

Zmax = fx × 1m / RequiredPxPerM

入力
fxPx, requiredPxPerM
出力
maximumDistanceM
前提
正対近似。遮蔽・斜め視認は含まない
実装
computeMaxDistanceForPixelDensity() / 式 v0.1.0

対象物の画素数

正対近似による対象幅の画素数。正本は 3D 頂点投影です。

対象物の画素数(正対近似)TARGET_PIXEL_APPROXIMATION

P ≈ fx × L / Z

入力
fxPx, targetWidthM, distanceM
出力
targetWidthPx
前提
正対近似。正本は3D頂点投影(projectPolygon)
実装
approximateTargetWidthPx() / 式 v0.1.0

Sensor → Stream → Display

画素は段階を経るごとに減ることはあっても増えません。デジタルズーム・拡大表示は情報画素を増やさないため評価に使いません。

Sensor→Stream 画素換算STREAM_PIXEL_SCALE

StreamTargetPx = SensorTargetPx × StreamWidth / SensorWidth

入力
sensorTargetPx, sensorResolutionPx, streamResolutionPx
出力
streamTargetWidthPx, streamTargetHeightPx
前提
均等縮小。横・縦は各軸の縮小率で別々に換算する
実装
sensorToStreamPx() / 式 v0.1.0

パノラマ(360度・180度)

パノラマはピンホールの画角ではなく角度あたりの画素数で評価します。切り出しても画素は増えません。

パノラマ画素密度(全周360度の切り出し基準)PANORAMA_PX_PER_DEGREE

pxPerDegree = PanoramaWidthPx / 360

入力
panoramaWidthPx
出力
pxPerDegree
前提
Equirectangular投影の水平方向平均値 / 総幅が360度を覆う前提。切り出し幅の算出に用いる / カバー角が360度でない機種(180度魚眼など)の評価には PANORAMA_ANGULAR_RESOLUTION を使う
実装
computePanoramaCrop() / 式 v0.1.0
パノラマ切り出し幅PANORAMA_CROP_WIDTH

CropWidthPx = pxPerDegree × CropAngleDegree

入力
pxPerDegree, cropFovDeg
出力
cropWidthPx
前提
Seam跨ぎでも有効幅は画角に比例し、画像全幅と誤計算しない
実装
computePanoramaCrop() / 式 v0.1.0
パノラマの角度分解能PANORAMA_ANGULAR_RESOLUTION

pxPerDegree = PanoramaWidthPx / HorizontalCoverageDeg, pxPerRadian = pxPerDegree × 180 / π

入力
panoramaWidthPx, horizontalCoverageDeg
出力
pxPerDegree, pxPerRadian
前提
Equirectangular 投影の水平方向平均値 / 180度は総幅が180度を覆う前提(360で割ると画素密度を2倍に過大評価する)
実装
computePanoramaAngularResolution() / 式 v0.1.0

逆算(必要焦点距離・最大確認距離)

必要な画素数から焦点距離・距離を逆算します。遮蔽・斜め視認は含みません。

必要焦点距離REQUIRED_FOCAL_LENGTH

RequiredFocalLength = RequiredPx × Z × Sw / (Nx × L)

入力
requiredPx, distanceM, sensorWidthMm, resolutionXPx, targetWidthM
出力
requiredFocalLengthMm
前提
正対近似。遮蔽・斜め視認は含まない
実装
computeRequiredFocalLengthMm() / 式 v0.1.0
最大確認距離MAXIMUM_INSPECTION_DISTANCE

MaximumDistance = fx × L / RequiredPx

入力
fxPx, targetWidthM, requiredPx
出力
maximumDistanceM
前提
正対近似。遮蔽・斜め視認は含まない
実装
computeMaximumDistanceM() / 式 v0.1.0

遮蔽

構造物を直方体として扱う安全側の近似で、対象面の可視率を求めます。

遮蔽後可視率VISIBILITY_RATIO

VisibilityRatio = VisibleSamples / TotalValidSamples

入力
visibleSamples, totalSamples
出力
visibilityRatio
前提
遮蔽物は直方体近似 / 対象面のサンプル密度に依存する近似値
実装
computeTargetVisibility() / 式 v0.1.0

ゾーンのカバー率と判定

ゾーン内の格子サンプルのうち要求画素密度を満たす割合。ハードゲート不適合はこの割合で相殺されません。

ゾーンのカバー率と判定ZONE_COVERAGE_RATIO

QualifiedRatio = QualifiedSamples / TotalSamples、適合 = QualifiedRatio ≥ RequiredCoverageRatio

入力
qualifiedSamples, totalSamples, requiredCoverageRatio
出力
qualifiedRatio, zoneResult
前提
上面図(2D)近似。カメラ高さ・pitch・構造物の高さ関係は考慮しない / 優先度別の要求カバー率は実機 PoC 前の仮設定値(ASSUMED) / ハードゲート不適合はカバー率で相殺しない
実装
evaluatePatrolScenario() / 式 v0.1.0

この計算が答えないこと

総合判定は実機 PoC を前提とした「候補」であり、 これだけで導入可否を確定するものではありません。