MCPcopy Create free account
hub / github.com/creatale/node-dv / mulTransposed

Method mulTransposed

deps/opencv/modules/core/src/matmul.cpp:2535–2648  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2533}
2534
2535void cv::mulTransposed( InputArray _src, OutputArray _dst, bool ata,
2536 InputArray _delta, double scale, int dtype )
2537{
2538 Mat src = _src.getMat(), delta = _delta.getMat();
2539 const int gemm_level = 100; // boundary above which GEMM is faster.
2540 int stype = src.type();
2541 dtype = std::max(std::max(CV_MAT_DEPTH(dtype >= 0 ? dtype : stype), delta.depth()), CV_32F);
2542 CV_Assert( src.channels() == 1 );
2543
2544 if( delta.data )
2545 {
2546 CV_Assert( delta.channels() == 1 &&
2547 (delta.rows == src.rows || delta.rows == 1) &&
2548 (delta.cols == src.cols || delta.cols == 1));
2549 if( delta.type() != dtype )
2550 delta.convertTo(delta, dtype);
2551 }
2552
2553 int dsize = ata ? src.cols : src.rows;
2554 _dst.create( dsize, dsize, dtype );
2555 Mat dst = _dst.getMat();
2556
2557 if( src.data == dst.data || (stype == dtype &&
2558 (dst.cols >= gemm_level && dst.rows >= gemm_level &&
2559 src.cols >= gemm_level && src.rows >= gemm_level)))
2560 {
2561 Mat src2;
2562 const Mat* tsrc = &src;
2563 if( delta.data )
2564 {
2565 if( delta.size() == src.size() )
2566 subtract( src, delta, src2 );
2567 else
2568 {
2569 repeat(delta, src.rows/delta.rows, src.cols/delta.cols, src2);
2570 subtract( src, src2, src2 );
2571 }
2572 tsrc = &src2;
2573 }
2574 gemm( *tsrc, *tsrc, scale, Mat(), 0, dst, ata ? GEMM_1_T : GEMM_2_T );
2575 }
2576 else
2577 {
2578 MulTransposedFunc func = 0;
2579 if(stype == CV_8U && dtype == CV_32F)
2580 {
2581 if(ata)
2582 func = MulTransposedR<uchar,float>;
2583 else
2584 func = MulTransposedL<uchar,float>;
2585 }
2586 else if(stype == CV_8U && dtype == CV_64F)
2587 {
2588 if(ata)
2589 func = MulTransposedR<uchar,double>;
2590 else
2591 func = MulTransposedL<uchar,double>;
2592 }

Callers

nothing calls this directly

Calls 10

repeatFunction · 0.85
MatClass · 0.85
maxFunction · 0.70
getMatMethod · 0.45
typeMethod · 0.45
depthMethod · 0.45
channelsMethod · 0.45
convertToMethod · 0.45
createMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected