1

差の二乗和をエラー メトリック(画像登録)として使用して、顔画像を参照顔画像に合わせようとしています。基本的に、cvMatchTemplate 関数の同様の機能を実現しようとしています (ただし、テンプレート イメージはありませんが、一般的な表情はありません)。差分画像を二乗しようとすると、アサーション失敗エラー:-215 が表示されます。私の質問はまさに次のとおりです:行列乗算演算子 A*A または要素ごとの乗算 A.mul(A) を使用して、差分画像の 2 乗を取得する必要がありますか? (現在はA*Aを使用しています)

//Start search
Mat result;
for(int i= 0; i<15; i++){
    for(int j= 0; j<15; j++){
        xTrans = i; //Translation on x-Axis
        yTrans = j; //Translation on y-Axis

        //Initialize translation matrix
        double m[2][3] = {{1,0,xTrans}, {0,1,yTrans}};
        Mat map = Mat(2,3,CV_64F, m);

        //Get the transformed image
        warpAffine(displaced, aligned, map, aligned.size());
        //Calculate the sum of squared differences
        absdiff(reference,aligned,result);
        try{
            squared = result*result; //Error line
        } catch (Exception const & e){
            cerr<<"OpenCV exception: "<<e.what()<<std::endl;
        }
        SSD = sum(squared)[0]; //Sum of squared difference
        cout <<xTrans << "," << yTrans << ","<<SSD<<endl;
    }
}

エラーは次のとおりです。

OpenCV Error: Assertion failed (type == B.type() && (type == CV_32FC1 || type ==
CV_64FC1 || type == CV_32FC2 || type == CV_64FC2)) in unknown function, file ..
\..\..\src\opencv\modules\core\src\matmul.cpp, line 711
OpenCV exception: ..\..\..\src\opencv\modules\core\src\matmul.cpp:711: error: (-
215) type == B.type() && (type == CV_32FC1 || type == CV_64FC1 || type == CV_32F
C2 || type == CV_64FC2)

warpAffine が正常に動作しているため、両方の画像のサイズとタイプは同じです。このエラーが発生する理由や実装の正確さについての提案は大歓迎です!

4

2 に答える 2

2

要素ごとの乗算を使用したい。

squared = result.mul(result);

浮動小数点画像を使用しているように見えるので、飽和について心配する必要はありません。

要素ごとの乗算は、2 つの行列の個々の要素を乗算し (名前の由来)、行列が同じサイズである必要があります。マトリックスの各要素は、resultピクセル値の差を表します。各ピクセル値は、画像内の他のピクセル値から独立しているため、要素ごとの乗算で適切な結果が得られます。

行列の乗算は、要素ごとの乗算とは大きく異なります。一般的なアプリケーションは、コンピューター グラフィックスとコンピューター ビジョンで変換を適用することです。行列の乗算は、数学的構造に適用すると意味がありますが、画像に適用すると意味がありません。cv::Matは画像データの保存にも使用されるため、行列乗算を使用する必要があるとは思わないでください。

于 2013-01-10T21:08:17.300 に答える
0

この行の問題だと思います

Mat map = Mat(2,3,CV_64F, m);

openCV2.3の畳み込み法を使用したガウスぼかしでこのリンクエラーを試してください

于 2013-01-10T18:29:00.263 に答える