Commit 6042c594 authored by Maria Dimashova's avatar Maria Dimashova

fixed #1764

parent 31395b07
...@@ -134,49 +134,43 @@ static void convertBGRImageToOpponentColorSpace( const Mat& bgrImage, vector<Mat ...@@ -134,49 +134,43 @@ static void convertBGRImageToOpponentColorSpace( const Mat& bgrImage, vector<Mat
// Calculate the channels of the opponent color space // Calculate the channels of the opponent color space
{ {
// (R - G) / sqrt(2) // (R - G)/sqrt(2), but converted to the destination data type
MatConstIterator_<signed char> rIt = bgrChannels[2].begin<signed char>(); MatConstIterator_<signed char> rIt = bgrChannels[2].begin<signed char>();
MatConstIterator_<signed char> gIt = bgrChannels[1].begin<signed char>(); MatConstIterator_<signed char> gIt = bgrChannels[1].begin<signed char>();
MatIterator_<unsigned char> dstIt = opponentChannels[0].begin<unsigned char>(); MatIterator_<unsigned char> dstIt = opponentChannels[0].begin<unsigned char>();
float factor = 1.f / sqrt(2.f);
for( ; dstIt != opponentChannels[0].end<unsigned 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 ); float value = 0.5f * (static_cast<int>(*gIt) -
if( value < 0 ) value = 0; static_cast<int>(*rIt) + 255);
if( value > 255 ) value = 255; (*dstIt) = static_cast<unsigned char>(value + 0.5f);
(*dstIt) = static_cast<unsigned char>(value);
} }
} }
{ {
// (R + G - 2B)/sqrt(6) // (R + G - 2B)/sqrt(6), but converted to the destination data type
MatConstIterator_<signed char> rIt = bgrChannels[2].begin<signed char>(); MatConstIterator_<signed char> rIt = bgrChannels[2].begin<signed char>();
MatConstIterator_<signed char> gIt = bgrChannels[1].begin<signed char>(); MatConstIterator_<signed char> gIt = bgrChannels[1].begin<signed char>();
MatConstIterator_<signed char> bIt = bgrChannels[0].begin<signed char>(); MatConstIterator_<signed char> bIt = bgrChannels[0].begin<signed char>();
MatIterator_<unsigned char> dstIt = opponentChannels[1].begin<unsigned char>(); MatIterator_<unsigned char> dstIt = opponentChannels[1].begin<unsigned char>();
float factor = 1.f / sqrt(6.f);
for( ; dstIt != opponentChannels[1].end<unsigned 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)) * float value = 0.25f * (static_cast<int>(*rIt) + static_cast<int>(*gIt) -
factor ); 2*static_cast<int>(*bIt) + 510);
if( value < 0 ) value = 0; (*dstIt) = static_cast<unsigned char>(value + 0.5f);
if( value > 255 ) value = 255;
(*dstIt) = static_cast<unsigned char>(value);
} }
} }
{ {
// (R + G + B)/sqrt(3) // (R + G + B)/sqrt(3), but converted to the destination data type
MatConstIterator_<signed char> rIt = bgrChannels[2].begin<signed char>(); MatConstIterator_<signed char> rIt = bgrChannels[2].begin<signed char>();
MatConstIterator_<signed char> gIt = bgrChannels[1].begin<signed char>(); MatConstIterator_<signed char> gIt = bgrChannels[1].begin<signed char>();
MatConstIterator_<signed char> bIt = bgrChannels[0].begin<signed char>(); MatConstIterator_<signed char> bIt = bgrChannels[0].begin<signed char>();
MatIterator_<unsigned char> dstIt = opponentChannels[2].begin<unsigned char>(); MatIterator_<unsigned char> dstIt = opponentChannels[2].begin<unsigned char>();
float factor = 1.f / sqrt(3.f); float factor = 1.f/3.f;
for( ; dstIt != opponentChannels[2].end<unsigned 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)) * float value = factor * (static_cast<int>(*rIt) +
factor ); static_cast<int>(*gIt) +
if( value < 0 ) value = 0; static_cast<int>(*bIt));
if( value > 255 ) value = 255; (*dstIt) = static_cast<unsigned char>(value + 0.5f);
(*dstIt) = static_cast<unsigned char>(value);
} }
} }
} }
......
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