質問: surf特徴量を使ったマッチングで処理領域を限定することはできますか? 画像処理で処理をする領域を限定したいのですが、処理をする領域が斜めになっている場合、roiを使ってのx,y,w,hの指定では対応できませんでした。 特徴量を抽出したり、画を位置合わせするときなどで処理をする領域を限定する方法はありますか?
回答: roi外の領域の輝度値をクリップしてしまう方法はどうでしょうか。 例えば、 img = imread('coins.png'); figure, imshow(img) <> このようなコインの図があったとして、面積が大きいコインに着目したい場合、 %2値化&穴埋め bw = imfill(imbinarize(img), 'holes'); %面積2700pix以上の領域抽出 bw = bwpropfilt(bw, 'area', [2700, 3000]); %元画像をコピー img2 = img; %roi外の輝度値を255にクリップ img2(~bw) = 255; figure, imshow(img2) とすると以下のような画像が得られ、 <> この画像に対して抽出した特徴点を元画像にオーバーレイ表示すると以下のようになります。 %特徴点検出 points = detectsurffeatures(img2); %上位20ポイントをプロット figure, imshow(img); hold on; plot(points.selectstrongest(20)); <> クリップした領域も含めての特徴点になりますので、roiに限定した特徴点とは意味合いが異なりますが アプリケーションによってはこのようなアプローチも使えると思います。