Commit cc1c6133 authored by Andrey Kamaev's avatar Andrey Kamaev

Fixed #998 and #999: OpponentSIFT and OpponentSURF regression tests failure on Android

parent 1d7b9750
...@@ -285,11 +285,11 @@ void convertBGRImageToOpponentColorSpace( const Mat& bgrImage, vector<Mat>& oppo ...@@ -285,11 +285,11 @@ void convertBGRImageToOpponentColorSpace( const Mat& bgrImage, vector<Mat>& oppo
// Calculate the channels of the opponent color space // Calculate the channels of the opponent color space
{ {
// (R - G) / sqrt(2) // (R - G) / sqrt(2)
MatConstIterator_<char> rIt = bgrChannels[2].begin<char>(); MatConstIterator_<signed char> rIt = bgrChannels[2].begin<signed char>();
MatConstIterator_<char> gIt = bgrChannels[1].begin<char>(); MatConstIterator_<signed char> gIt = bgrChannels[1].begin<signed char>();
MatIterator_<char> dstIt = opponentChannels[0].begin<char>(); MatIterator_<unsigned char> dstIt = opponentChannels[0].begin<unsigned char>();
float factor = 1.f / sqrt(2.f); float factor = 1.f / sqrt(2.f);
for( ; dstIt != opponentChannels[0].end<char>(); ++rIt, ++gIt, ++dstIt ) for( ; dstIt != opponentChannels[0].end<unsigned char>(); ++rIt, ++gIt, ++dstIt )
{ {
int value = static_cast<int>( static_cast<float>(static_cast<int>(*gIt)-static_cast<int>(*rIt)) * factor ); int value = static_cast<int>( static_cast<float>(static_cast<int>(*gIt)-static_cast<int>(*rIt)) * factor );
if( value < 0 ) value = 0; if( value < 0 ) value = 0;
...@@ -299,12 +299,12 @@ void convertBGRImageToOpponentColorSpace( const Mat& bgrImage, vector<Mat>& oppo ...@@ -299,12 +299,12 @@ void convertBGRImageToOpponentColorSpace( const Mat& bgrImage, vector<Mat>& oppo
} }
{ {
// (R + G - 2B)/sqrt(6) // (R + G - 2B)/sqrt(6)
MatConstIterator_<char> rIt = bgrChannels[2].begin<char>(); MatConstIterator_<signed char> rIt = bgrChannels[2].begin<signed char>();
MatConstIterator_<char> gIt = bgrChannels[1].begin<char>(); MatConstIterator_<signed char> gIt = bgrChannels[1].begin<signed char>();
MatConstIterator_<char> bIt = bgrChannels[0].begin<char>(); MatConstIterator_<signed char> bIt = bgrChannels[0].begin<signed char>();
MatIterator_<char> dstIt = opponentChannels[1].begin<char>(); MatIterator_<unsigned char> dstIt = opponentChannels[1].begin<unsigned char>();
float factor = 1.f / sqrt(6.f); float factor = 1.f / sqrt(6.f);
for( ; dstIt != opponentChannels[1].end<char>(); ++rIt, ++gIt, ++bIt, ++dstIt ) for( ; dstIt != opponentChannels[1].end<unsigned char>(); ++rIt, ++gIt, ++bIt, ++dstIt )
{ {
int value = static_cast<int>( static_cast<float>(static_cast<int>(*rIt) + static_cast<int>(*gIt) - 2*static_cast<int>(*bIt)) * int value = static_cast<int>( static_cast<float>(static_cast<int>(*rIt) + static_cast<int>(*gIt) - 2*static_cast<int>(*bIt)) *
factor ); factor );
...@@ -315,12 +315,12 @@ void convertBGRImageToOpponentColorSpace( const Mat& bgrImage, vector<Mat>& oppo ...@@ -315,12 +315,12 @@ void convertBGRImageToOpponentColorSpace( const Mat& bgrImage, vector<Mat>& oppo
} }
{ {
// (R + G + B)/sqrt(3) // (R + G + B)/sqrt(3)
MatConstIterator_<char> rIt = bgrChannels[2].begin<char>(); MatConstIterator_<signed char> rIt = bgrChannels[2].begin<signed char>();
MatConstIterator_<char> gIt = bgrChannels[1].begin<char>(); MatConstIterator_<signed char> gIt = bgrChannels[1].begin<signed char>();
MatConstIterator_<char> bIt = bgrChannels[0].begin<char>(); MatConstIterator_<signed char> bIt = bgrChannels[0].begin<signed char>();
MatIterator_<char> dstIt = opponentChannels[2].begin<char>(); MatIterator_<unsigned char> dstIt = opponentChannels[2].begin<unsigned char>();
float factor = 1.f / sqrt(3.f); float factor = 1.f / sqrt(3.f);
for( ; dstIt != opponentChannels[2].end<char>(); ++rIt, ++gIt, ++bIt, ++dstIt ) for( ; dstIt != opponentChannels[2].end<unsigned char>(); ++rIt, ++gIt, ++bIt, ++dstIt )
{ {
int value = static_cast<int>( static_cast<float>(static_cast<int>(*rIt) + static_cast<int>(*gIt) + static_cast<int>(*bIt)) * int value = static_cast<int>( static_cast<float>(static_cast<int>(*rIt) + static_cast<int>(*gIt) + static_cast<int>(*bIt)) *
factor ); factor );
......
...@@ -403,6 +403,8 @@ protected: ...@@ -403,6 +403,8 @@ protected:
if( calcDescriptors.rows != (int)keypoints.size() ) if( calcDescriptors.rows != (int)keypoints.size() )
{ {
ts->printf( cvtest::TS::LOG, "Count of computed descriptors and keypoints count must be equal.\n" ); ts->printf( cvtest::TS::LOG, "Count of computed descriptors and keypoints count must be equal.\n" );
ts->printf( cvtest::TS::LOG, "Count of keypoints is %d.\n", (int)keypoints.size() );
ts->printf( cvtest::TS::LOG, "Count of computed descriptors is %d.\n", calcDescriptors.rows );
ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT ); ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT );
return; return;
} }
...@@ -410,6 +412,10 @@ protected: ...@@ -410,6 +412,10 @@ protected:
if( calcDescriptors.cols != dextractor->descriptorSize() || calcDescriptors.type() != dextractor->descriptorType() ) if( calcDescriptors.cols != dextractor->descriptorSize() || calcDescriptors.type() != dextractor->descriptorType() )
{ {
ts->printf( cvtest::TS::LOG, "Incorrect descriptor size or descriptor type.\n" ); ts->printf( cvtest::TS::LOG, "Incorrect descriptor size or descriptor type.\n" );
ts->printf( cvtest::TS::LOG, "Expected size is %d.\n", dextractor->descriptorSize() );
ts->printf( cvtest::TS::LOG, "Calculated size is %d.\n", calcDescriptors.cols );
ts->printf( cvtest::TS::LOG, "Expected type is %d.\n", dextractor->descriptorType() );
ts->printf( cvtest::TS::LOG, "Calculated type is %d.\n", calcDescriptors.type() );
ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT ); ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT );
return; return;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment