情報詳細Q:フィルタ処理やエッジ抽出を行う際に気を付けることはありますか。A:ROIが設定された画像のフィルタ処理では、ROI境界付近の画素データにも注意する必要があります。 【基礎編】 次のようなプログラムでエッジ抽出する時、ROI(ドメイン、domain)の中にはエッジがないため、何も抽出されないことを期待しがちです。 ===== gen_rectangle1 (Rectangle, 30, 20, 100, 200) region_to_bin (Rectangle, BinImage, 255, 0, 512, 512) reduce_domain (BinImage, Rectangle, ImageReduced) edges_sub_pix (ImageReduced, Edges, 'canny', 1, 20, 40) =====しかし、これを実行するとROI境界付近にエッジが抽出されます。 エッジ抽出はフィルタ処理であるため、実際にはマスクサイズの分だけROI外の画素の輝度値も参照しています。 そのため、元のBinImageに含まれる輝度値0の画素も参照され、0→255のエッジが存在していると判断されます。 【応用編】続けて次のコードを実行すると、ImageMeanとImageMean1で大きく結果が異なります。 この違いも、基礎編と同じ原因によるものです。 ===== gen_image_proto (BinImage, ImageCleared, 255)reduce_domain (ImageCleared, Rectangle, ImageReduced1) mean_image (ImageReduced1, ImageMean, 9, 9) mean_image (ImageMean, ImageMean1, 9, 9)===== ImageReduced1の時点では、ROI外も含めすべての画素の輝度値は255になっています。 そのため、ImageMeanのROI内の画素は輝度値255になります。 しかし、ImageMeanのROI外の画素に対しては輝度値の計算が行われないため、デフォルトでは輝度値0が格納されたままになります。 こうしてできたImgeaMeanを再びフィルタ処理にかけると、ROI外が輝度値0なため、ImageMean1の境界付近の輝度値は255ではなくなります。 添付ファイルタイトルフィルタ処理やエッジ抽出の際の留意事項URL 名000005597公開状況公開済み検証状況公開済み