質問: 小さな穴の検知 直径2ミリ程度の、複数の穴が空いている、長方形の黒い板があります。 下に白い紙などを敷き、穴の数を検知するプログラムを作成したいと考えております。 直径が小さいため、半径を指定する関数、では検知できませんでした。 どのような関数を使うと検知することができるか教えていただけますと助かります。 よろしくお願いします。
回答: 背景が黒で、見つけたい穴は白色に見えるということになると思うので、シンプルに2値化して、検出できた領域の数を数えるという方法をまずはお試しください。 2値化は img = imread('test.png'); % 画像データの読込 img = rgb2gray(img); % グレースケール画像に変換 bw = img > 10; % 2値化 のような演算でもできますし、imbinarize関数も効くかもしれません。 https://jp.mathworks.com/help/images/ref/imbinarize.html しきい値が不適切だと誤検出や穴が隠れちゃったりすると思うので、そのあたりの調整は必要だと思います。できたbwが穴の位置が白、その他が黒になっていれば lbl = bwlabel(bw); % 2値画像をラベル画像に変換(白い領域それぞれに1から番号がつく) num = max(lbl(:)) % 最大のラベル番号 = トータルの穴の数 で穴の数を出力できます。