①任意の領域でエッジを取得しエッジの最右の座標を計測し、②別の任意の領域でエッジを取得して最左の座標を取得して、①②間の座標の長さを計測してその長さで判定するみたいなことは可能でしょうか?
もしくは任意の2点間の長さの測長みたいな機能はありますでしょうか?
分かりづらい説明で申し訳ございませんが、よろしくお願いいたします。
①任意の領域でエッジを取得しエッジの最右の座標を計測し、②別の任意の領域でエッジを取得して最左の座標を取得して、①②間の座標の長さを計測してその長さで判定するみたいなことは可能でしょうか?
もしくは任意の2点間の長さの測長みたいな機能はありますでしょうか?
分かりづらい説明で申し訳ございませんが、よろしくお願いいたします。
以下の機能で2点間の距離を求めることが出来ます。
スクリプト検査機能
白と茶の錠剤の距離を検査する例を作ってみました。
入力画像
タスクコネクション
白検出結果
茶検出結果
ランタイム評価画面からスクリプトタスクを有効にして以下のスクリプトを記述
例:白と茶の錠剤の距離を検査するスクリプト
// 検査をしない場合はnull 条件に一致する場合はtrue 条件に一致しない場合はfalse
bool? result = null;
// 白検出で得られた検査を通過したブロブリスト
var whiteBlobs = GetInspectedBlobs("白");
// 茶検出で得られた検査を通過したブロブリスト
var BrownBlobs = GetInspectedBlobs("茶");
// ブロブが存在する場合
if (whiteBlobs?.Any() == true && BrownBlobs?.Any() == true)
{
// 白錠剤のブロブ
var whiteBlob = whiteBlobs.First();
// 茶錠剤のブロブ
var brownBlob = BrownBlobs.First();
// 白錠剤の重心座標
var whitePoint = CreatePointD(whiteBlob.Centroid.X, whiteBlob.Centroid.Y);
// 茶錠剤の重心座標
var brownPoint = CreatePointD(brownBlob.Centroid.X, brownBlob.Centroid.Y);
// 白と茶の重心座標ペア
var pointPair = CreatePointPair(whitePoint, brownPoint);
// 表示
AddPointPair("白と茶", pointPair);
// 検査
if (pointPair.Distance >= 50)
{
result = true;
}
else
{
result = false;
}
}
// resultは必ず最後の行に記述してください
result
すると以下の画像のような結果が得られました。
今回の設定では距離が50pixel以上離れていると異常としました。
ちょっとコードを書かないといけないですが、
スクリプトタスクでは複数のタスクの結果にアクセスして、
自由度の高い検査が記述できます。
コードの例はご質問頂ければ記載できるので、是非ご相談ください。
短時間でコードまで書いて頂き、ありがとうございます。
参考にさせて頂きます。
何度もすみません、スクリプトに用いることができる関数等のAPIは公開されているのでしょうか?
よろしくお願いいたします。
以下のトピックの私のコメントにある「IF仕様書_MENOU-TE_スクリプト検査設定_v1.0.1.pdf」になります。
スクリプト検査機能