0

テンプレート マッチング画像処理に関連するプロジェクトに取り組んでいます。マッチング アルゴリズムを実行しましたが、直面している問題です。テンプレート マッチャーは常に、テンプレート画像のソース画像に一致する最適な相関関係を生成しますが、通知または応答したい目的の出力が偽の出力のどちらにもない場合のみ。出力が来たときに双方向にパルスを生成するarduinoボードUNO R3とMATLABコードをシリアル通信したいですか?だから私は何をすべきですか?これはコードです:

cam=videoinput('winvideo',2,'YUY2_320x240');


start(cam);
preview(cam);
set(cam,'ReturnedColorSpace','RGB');
get=input('get frame ???');

frame=getsnapshot(cam);
imwrite(frame,'got.jpg');

I=imread('D:\Template matcher\got.jpg');
H_Eq=vision.HistogramEqualizer;
Temlate_matcher=vision.TemplateMatcher;
Temlate_matcher.Metric='Maximum absolute difference';
Temlate_matcher.OutputValue='Metric matrix';
marker_inserter=vision.MarkerInserter('Size',30,'Fill',false,'FillColor','White','Opacity',0.75);
I=rgb2gray(I);
I=step(H_Eq,I);
Template1=imread('D:\Template matcher\ge.jpg');


Template1=rgb2gray(Template1);


H_Eq=vision.HistogramEqualizer;
Template1=step(H_Eq,Template1);


Location1=step(Temlate_matcher,I,Template1);

 marker_inserter.Shape='Square'
 output_image=step(marker_inserter,I,Location1);

figure();imshow(output_image);
4

1 に答える 1

0

コメントで説明したように、Computer Vision ツールボックスを使用したテンプレート マッチングは、フレーム内で最適なテンプレート マッチングを生成します。ただし、これは、検索しているオブジェクトがテンプレートに最もよく一致する場所にあることを必ずしも意味するものではありません。

そのため、私がお勧めするのは、メトリックがそのテンプレートに与えるものを確認することです. あなたの場合、最大絶対差を使用しています。このメトリックがしきい値よりも小さい場合は、調査しているフレームでテンプレートが見つかったことを意味している可能性があります。それより大きい場合は、そうではない可能性が高いです。このしきい値は、テンプレートがどのように見えるか、および見ようとしているフレームの内容に完全に依存するため、いじる必要があります。しきい値よりも小さい場合は、信号を Arduino ボードに送信できます。これを行う前に、次のように Template Matcher の設定を変更する必要があります。

Temlate_matcher=vision.TemplateMatcher('OutputValue', ...
                'Best match location', 'BestMatchNeighborhoodOutputPort', true);

これにより、最終的に必要なものを取得できます。 そのため、フィールドとして使用できなくなったため、コードでこの行を削除してくださいMetric MatrixOutputValue。これが設定されたので、次のコードを置き換えることで、テンプレート マッチングの動作をオーバーライドできます。

Location1=step(Temlate_matcher,I,Template1);

これとともに:

[Location1, NVALS, NVALID] = step(Temlate_matcher,I,Template1);

NVALID一致がフレーム内に完全に含まれている場合は true を返し、そうでない場合は false を返します。あなたの場合、NVALIDテンプレートがフレーム内に含まれている限り、選択したメトリックが一致することが保証されているため、常に true にする必要があります。 NVALSテンプレート イメージに最もよく一致するメトリック値のマトリックスです。本質的に、このマトリックスの中心は、マッチャーが生成した最良のメトリック値を提供するため、これが必要な値です。次の方法で、チートして最小値を見つけることができます。

val = min(NVALS(:));

そのため、この時点で が何らかのしきい値よりval小さいかどうかを確認できます。これは、どうなるかわかりません。試してみると、最高の一致が 5 程度ずれていた場合、フレーム内に興味深いものがある可能性があります。そのため、設定しthresh = 5ます。

したがって、valが より小さい場合はthresh、先に進んで Arduino ボードに信号を送ります。

幸運を!

于 2014-06-03T20:21:03.270 に答える