void RetinaImpl::getParvo(OutputArray retinaOutput_parvo) { if (_retinaFilter->getColorMode()) { // reallocate output buffer (if necessary) _convertValarrayBuffer2cvMat(_retinaFilter->getColorOutput(), _retinaFilter->getOutputNBrows(), _retinaFilter->getOutputNBcolumns(), true, retinaOutput_parvo); }else { // reallocate output buffer (if necessary) _convertValarrayBuffer2cvMat(_retinaFilter->getContours(), _retinaFilter->getOutputNBrows(), _retinaFilter->getOutputNBcolumns(), false, retinaOutput_parvo); } //retinaOutput_parvo/=255.0; }
/** * method that applies a luminance correction (initially High Dynamic Range (HDR) tone mapping) using only the 2 local adaptation stages of the retina parvocellular channel : photoreceptors level and ganlion cells level. Spatio temporal filtering is applied but limited to temporal smoothing and eventually high frequencies attenuation. This is a lighter method than the one available using the regular retina::run method. It is then faster but it does not include complete temporal filtering nor retina spectral whitening. Then, it can have a more limited effect on images with a very high dynamic range. This is an adptation of the original still image HDR tone mapping algorithm of David Alleyson, Sabine Susstruck and Laurence Meylan's work, please cite: * -> Meylan L., Alleysson D., and Susstrunk S., A Model of Retinal Local Adaptation for the Tone Mapping of Color Filter Array Images, Journal of Optical Society of America, A, Vol. 24, N 9, September, 1st, 2007, pp. 2807-2816 @param inputImage the input image to process RGB or gray levels @param outputToneMappedImage the output tone mapped image */ virtual void applyFastToneMapping(InputArray inputImage, OutputArray outputToneMappedImage) { // first convert input image to the compatible format : const bool colorMode = _convertCvMat2ValarrayBuffer(inputImage.getMat(), _inputBuffer); // process tone mapping if (colorMode) { _runRGBToneMapping(_inputBuffer, _imageOutput, true); _convertValarrayBuffer2cvMat(_imageOutput, _multiuseFilter->getNBrows(), _multiuseFilter->getNBcolumns(), true, outputToneMappedImage); }else { _runGrayToneMapping(_inputBuffer, _imageOutput); _convertValarrayBuffer2cvMat(_imageOutput, _multiuseFilter->getNBrows(), _multiuseFilter->getNBcolumns(), false, outputToneMappedImage); } }
void RetinaImpl::applyFastToneMapping(InputArray inputImage, OutputArray outputToneMappedImage) { // first convert input image to the compatible format : const bool colorMode = _convertCvMat2ValarrayBuffer(inputImage.getMat(), _inputBuffer); const unsigned int nbPixels=_retinaFilter->getOutputNBrows()*_retinaFilter->getOutputNBcolumns(); // process tone mapping if (colorMode) { std::valarray<float> imageOutput(nbPixels*3); _retinaFilter->runRGBToneMapping(_inputBuffer, imageOutput, true, _retinaParameters.OPLandIplParvo.photoreceptorsLocalAdaptationSensitivity, _retinaParameters.OPLandIplParvo.ganglionCellsSensitivity); _convertValarrayBuffer2cvMat(imageOutput, _retinaFilter->getOutputNBrows(), _retinaFilter->getOutputNBcolumns(), true, outputToneMappedImage); }else { std::valarray<float> imageOutput(nbPixels); _retinaFilter->runGrayToneMapping(_inputBuffer, imageOutput, _retinaParameters.OPLandIplParvo.photoreceptorsLocalAdaptationSensitivity, _retinaParameters.OPLandIplParvo.ganglionCellsSensitivity); _convertValarrayBuffer2cvMat(imageOutput, _retinaFilter->getOutputNBrows(), _retinaFilter->getOutputNBcolumns(), false, outputToneMappedImage); } }
void RetinaImpl::getMagno(OutputArray retinaOutput_magno) { // reallocate output buffer (if necessary) _convertValarrayBuffer2cvMat(_retinaFilter->getMovingContours(), _retinaFilter->getOutputNBrows(), _retinaFilter->getOutputNBcolumns(), false, retinaOutput_magno); //retinaOutput_magno/=255.0; }