From cf6e833169fb53f957ddd8354fb9248915565dd5 Mon Sep 17 00:00:00 2001 From: alexandre benoit Date: Wed, 1 May 2013 11:47:26 +0200 Subject: [PATCH] trying to solve valarray pointer access problem, enhancing documentation --- modules/contrib/doc/retina/images/retinaOutput.jpg | Bin 23338 -> 0 bytes .../doc/retina/images/retinaOutput_default.jpg | Bin 0 -> 22461 bytes .../doc/retina/images/retinaOutput_realistic.jpg | Bin 0 -> 19131 bytes modules/contrib/doc/retina/index.rst | 77 +++++++++++++++++++-- modules/contrib/src/retina.cpp | 9 +-- 5 files changed, 75 insertions(+), 11 deletions(-) delete mode 100644 modules/contrib/doc/retina/images/retinaOutput.jpg create mode 100644 modules/contrib/doc/retina/images/retinaOutput_default.jpg create mode 100644 modules/contrib/doc/retina/images/retinaOutput_realistic.jpg diff --git a/modules/contrib/doc/retina/images/retinaOutput.jpg b/modules/contrib/doc/retina/images/retinaOutput.jpg deleted file mode 100644 index b608cd485498eb11b80961e3485882a33e3009ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23338 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 literal 0 HcmV?d00001 diff --git a/modules/contrib/doc/retina/images/retinaOutput_realistic.jpg b/modules/contrib/doc/retina/images/retinaOutput_realistic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1bd60f80cced8cf6afbf3f351caf3ae507b8d56c GIT binary patch literal 19131 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 literal 0 HcmV?d00001 diff --git a/modules/contrib/doc/retina/index.rst b/modules/contrib/doc/retina/index.rst index 0be6e73..72184d2 100644 --- a/modules/contrib/doc/retina/index.rst +++ b/modules/contrib/doc/retina/index.rst @@ -5,8 +5,7 @@ Retina : a Bio mimetic human retina model Retina ====== - -.. ocv:class:: Retina +.. ocv:class:: Retina : public Algorithm Class which provides the main controls to the Gipsa/Listic labs human retina model. Spatio-temporal filtering modelling the two main retina information channels : @@ -14,19 +13,30 @@ Class which provides the main controls to the Gipsa/Listic labs human retina mo * periphearal vision for sensitive transient signals detection (motion and events) : the magnocellular pathway. +From a general point of view, this filter corrects luminance thanks to local adaptation. It filters out spatio-temporal noise and enhances details. This model originates from Jeanny Herault work [Herault2010]_. It has been involved in Alexandre Benoit phd and current research [Benoit2010]_. It includes the work of other Jeanny's phd student such as [Chaix2007]_ and the log polar transformations of Barthelemy Durette described in Jeanny's book. **NOTE : See the Retina tutorial in the tutorial/contrib section for complementary explanations.** +Example : a low quality color jpeg image with backlight problems as input of the retina model. + .. image:: images/retinaInput.jpg :alt: a low quality color jpeg image with backlight problems. :align: center -.. image:: images/retinaOutput.jpg - :alt: the retina foveal model applied on the entire image with default parameters. Here contours are enforced, halo effects are voluntary visible with this configuration, increase horizontalCellsGain near 1 to remove them. +Below, the retina foveal model applied on the entire image with default parameters. Here contours are enforced, halo effects are voluntary visible with this configuration, increase horizontalCellsGain near 1 to remove them. + +.. image:: images/retinaOutput_default.jpg + :alt: the retina foveal model applied on the entire image with default parameters. Here contours are enforced, luminance is corrected and halo effects are voluntary visible with this configuration, increase horizontalCellsGain near 1 to remove them. :align: center -The retina can be settled up with various parameters, by default, as shown on the figure above, the retina cancels mean luminance and enforces all details of the visual scene. Halo effects can be modulated (exagerated to cancelled). In order to use your own parameters, you can use at least one time the *write(String fs)* method which will write a proper XML file with all default parameters. Then, tweak it on your own and reload them at any time using method *setup(String fs)*. These methods update a *Retina::RetinaParameters* member structure that is described hereafter. :: +Below, a second the retina foveal model output applied on the entire image with 'naturalness' parameters. Here contours are enforced, luminance is corrected but halos are avoided with this configuration. As shown at the end of the page, parameters change from defaults are horizontalCellsGain=0.3 and photoreceptorsLocalAdaptationSensitivity=ganglioncellsSensitivity=0.89. + +.. image:: images/retinaOutput_realistic.jpg + :alt: the retina foveal model applied on the entire image with 'naturalness' parameters. Here contours are enforced but are avoided with this configuration, horizontalCellsGain is 0.3 and photoreceptorsLocalAdaptationSensitivity=ganglioncellsSensitivity=0.89. + :align: center + +The retina can be settled up with various parameters, by default, as shown on the figure above, the retina modulates mean luminance and enforces all details of the visual scene. Halo effects can be modulated (exagerated to cancelled as shown on the two examples). In order to use your own parameters, you can use at least one time the *write(String fs)* method which will write a proper XML file with all default parameters. Then, tweak it on your own and reload them at any time using method *setup(String fs)*. These methods update a *Retina::RetinaParameters* member structure that is described hereafter. XML parameters samples are shown at the end of the page. :: class Retina { @@ -373,3 +383,60 @@ Retina::RetinaParameters struct OPLandIplParvoParameters OPLandIplParvo; struct IplMagnoParameters IplMagno; }; + +Retina parameters files examples +++++++++++++++++++++++++++++++++ + +Here is the default configuration file of the retina module. It gives results such as the first retina output shown on the top of this page. + +.. code-block:: cpp + + + + + 1 + 1 + 7.5e-01 + 9.0e-01 + 5.7e-01 + 0.01 + 0.5 + 7. + 7.5e-01 + + 1 + 0. + 0. + 7. + 2.0e+00 + 9.5e-01 + 0. + 7. + + +Here is the 'realistic" setup used to obtain the second retina output shown on the top of this page. + +.. code-block:: cpp + + + + + 1 + 1 + 8.9e-01 + 0.0000000000000000e-01 + 5.3e-01 + 0.3 + 0. + . + 8.9e-01 + + 1 + 0. + 0. + 7. + 1.2000000476837158e+00 + 9.4999998807907104e-01 + 0. + 7. + diff --git a/modules/contrib/src/retina.cpp b/modules/contrib/src/retina.cpp index 038445a..685d17c 100644 --- a/modules/contrib/src/retina.cpp +++ b/modules/contrib/src/retina.cpp @@ -564,8 +564,7 @@ void RetinaImpl::getParvoRAW(cv::Mat &parvoOutputBufferCopy){ // original API level data accessors : get buffers addresses... const Mat RetinaImpl::getMagnoRAW() const { // create a cv::Mat header for the valarray - const float *retinaMagnoFilterOutputPTR=&(_retinaFilter->getMovingContours()[0]); - return Mat(_retinaFilter->getMovingContours().size(),1, CV_32F, (void*)retinaMagnoFilterOutputPTR); + return Mat(_retinaFilter->getMovingContours().size(),1, CV_32F, (void*)get_data(_retinaFilter->getMovingContours())); } @@ -573,13 +572,11 @@ const Mat RetinaImpl::getParvoRAW() const { if (_retinaFilter->getColorMode()) // check if color mode is enabled { // create a cv::Mat table (for RGB planes as a single vector) - const float *retinaParvoFilterOutputPTR=&(_retinaFilter->getColorOutput()[0]); - return Mat(_retinaFilter->getColorOutput().size(), 1, CV_32F, (void*)retinaParvoFilterOutputPTR); + return Mat(_retinaFilter->getColorOutput().size(), 1, CV_32F, (void*)get_data(_retinaFilter->getColorOutput())); } // otherwise, output is gray level // create a cv::Mat header for the valarray - const float *retinaParvoFilterOutputPTR=&(_retinaFilter->getContours()[0]); - return Mat( _retinaFilter->getContours().size(), 1, CV_32F, (void*)retinaParvoFilterOutputPTR); + return Mat( _retinaFilter->getContours().size(), 1, CV_32F, (void*)get_data(_retinaFilter->getContours())); } // private method called by constructirs -- 2.7.4