ブログ名

【第5回】簡易体積算出アルゴリズム 幾何学的算出での実装3

チェスボードの座標の間隔による座標統合について

まず、物体の各辺を知るためには、チェスボードの頂点間の分布を確認する必要があります。
そこで、チェスボード全ての点間距離を求めるのではなく、2辺を切り出して点間距離を計算します。
以下に、csvを読み取って、その座標から頂点間距離を計算するプログラムを示します。

python
import cv2
import matplotlib.pyplot as plt
import numpy as np
import csv
import math

def distance(value):
    return math.sqrt(int(value[0])*int(value[0])+int(value[1])*int(value[1]))

csv_name = "IMG_7112_corner_dot.csv"

corner_dot = np.loadtxt('csv/'+csv_name, delimiter=',', dtype='float')
print(corner_dot)

extract_col = [12,13,14,15,16,17]
extract_row = [12,6,0]

distance_col = []
distance_row = []
for i in range(len(extract_col)-1):
    dist = distance(corner_dot[extract_col[i+1]]-corner_dot[extract_col[i]])
    distance_col.append(dist)

print(distance_col)

for i in range(len(extract_row)-1):
    dist = distance(corner_dot[extract_row[i+1]]-corner_dot[extract_row[i]])
    distance_row.append(dist)

print(distance_row)

次に、簡易に計算するために傾きと奥行き情報を無視し、手作業で各家電の辺と最も近いチェスボートの辺を比較して線形的に家電の辺をExcelを用いて推定しました。
推定方法は下記です。

  1. 高さ,幅に最も近いチェスボードの長さ(pixel)と選択した家電の幅の長さ(pixel)を取得
  2. チェスボードの長さは実際の長さ(mm)と対応しているため、(家電の幅の長さ) * (チェスボードの実際の長さ) / (チェスボードの長さ)のように算出

算出の結果、幅が630 mm、高さが1187 mmで、幅と高さの誤差の比率はそれぞれ7.9 %と35 %でした。
これに奥行きの情報を付与することにより大きな改善が見込まれます。

奥行きの算出

奥行きを算出したいところですが、対応するチェスボートの辺はありません。
そこで、チェスボートの斜めの点間距離群をもとに算出します。
算出方法は下記です。

  1. 奥行きと最も近い辺をチェスボードから選択し、その長さ(pixel)を算出
  2. 幅と奥行がほぼ同一なため、そこから比率を求めて1と同じように算出

算出の結果、奥行きは7.7 %の誤差で、総面積の誤差率は39 %となってしまいました。
これは前回のBBからの体積と同程度の誤差率です。
基準物体の既知長殻の奥行きの歪みの考慮をもっと厳密に行わなければならないと考えられますので、別の手法を検討しなければなりません。

次回の予定

これまでの試行錯誤から、次に検証する方法としては、チェスボードと立方体を組み合わせが良いのではないか考えられます。 次回はこの立方体チェスボードを作成して検証を行います。


次の記事へ

前の記事へ 戻る