行列の乗算,内積,外積,要素ごとの乗算
- 乗算
- MatExpr operator * (Mat& a, Mat& b);
- MatExpr Mat::mul(Mat& m, double scale);
- void gemm( Mat& a, Mat& b, double alpha, Mat& c, double beta, Mat& dst, int flags );
- void cvMatMul( CvMat* src1, CvMat* src2, CvMat* dst);
- void cvMatMulAdd( CvMat* src1, CvMat* src2, CvMat* src3, CvMat* dst);
- void cvGEMM( CvMat* src1, CvMat* src2, double alpha, CvMat* src3, double beta, CvMat* dst, int flags );
- 内積
- 外積
- 要素ごとの乗算
- 解説
- サンプルコード
- 実体ファイル
通常の掛け算
#mimetex(\Large A=\large\left(\begin{array}{cc}a_{11}&a_{12}\\a_{21}&a_{22}\end{array}\right),\quad \Large B=\large\left(\begin{array}{cc}b_{11}&b_{12}\\b_{21}&b_{22}\end{array}\right)\\\Large A*B=\large\left(\begin{array}{cc}a_{11}b_{11}+a_{12}b_{21}&a_{11}b_{12}+a_{12}b_{22}\\a_{21}b_{11}+a_{22}b_{21}&a_{21}b_{12}+a_{22}b_{22}\end{array}\right));
MatExpr operator * (Mat& a, Mat& b);†
オペレータ
返り値†
MatExpr Mat::mul(Mat& m, double scale);†
行列のオペレータ
返り値†
void gemm( Mat& a, Mat& b, double alpha, Mat& c, double beta, Mat& dst, int flags );†
- a,b,c:Matクラス型の行列.
- alpha, beta:スケール係数
- flags:int型の転置行列を表すフラグ
返り値†
void cvGEMM( CvMat* src1, CvMat* src2, double alpha, CvMat* src3, double beta, CvMat* dst, int flags );†
cvMatMul も cvMatMulAdd も cvGEMM の別名で,cvGEMM も内部では cv::gemm を呼んでいる.
- src1, src2, src3:CvMat*型の行列
- dst:CvMat*型の出力行列
- alpha, beta:スケーリング係数
返り値†
#mimetex(\Large A=\large\left(\begin{array}{c}a_1\\a_2\\a_3\end{array}\right), \Large B=\large\left(\begin{array}{c}b_1\\b_2\\b_3\end{array}\right)\\\Large A^{\top}\cdot B=\large\left(a_1b_1+a_2b_2+a_3b_3\right));
ベクトル同士の類似度を計算したい場合に使ったりする
double Mat::dot( Mat a );†
返り値†
- double型の内積の値.自クラスの値との内積の値を返す.
返り値†
- double型の内積の値.自クラスの値との内積の値を返す.
#mimetex(\Large A=\large\left(\begin{array}{c}a_1\\a_2\\a_3\end{array}\right), \Large B=\large\left(\begin{array}{c}b_1\\b_2\\b_3\end{array}\right)\\\Large A\times B=\large\left(\begin{array}{ccc}a_2b_3-a_3b_2&a_3b_1-a_1b_3&a_1b_2-a_2b_1\end{array}\right));
3次元のベクトル同士を回転させる変換
MatExpr Mat::cross( Mat a );†
返り値†
返り値†
要素ごとの乗算†
#mimetex(\Large A=\large\left(\begin{array}{cc}a_{11}&a_{12}\\a_{21}&a_{22}\end{array}\right),\quad \Large B=\large\left(\begin{array}{cc}b_{11}&b_{12}\\b_{21}&b_{22}\end{array}\right)\\\Large A.\mathrm{mul}(B)=\large\left(\begin{array}{cc}a_{11}b_{11}&a_{12}b_{12}\\a_{21}b_{21}&a_{22}b_{22}\end{array}\right));
MatExpr Mat::mul( Mat a );†
返り値†
void cvMul( CvMat* a, CvMat* b, CvMat* dst, double scale );†
返り値†
- OpenCV 2.3?あたりからVecやMatやPointを全て一元的に扱えるようにInputArray型というのが導入された.
- また結果がMatExpr型というのに統一されている.
- とりあえず全部Matと思っておけば使うのには支障ない.
サンプルコード†
TBW
実体ファイル†
- :OpenCV 1.1以前
- cxcore/include/cxcore.h
- cxcore/src/cxmatmul.cpp
- :OpenCV 2.3以降
- modules/core/include/opencv2/core/mat.hpp
- modules/core/include/opencv2/core/core_c.h
- modules/core/src/matop.cpp (C++版)
- modules/core/src/matrix.cpp (C版)
ジャンル:OpenCV:OpenCV 1.0:OpenCV 1.1:OpenCV 2.3:OpenCV 2.4準拠