pub struct Retina { /* private fields */ }
Expand description
class which allows the Gipsa/Listic Labs model to be used with OpenCV.
This retina model allows spatio-temporal image processing (applied on still images, video sequences). As a summary, these are the retina model properties:
- It applies a spectral whithening (mid-frequency details enhancement)
- high frequency spatio-temporal noise reduction
- low frequency luminance to be reduced (luminance range compression)
- local logarithmic luminance compression allows details to be enhanced in low light conditions
USE : this model can be used basically for spatio-temporal video effects but also for : _using the getParvo method output matrix : texture analysiswith enhanced signal to noise ratio and enhanced details robust against input images luminance ranges _using the getMagno method output matrix : motion analysis also with the previously cited properties
for more information, reer to the following papers : Benoit A., Caplier A., Durette B., Herault, J., “USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING”, Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891.
The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author : take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper: B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). “Efficient demosaicing through recursive filtering”, IEEE International Conference on Image Processing ICIP 2007 take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny’s discussions. more informations in the above cited Jeanny Heraults’s book.
Implementations§
Source§impl Retina
impl Retina
Sourcepub fn create(input_size: Size) -> Result<Ptr<Retina>>
pub fn create(input_size: Size) -> Result<Ptr<Retina>>
Constructors from standardized interfaces : retreive a smart pointer to a Retina instance
§Parameters
- inputSize: the input frame size
- colorMode: the chosen processing mode : with or without color processing
- colorSamplingMethod: specifies which kind of color sampling will be used :
- cv::bioinspired::RETINA_COLOR_RANDOM: each pixel position is either R, G or B in a random choice
- cv::bioinspired::RETINA_COLOR_DIAGONAL: color sampling is RGBRGBRGB…, line 2 BRGBRGBRG…, line 3, GBRGBRGBR…
- cv::bioinspired::RETINA_COLOR_BAYER: standard bayer sampling
- useRetinaLogSampling: activate retina log sampling, if true, the 2 following parameters can be used
- reductionFactor: only usefull if param useRetinaLogSampling=true, specifies the reduction factor of the output frame (as the center (fovea) is high resolution and corners can be underscaled, then a reduction of the output is allowed without precision leak
- samplingStrength: only usefull if param useRetinaLogSampling=true, specifies the strength of the log scale that is applied
§Overloaded parameters
Sourcepub fn create_ext(
input_size: Size,
color_mode: bool,
color_sampling_method: i32,
use_retina_log_sampling: bool,
reduction_factor: f32,
sampling_strength: f32,
) -> Result<Ptr<Retina>>
pub fn create_ext( input_size: Size, color_mode: bool, color_sampling_method: i32, use_retina_log_sampling: bool, reduction_factor: f32, sampling_strength: f32, ) -> Result<Ptr<Retina>>
Constructors from standardized interfaces : retreive a smart pointer to a Retina instance
§Parameters
- inputSize: the input frame size
- colorMode: the chosen processing mode : with or without color processing
- colorSamplingMethod: specifies which kind of color sampling will be used :
- cv::bioinspired::RETINA_COLOR_RANDOM: each pixel position is either R, G or B in a random choice
- cv::bioinspired::RETINA_COLOR_DIAGONAL: color sampling is RGBRGBRGB…, line 2 BRGBRGBRG…, line 3, GBRGBRGBR…
- cv::bioinspired::RETINA_COLOR_BAYER: standard bayer sampling
- useRetinaLogSampling: activate retina log sampling, if true, the 2 following parameters can be used
- reductionFactor: only usefull if param useRetinaLogSampling=true, specifies the reduction factor of the output frame (as the center (fovea) is high resolution and corners can be underscaled, then a reduction of the output is allowed without precision leak
- samplingStrength: only usefull if param useRetinaLogSampling=true, specifies the strength of the log scale that is applied
§C++ default parameters
- color_sampling_method: RETINA_COLOR_BAYER
- use_retina_log_sampling: false
- reduction_factor: 1.0f
- sampling_strength: 10.0f
Sourcepub fn create_ext_def(input_size: Size, color_mode: bool) -> Result<Ptr<Retina>>
pub fn create_ext_def(input_size: Size, color_mode: bool) -> Result<Ptr<Retina>>
Constructors from standardized interfaces : retreive a smart pointer to a Retina instance
§Parameters
- inputSize: the input frame size
- colorMode: the chosen processing mode : with or without color processing
- colorSamplingMethod: specifies which kind of color sampling will be used :
- cv::bioinspired::RETINA_COLOR_RANDOM: each pixel position is either R, G or B in a random choice
- cv::bioinspired::RETINA_COLOR_DIAGONAL: color sampling is RGBRGBRGB…, line 2 BRGBRGBRG…, line 3, GBRGBRGBR…
- cv::bioinspired::RETINA_COLOR_BAYER: standard bayer sampling
- useRetinaLogSampling: activate retina log sampling, if true, the 2 following parameters can be used
- reductionFactor: only usefull if param useRetinaLogSampling=true, specifies the reduction factor of the output frame (as the center (fovea) is high resolution and corners can be underscaled, then a reduction of the output is allowed without precision leak
- samplingStrength: only usefull if param useRetinaLogSampling=true, specifies the strength of the log scale that is applied
§Note
This alternative version of Retina::create_ext function uses the following default values for its arguments:
- color_sampling_method: RETINA_COLOR_BAYER
- use_retina_log_sampling: false
- reduction_factor: 1.0f
- sampling_strength: 10.0f
Trait Implementations§
Source§impl AlgorithmTrait for Retina
impl AlgorithmTrait for Retina
Source§impl AlgorithmTraitConst for Retina
impl AlgorithmTraitConst for Retina
fn as_raw_Algorithm(&self) -> *const c_void
Source§fn write(&self, fs: &mut impl FileStorageTrait) -> Result<()>
fn write(&self, fs: &mut impl FileStorageTrait) -> Result<()>
Source§fn write_1(&self, fs: &mut impl FileStorageTrait, name: &str) -> Result<()>
fn write_1(&self, fs: &mut impl FileStorageTrait, name: &str) -> Result<()>
Source§fn write_with_name(&self, fs: &Ptr<FileStorage>, name: &str) -> Result<()>
fn write_with_name(&self, fs: &Ptr<FileStorage>, name: &str) -> Result<()>
Source§fn write_with_name_def(&self, fs: &Ptr<FileStorage>) -> Result<()>
fn write_with_name_def(&self, fs: &Ptr<FileStorage>) -> Result<()>
§Note
Source§fn empty(&self) -> Result<bool>
fn empty(&self) -> Result<bool>
Source§fn save(&self, filename: &str) -> Result<()>
fn save(&self, filename: &str) -> Result<()>
Source§fn get_default_name(&self) -> Result<String>
fn get_default_name(&self) -> Result<String>
Source§impl Boxed for Retina
impl Boxed for Retina
Source§unsafe fn from_raw(ptr: <Retina as OpenCVFromExtern>::ExternReceive) -> Self
unsafe fn from_raw(ptr: <Retina as OpenCVFromExtern>::ExternReceive) -> Self
Source§fn into_raw(self) -> <Retina as OpenCVTypeExternContainer>::ExternSendMut
fn into_raw(self) -> <Retina as OpenCVTypeExternContainer>::ExternSendMut
Source§fn as_raw(&self) -> <Retina as OpenCVTypeExternContainer>::ExternSend
fn as_raw(&self) -> <Retina as OpenCVTypeExternContainer>::ExternSend
Source§fn as_raw_mut(&mut self) -> <Retina as OpenCVTypeExternContainer>::ExternSendMut
fn as_raw_mut(&mut self) -> <Retina as OpenCVTypeExternContainer>::ExternSendMut
Source§impl RetinaTrait for Retina
impl RetinaTrait for Retina
fn as_raw_mut_Retina(&mut self) -> *mut c_void
Source§fn get_output_size(&mut self) -> Result<Size>
fn get_output_size(&mut self) -> Result<Size>
Source§fn setup_from_file(
&mut self,
retina_parameter_file: &str,
apply_default_setup_on_failure: bool,
) -> Result<()>
fn setup_from_file( &mut self, retina_parameter_file: &str, apply_default_setup_on_failure: bool, ) -> Result<()>
Source§fn setup_from_file_def(&mut self) -> Result<()>
fn setup_from_file_def(&mut self) -> Result<()>
Source§fn setup_from_storage(
&mut self,
fs: &mut impl FileStorageTrait,
apply_default_setup_on_failure: bool,
) -> Result<()>
fn setup_from_storage( &mut self, fs: &mut impl FileStorageTrait, apply_default_setup_on_failure: bool, ) -> Result<()>
Source§fn setup_from_storage_def(
&mut self,
fs: &mut impl FileStorageTrait,
) -> Result<()>
fn setup_from_storage_def( &mut self, fs: &mut impl FileStorageTrait, ) -> Result<()>
Source§fn setup(&mut self, new_parameters: impl RetinaParametersTrait) -> Result<()>
fn setup(&mut self, new_parameters: impl RetinaParametersTrait) -> Result<()>
Source§fn get_parameters(&mut self) -> Result<RetinaParameters>
fn get_parameters(&mut self) -> Result<RetinaParameters>
Source§fn print_setup(&mut self) -> Result<String>
fn print_setup(&mut self) -> Result<String>
Source§fn setup_op_land_ipl_parvo_channel(
&mut self,
color_mode: bool,
normalise_output: bool,
photoreceptors_local_adaptation_sensitivity: f32,
photoreceptors_temporal_constant: f32,
photoreceptors_spatial_constant: f32,
horizontal_cells_gain: f32,
hcells_temporal_constant: f32,
hcells_spatial_constant: f32,
ganglion_cells_sensitivity: f32,
) -> Result<()>
fn setup_op_land_ipl_parvo_channel( &mut self, color_mode: bool, normalise_output: bool, photoreceptors_local_adaptation_sensitivity: f32, photoreceptors_temporal_constant: f32, photoreceptors_spatial_constant: f32, horizontal_cells_gain: f32, hcells_temporal_constant: f32, hcells_spatial_constant: f32, ganglion_cells_sensitivity: f32, ) -> Result<()>
Source§fn setup_op_land_ipl_parvo_channel_def(&mut self) -> Result<()>
fn setup_op_land_ipl_parvo_channel_def(&mut self) -> Result<()>
Source§fn setup_ipl_magno_channel(
&mut self,
normalise_output: bool,
parasol_cells_beta: f32,
parasol_cells_tau: f32,
parasol_cells_k: f32,
amacrin_cells_temporal_cut_frequency: f32,
v0_compression_parameter: f32,
local_adaptintegration_tau: f32,
local_adaptintegration_k: f32,
) -> Result<()>
fn setup_ipl_magno_channel( &mut self, normalise_output: bool, parasol_cells_beta: f32, parasol_cells_tau: f32, parasol_cells_k: f32, amacrin_cells_temporal_cut_frequency: f32, v0_compression_parameter: f32, local_adaptintegration_tau: f32, local_adaptintegration_k: f32, ) -> Result<()>
Source§fn setup_ipl_magno_channel_def(&mut self) -> Result<()>
fn setup_ipl_magno_channel_def(&mut self) -> Result<()>
Source§fn run(&mut self, input_image: &impl ToInputArray) -> Result<()>
fn run(&mut self, input_image: &impl ToInputArray) -> Result<()>
Source§fn apply_fast_tone_mapping(
&mut self,
input_image: &impl ToInputArray,
output_tone_mapped_image: &mut impl ToOutputArray,
) -> Result<()>
fn apply_fast_tone_mapping( &mut self, input_image: &impl ToInputArray, output_tone_mapped_image: &mut impl ToOutputArray, ) -> Result<()>
Source§fn get_parvo(
&mut self,
retina_output_parvo: &mut impl ToOutputArray,
) -> Result<()>
fn get_parvo( &mut self, retina_output_parvo: &mut impl ToOutputArray, ) -> Result<()>
Source§fn get_parvo_raw_to(
&mut self,
retina_output_parvo: &mut impl ToOutputArray,
) -> Result<()>
fn get_parvo_raw_to( &mut self, retina_output_parvo: &mut impl ToOutputArray, ) -> Result<()>
Source§fn get_magno(
&mut self,
retina_output_magno: &mut impl ToOutputArray,
) -> Result<()>
fn get_magno( &mut self, retina_output_magno: &mut impl ToOutputArray, ) -> Result<()>
Source§fn get_magno_raw_to(
&mut self,
retina_output_magno: &mut impl ToOutputArray,
) -> Result<()>
fn get_magno_raw_to( &mut self, retina_output_magno: &mut impl ToOutputArray, ) -> Result<()>
Source§fn set_color_saturation(
&mut self,
saturate_colors: bool,
color_saturation_value: f32,
) -> Result<()>
fn set_color_saturation( &mut self, saturate_colors: bool, color_saturation_value: f32, ) -> Result<()>
Source§fn set_color_saturation_def(&mut self) -> Result<()>
fn set_color_saturation_def(&mut self) -> Result<()>
Source§impl RetinaTraitConst for Retina
impl RetinaTraitConst for Retina
fn as_raw_Retina(&self) -> *const c_void
Source§fn write(&self, fs: &str) -> Result<()>
fn write(&self, fs: &str) -> Result<()>
Source§fn write_to_storage(&self, fs: &mut impl FileStorageTrait) -> Result<()>
fn write_to_storage(&self, fs: &mut impl FileStorageTrait) -> Result<()>
impl Send for Retina
Auto Trait Implementations§
impl Freeze for Retina
impl RefUnwindSafe for Retina
impl !Sync for Retina
impl Unpin for Retina
impl UnwindSafe for Retina
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<Mat> ModifyInplace for Matwhere
Mat: Boxed,
impl<Mat> ModifyInplace for Matwhere
Mat: Boxed,
Source§unsafe fn modify_inplace<Res>(
&mut self,
f: impl FnOnce(&Mat, &mut Mat) -> Res,
) -> Res
unsafe fn modify_inplace<Res>( &mut self, f: impl FnOnce(&Mat, &mut Mat) -> Res, ) -> Res
Mat
or another similar object. By passing
a mutable reference to the Mat
to this function your closure will get called with the read reference and a write references
to the same Mat
. This is unsafe in a general case as it leads to having non-exclusive mutable access to the internal data,
but it can be useful for some performance sensitive operations. One example of an OpenCV function that allows such in-place
modification is imgproc::threshold
. Read more