領域検出での面積閾値について

以下のように閾値を設定して、面積が
92 <= (面積) <= 2304
となる領域のみを検出したいのですが、このまま検出を行うと92以上のものだけが検出され、2304以下という条件が反映されていませんでした。
この閾値設定の使用方法が誤っているのかと思っているのですが、正しい方法をご教示いただけると幸いです。

よろしくお願いします。

「いいね!」 1

投稿ありがとうございます!

お手数ですが動作確認のため
ご使用になられているMENOU-TEのバージョン情報を教えて頂くことは可能でしょうか?

よろしくお願いいたします。

「いいね!」 1

ver.1.19.102.0です。よろしくお願いいたします。

バージョン情報ありがとうございます。
投稿頂いたスクリーンショットを拝見するに、設定条件は合っていると考えられます。

度々申し訳ございませんが、もし可能でしたら動作確認用として今回の現象が発生したワークスペースを送付頂くことは可能でしょうか?(また合わせて閾値設定が上手くいかなかった画像名もご連絡頂けると幸いです)

ありがとうございます。ワークスペース名「57-3.5d-20240119-145716」で送信させていただきました。
また、うまくいかなかった画像ですが、おそらく全ての画像、そしてカメラモードでのライブビューでも閾値設定が思い通りになっていないようです。

ワークスペース送付ありがとうございます。
動作確認させて頂いた所、閾値設定に関しましては問題なく機能していると考えられます。

頂いたワークスペースの画像「Images_Images_0.0~0.5」を例としますと
検出領域は7個見つかります。
また検出領域の各々の面積は下記の通りとなり、今回設定頂いた閾値(92<= area <=2304)を満たしていると思われます。

(検出した面積一覧)

  • 160
  • 170
  • 222
  • 426
  • 559
  • 569
  • 2238

仮に面積の最大閾値を2304から2237と変更した場合、検出領域は6個に減少するため閾値による絞り込みが正しく機能していると思われます。

改めて今回の閾値設定による動作について再度ご確認いただけますと幸いです。
ご不明点がありましたら、直接ご相談も可能ですのでお問い合わせください。
よろしくお願いいたします。

「いいね!」 1

ありがとうございます。
確認したところ、MENOU上では仰る通りになっていました。しかし、スクリプト検査から出力されたデータの面積(右から二列目)を見ると、指定範囲外のものも出力されているようです。どのように修正すればよいでしょうか?

返信ありがとうございます。
今回設定して頂いた閾値は「領域検出」タスクのみに適用されております。
そのため「スクリプト検査」については別途設定する必要がありますが、「スクリプト検査」では検査設定をMENOU-TEのUI上で設定ができないため、コード上で記述する必要があります。

スクリプトコード内で検出した領域に対して面積判定を追加すると所望の動作は実現できるのではと思います。
下記にサンプルコードと実行結果を添付させて頂きます。
よろしくお願いいたします。

        // トラッキング
        // 現在の画像でのペンの位置
        foreach (var blob in blobs)
        {
            // 面積閾値フィルタリング
            if (blob.Area < 92 || blob.Area > 2304)
                continue;

ありがとうございます。
そちらのコードを追加し、ほかの画像でも希望の閾値が反映されていることが確認できました。
話は逸れてしまうかもしれませんが、UI上での設定の、上部赤線の閾値はスクリプト検査のほうにも反映されているように見えたのですが、そちらに関しては仕様になのでしょうか?

ご質問ありがとうございます。

UI上での設定の、上部赤線の閾値はスクリプト検査のほうにも反映されているように見えたのですが、そちらに関しては仕様になのでしょうか?

すみません、確認のためスクリプト検査に閾値が反映されたと思われた具体例をお教え頂けないでしょうか?
お手数をおかけいたします。よろしくお願いいたします。

仮に、閾値を矛盾するような設定にした場合、出力されるCSVファイルにはスクリプト検査での閾値内の面積のものも出力されず、領域検出での閾値も反映しているように見えます。どの画像で試してもこのような結果となりました。

返信ありがとうございます。
スクリプト検査内のコードを拝見したところ、「領域検出」タスクの検出領域を取得する際に下記のように記述されています。この場合、検査設定の条件を満たす領域を取得する形となります。

var blobs = GetInspectedBlobs(“領域検出”);

「領域検出」タスクの検査設定の条件に関係なく検出領域を取得する場合は「GetBlobs」メソッドを使用することで対応可能です。

var blobs = GetBlobs(“領域検出”);

ご確認よろしくお願い致します。

ありがとうございます。
逆に、初めに送信させていただいたようにUI上での2つの閾値両方を反映させることは可能でしょうか?

「いいね!」 1

返信ありがとうございます。
現在のスクリプト検査の仕様上、「GetInspectedBlobs」では今回設定頂いたAND条件による閾値設定の条件を満たす検出領域を取得できないことを確認いたしました。

こちら今後のアップデートにより対応させて頂きます。
ご不便をおかけいたします。
よろしくお願いします。

お時間を割いていただきありがとうございました。非常に勉強になりました。

「いいね!」 1