1

私はコンピューター ビジョンの初心者です。現在、iOS で matchTemplate を使用して 2 つの画像の一致を見つけるプロジェクトに取り組んでいます。私が直面している問題は、2 つの画像が一致しているかどうかを判断する方法を見つけることです。結果マトリックスのパーセンテージを取得することを考えましたが、方法がわかりませんでした。また、MinMaxLoc も機能しませんでした。誰かが私を助けてくれたり、アイデアをくれたりしたら、本当に感謝しています。コードは次のとおりです。

UIImage* image1 = [UIImage imageNamed:@"1.png"]; UIImage* image2 = [UIImage imageNamed:@"Image002.png"];

// Convert UIImage* to cv::Mat
UIImageToMat(image1, MatImage1);
UIImageToMat(image2, MatImage2);


MatImage1.resize(100 , 180);
MatImage2.resize(100 , 180);



if (!MatImage1.empty())
{
    // Convert the image to grayscale
    //we can also use BGRA2GRAY : Blue , Green , Red and Alpha(Opacity)
    cv::cvtColor(MatImage1, grayImage1, cv::COLOR_BGRA2GRAY );
    cv::cvtColor(MatImage2, grayImage2, cv::COLOR_BGRA2GRAY);


}


/// Create the result matrix
int result_cols =  grayImage1.cols ;
int result_rows = grayImage1.rows ;

result.create( result_cols, result_rows, CV_32FC1 );

/// Do the Matching and Normalize
matchTemplate( grayImage1 , grayImage2 , result ,  CV_TM_SQDIFF_NORMED);

//Normalize
normalize( result, result, 0, 100, cv::NORM_MINMAX, -1 );

//Threshold
cv::threshold(result , result , 30, 0, CV_THRESH_TOZERO);`
4

1 に答える 1

0

の意図matchTemplate(...)は、通常、テンプレートが画像よりも小さいことです。次に、テンプレートがスライディング ウィンドウとして画像上を移動し、相互相関や二乗差分などの方法で「マッチング スコア」が計算されます。

したがって、入力画像が 10x10 でテンプレートが 3x3 の場合、左上隅が画像の左上隅になるようにテンプレートが配置されます (テンプレートの中心はピクセル (1,1) にあり、インデックスからインデックスを作成すると仮定します)。 0)。一致スコアが計算され、テンプレートが (1,2) にスライドし、再度一致します。テンプレートの中央のピクセルが (8,1) にあるとき、次の行 (1,2) にスライドさせて繰り返します。

このプロセスの出力結果は 8x8 マトリックスで、各位置の値は、テンプレートがその時点にあったときの一致スコアを表します。出力画像のサイズは W-w+1 x H-h+1 で、WxH は画像のサイズ、wxh はテンプレートのサイズです。

次に、minMaxLoc を使用して、出力マトリックスの最高スコアと最低スコアを計算できます。使用する一致スコアに応じて、これらのいずれかが画像内のテンプレートに最も一致する可能性が高くなります。

テンプレートと画像のサイズを同じサイズに変更します。

MatImage1.resize(100 , 180);
MatImage2.resize(100 , 180);

つまり、テンプレートを画像内に配置できる場所は 1 つだけであり、出力マトリックスは 1x1 グリッドにする必要があります。

あなたも使っています

CV_TM_SQDIFF_NORMED

これは、正規化された二乗差です。このスコアでは、マッチング スコアが低いほど優れています。つまり、1x1 出力マトリックスの値が 0 に近ければ近いほど、テンプレートと画像が一致します。

テンプレートと画像のサイズが 100x180 の場合、このマッチング スコアの最大値を 100x180x255 として簡単に計算できます。これは、画像全体が黒でテンプレートが白の場合、またはその逆の場合に得られます。これは、テンプレートが画像に一致したと言う妥当なしきい値を算出するのに役立ちます。

結果の正規化またはしきい値処理にはほとんど価値がありませんが、1x1 出力しかないためです。

于 2015-05-14T04:52:49.450 に答える