Various mathematical manipulations of 2D images. More...
#include <vcl_cassert.h>#include <vcl_vector.h>#include <vcl_cmath.h>#include <vcl_algorithm.h>#include <vil/vil_image_view.h>#include <vil/vil_view_as.h>#include <vil/vil_plane.h>#include <vil/vil_transform.h>Go to the source code of this file.
Classes | |
| class | vil_math_sqrt_functor |
| Functor class to compute square roots (returns zero if x<0). More... | |
| class | vil_math_scale_functor |
| Functor class to scale by s. More... | |
| class | vil_math_scale_and_translate_functor |
| Functor class to scale by s and translate (offset) by t. More... | |
| class | vil_math_log_functor |
| Functor class to compute logarithms (returns zero if x<=0). More... | |
Functions | |
| template<class T > | |
| void | vil_math_value_range (const vil_image_view< T > &view, T &min_value, T &max_value) |
| Compute minimum and maximum values over view. | |
| VCL_DEFINE_SPECIALIZATION void | vil_math_value_range (const vil_image_view< vil_rgb< vxl_byte > > &rgb_view, vil_rgb< vxl_byte > &min_value, vil_rgb< vxl_byte > &max_value) |
| Compute minimum and maximum values over view. | |
| VCL_DEFINE_SPECIALIZATION void | vil_math_value_range (const vil_image_view< vil_rgb< float > > &rgb_view, vil_rgb< float > &min_value, vil_rgb< float > &max_value) |
| Compute minimum and maximum values over view. | |
| template<class T > | |
| void | vil_math_value_range_percentiles (const vil_image_view< T > &im, const vcl_vector< double > &fraction, vcl_vector< T > &value) |
| Compute the values corresponding to several percentiles of the range of im. | |
| template<class T > | |
| void | vil_math_value_range_percentile (const vil_image_view< T > &im, const double fraction, T &value) |
| Compute the value corresponding to a percentile of the range of im. | |
| template<class imT , class sumT > | |
| sumT | vil_math_ssd (const vil_image_view< imT > &imA, const vil_image_view< imT > &imB, sumT) |
| Sum of squared differences between two images. | |
| template<class imT , class sumT > | |
| sumT | vil_math_ssd_complex (const vil_image_view< vcl_complex< imT > > &imA, const vil_image_view< vcl_complex< imT > > &imB, sumT) |
| Sum squared magnitude differences between two complex images. | |
| template<class aT , class sumT > | |
| void | vil_math_mean_over_planes (const vil_image_view< aT > &src, vil_image_view< sumT > &dest) |
| Calc the mean of each pixel over all the planes. | |
| template<class inT , class outT , class sumT > | |
| void | vil_math_mean_over_planes (const vil_image_view< inT > &src, vil_image_view< outT > &dest, sumT) |
| Calc the mean of each pixel over all the planes. | |
| template<class imT , class sumT > | |
| void | vil_math_sum (sumT &sum, const vil_image_view< imT > &im, unsigned p) |
| Sum of elements in plane p of image. | |
| template<class imT , class sumT > | |
| void | vil_math_mean (sumT &mean, const vil_image_view< imT > &im, unsigned p) |
| Mean of elements in plane p of image. | |
| void | vil_math_median_unimplemented () |
| template<class imT > | |
| void | vil_math_median (imT &median, const vil_image_view< imT > &im, unsigned p) |
| Median of elements in plane p of an image. | |
| VCL_DEFINE_SPECIALIZATION void | vil_math_median (vxl_byte &median, const vil_image_view< vxl_byte > &im, unsigned p) |
| template<class imT , class sumT > | |
| void | vil_math_sum_squares (sumT &sum, sumT &sum_sq, const vil_image_view< imT > &im, unsigned p) |
| Sum of squares of elements in plane p of image. | |
| template<class imT , class sumT > | |
| void | vil_math_mean_and_variance (sumT &mean, sumT &var, const vil_image_view< imT > &im, unsigned p) |
| Mean and variance of elements in plane p of image. | |
| template<class T > | |
| void | vil_math_sqrt (vil_image_view< T > &image) |
| Compute square-root of each pixel element (or zero if negative). | |
| template<class T > | |
| void | vil_math_truncate_range (vil_image_view< T > &image, T min_v, T max_v) |
| Truncate each pixel value so it fits into range [min_v,max_v]. | |
| template<class T > | |
| void | vil_math_scale_values (vil_image_view< T > &image, double scale) |
| Multiply values in-place in image view by scale. | |
| template<class imT , class offsetT > | |
| void | vil_math_scale_and_offset_values (vil_image_view< imT > &image, double scale, offsetT offset) |
| Multiply values in-place in image view by scale and add offset. | |
| template<class imT > | |
| void | vil_math_normalise (vil_image_view< imT > &image) |
| Scale and offset values so their mean is zero and their variance is one. | |
| template<class srcT , class destT > | |
| void | vil_math_rms (const vil_image_view< srcT > &src, vil_image_view< destT > &dest) |
| Computes RMS of each pixel over the planes of src image. | |
| template<class srcT , class destT > | |
| void | vil_math_rss (const vil_image_view< srcT > &src, vil_image_view< destT > &dest) |
| Computes Root Sum of Squares of each pixel over the planes of src image. | |
| template<class srcT , class destT > | |
| void | vil_math_sum_sqr (const vil_image_view< srcT > &src, vil_image_view< destT > &dest) |
| Computes sum of squares of each pixel over the planes of src image. | |
| template<class aT , class bT , class sumT > | |
| void | vil_math_image_sum (const vil_image_view< aT > &imA, const vil_image_view< bT > &imB, vil_image_view< sumT > &im_sum) |
| Compute sum of two images (im_sum = imA+imB). | |
| template<class aT , class bT , class sumT > | |
| void | vil_math_image_product (const vil_image_view< aT > &imA, const vil_image_view< bT > &imB, vil_image_view< sumT > &im_product) |
| Compute pixel-wise product of two images (im_prod(i,j) = imA(i,j)*imB(i,j). | |
| template<class aT , class bT , class maxT > | |
| void | vil_math_image_max (const vil_image_view< aT > &imA, const vil_image_view< bT > &imB, vil_image_view< maxT > &im_max) |
| Compute the max of two images (im_max = max(imA, imB)). | |
| template<class aT , class bT , class minT > | |
| void | vil_math_image_min (const vil_image_view< aT > &imA, const vil_image_view< bT > &imB, vil_image_view< minT > &im_min) |
| Compute the min of two images (im_min = min(imA, imB)). | |
| template<class aT , class bT , class sumT > | |
| void | vil_math_image_ratio (const vil_image_view< aT > &imA, const vil_image_view< bT > &imB, vil_image_view< sumT > &im_ratio) |
| Compute pixel-wise ratio of two images : im_ratio(i,j) = imA(i,j)/imB(i,j). | |
| template<class aT , class bT , class sumT > | |
| void | vil_math_image_difference (const vil_image_view< aT > &imA, const vil_image_view< bT > &imB, vil_image_view< sumT > &im_sum) |
| Compute difference of two images (im_sum = imA-imB). | |
| template<class aT , class bT , class sumT > | |
| void | vil_math_image_abs_difference (const vil_image_view< aT > &imA, const vil_image_view< bT > &imB, vil_image_view< sumT > &im_sum) |
| Compute absolute difference of two images (im_sum = |imA-imB|). | |
| template<class aT , class bT > | |
| double | vil_math_image_abs_difference (const vil_image_view< aT > &imA, const vil_image_view< bT > &imB) |
| Compute sum of absolute difference between two images (|imA-imB|). | |
| template<class aT , class bT , class magT > | |
| void | vil_math_image_vector_mag (const vil_image_view< aT > &imA, const vil_image_view< bT > &imB, vil_image_view< magT > &im_mag) |
| Compute magnitude of two images taken as vector components, sqrt(A^2 + B^2). | |
| template<class aT , class bT , class scaleT > | |
| void | vil_math_add_image_fraction (vil_image_view< aT > &imA, scaleT fa, const vil_image_view< bT > &imB, scaleT fb) |
| imA = fa*imA + fb*imB (Useful for moving averages!). | |
| template<class aT , class sumT > | |
| void | vil_math_integral_image (const vil_image_view< aT > &imA, vil_image_view< sumT > &im_sum) |
| Compute integral image im_sum(i+1,j+1) = sum (x<=i,y<=j) imA(x,y). | |
| template<class aT , class sumT > | |
| void | vil_math_integral_sqr_image (const vil_image_view< aT > &imA, vil_image_view< sumT > &im_sum, vil_image_view< sumT > &im_sum_sq) |
| Compute integral image im_sum_sq(i+1,j+1) = sum (x<=i,y<=j) imA(x,y)^2. | |
Various mathematical manipulations of 2D images.
Definition in file vil_math.h.
| void vil_math_add_image_fraction | ( | vil_image_view< aT > & | imA, |
| scaleT | fa, | ||
| const vil_image_view< bT > & | imB, | ||
| scaleT | fb | ||
| ) | [inline] |
imA = fa*imA + fb*imB (Useful for moving averages!).
Can do running sum using vil_add_image_fraction(running_mean,1-f,new_im,f) to update current mean by a fraction f of new_im
Definition at line 933 of file vil_math.h.
| void vil_math_image_abs_difference | ( | const vil_image_view< aT > & | imA, |
| const vil_image_view< bT > & | imB, | ||
| vil_image_view< sumT > & | im_sum | ||
| ) | [inline] |
Compute absolute difference of two images (im_sum = |imA-imB|).
Definition at line 825 of file vil_math.h.
| double vil_math_image_abs_difference | ( | const vil_image_view< aT > & | imA, |
| const vil_image_view< bT > & | imB | ||
| ) | [inline] |
Compute sum of absolute difference between two images (|imA-imB|).
Definition at line 861 of file vil_math.h.
| void vil_math_image_difference | ( | const vil_image_view< aT > & | imA, |
| const vil_image_view< bT > & | imB, | ||
| vil_image_view< sumT > & | im_sum | ||
| ) | [inline] |
Compute difference of two images (im_sum = imA-imB).
Definition at line 792 of file vil_math.h.
| void vil_math_image_max | ( | const vil_image_view< aT > & | imA, |
| const vil_image_view< bT > & | imB, | ||
| vil_image_view< maxT > & | im_max | ||
| ) | [inline] |
Compute the max of two images (im_max = max(imA, imB)).
Definition at line 679 of file vil_math.h.
| void vil_math_image_min | ( | const vil_image_view< aT > & | imA, |
| const vil_image_view< bT > & | imB, | ||
| vil_image_view< minT > & | im_min | ||
| ) | [inline] |
Compute the min of two images (im_min = min(imA, imB)).
Definition at line 712 of file vil_math.h.
| void vil_math_image_product | ( | const vil_image_view< aT > & | imA, |
| const vil_image_view< bT > & | imB, | ||
| vil_image_view< sumT > & | im_product | ||
| ) | [inline] |
Compute pixel-wise product of two images (im_prod(i,j) = imA(i,j)*imB(i,j).
If images have the same number of planes, then im_prod(i,j,p) = imA(i,j,p)*imB(i,j,p). If imB only has one plane, then im_prod(i,j,p) = imA(i,j,p)*imB(i,j,0).
Definition at line 640 of file vil_math.h.
| void vil_math_image_ratio | ( | const vil_image_view< aT > & | imA, |
| const vil_image_view< bT > & | imB, | ||
| vil_image_view< sumT > & | im_ratio | ||
| ) | [inline] |
Compute pixel-wise ratio of two images : im_ratio(i,j) = imA(i,j)/imB(i,j).
Pixels cast to type sumT before calculation. If imB(i,j,p)==0, im_ration(i,j,p)=0
If images have the same number of planes, then im_ratio(i,j,p) = imA(i,j,p)/imB(i,j,p). If imB only has one plane, then im_ratio(i,j,p) = imA(i,j,p)/imB(i,j,0).
Definition at line 751 of file vil_math.h.
| void vil_math_image_sum | ( | const vil_image_view< aT > & | imA, |
| const vil_image_view< bT > & | imB, | ||
| vil_image_view< sumT > & | im_sum | ||
| ) | [inline] |
Compute sum of two images (im_sum = imA+imB).
Definition at line 604 of file vil_math.h.
| void vil_math_image_vector_mag | ( | const vil_image_view< aT > & | imA, |
| const vil_image_view< bT > & | imB, | ||
| vil_image_view< magT > & | im_mag | ||
| ) | [inline] |
Compute magnitude of two images taken as vector components, sqrt(A^2 + B^2).
Definition at line 893 of file vil_math.h.
| void vil_math_integral_image | ( | const vil_image_view< aT > & | imA, |
| vil_image_view< sumT > & | im_sum | ||
| ) | [inline] |
Compute integral image im_sum(i+1,j+1) = sum (x<=i,y<=j) imA(x,y).
Useful thing for quickly computing mean over large regions, as demonstrated in Viola and Jones (CVPR01). The sum of elements in the ni x nj square with corner (i,j) is given by im_sum(i,j)+im_sum(i+ni,j+nj)-im_sum(i+ni,j)-im_sum(i,j+nj)
Definition at line 964 of file vil_math.h.
| void vil_math_integral_sqr_image | ( | const vil_image_view< aT > & | imA, |
| vil_image_view< sumT > & | im_sum, | ||
| vil_image_view< sumT > & | im_sum_sq | ||
| ) | [inline] |
Compute integral image im_sum_sq(i+1,j+1) = sum (x<=i,y<=j) imA(x,y)^2.
Also computes sum im_sum(i+1,j+1) = sum (x<=i,y<=j) imA(x,y)
Useful thing for quickly computing mean and variance over large regions, as demonstrated in Viola and Jones (CVPR01).
The sum of elements in the ni x nj square with corner (i,j) is given by im_sum(i,j)+im_sum(i+ni,j+nj)-im_sum(i+ni,j)-im_sum(i,j+nj)
Similar result holds for sum of squares, allowing rapid calculation of variance etc.
Definition at line 1013 of file vil_math.h.
| void vil_math_mean | ( | sumT & | mean, |
| const vil_image_view< imT > & | im, | ||
| unsigned | p | ||
| ) | [inline] |
Mean of elements in plane p of image.
Definition at line 257 of file vil_math.h.
| void vil_math_mean_and_variance | ( | sumT & | mean, |
| sumT & | var, | ||
| const vil_image_view< imT > & | im, | ||
| unsigned | p | ||
| ) | [inline] |
Mean and variance of elements in plane p of image.
Definition at line 307 of file vil_math.h.
| void vil_math_mean_over_planes | ( | const vil_image_view< aT > & | src, |
| vil_image_view< sumT > & | dest | ||
| ) | [inline] |
Calc the mean of each pixel over all the planes.
Definition at line 200 of file vil_math.h.
| void vil_math_mean_over_planes | ( | const vil_image_view< inT > & | src, |
| vil_image_view< outT > & | dest, | ||
| sumT | |||
| ) | [inline] |
Calc the mean of each pixel over all the planes.
Definition at line 222 of file vil_math.h.
| void vil_math_median | ( | imT & | median, |
| const vil_image_view< imT > & | im, | ||
| unsigned | p | ||
| ) | [inline] |
Median of elements in plane p of an image.
For integral types, if the median is half way between two values, the result will be the floor of the average.
Definition at line 275 of file vil_math.h.
| VCL_DEFINE_SPECIALIZATION void vil_math_median | ( | vxl_byte & | median, |
| const vil_image_view< vxl_byte > & | im, | ||
| unsigned | p | ||
| ) |
Definition at line 21 of file vil_math.cxx.
| void vil_math_median_unimplemented | ( | ) |
Definition at line 14 of file vil_math.cxx.
| void vil_math_normalise | ( | vil_image_view< imT > & | image | ) | [inline] |
Scale and offset values so their mean is zero and their variance is one.
Only works on signed types!
Definition at line 447 of file vil_math.h.
| void vil_math_rms | ( | const vil_image_view< srcT > & | src, |
| vil_image_view< destT > & | dest | ||
| ) | [inline] |
Computes RMS of each pixel over the planes of src image.
Dest is a single plane image,
Summation is performed using type destT
Definition at line 462 of file vil_math.h.
| void vil_math_rss | ( | const vil_image_view< srcT > & | src, |
| vil_image_view< destT > & | dest | ||
| ) | [inline] |
Computes Root Sum of Squares of each pixel over the planes of src image.
Dest is a single plane image,
Differs from RMS by the scaling factor sqrt(nplanes) Summation is performed using type destT
Definition at line 512 of file vil_math.h.
| void vil_math_scale_and_offset_values | ( | vil_image_view< imT > & | image, |
| double | scale, | ||
| offsetT | offset | ||
| ) | [inline] |
Multiply values in-place in image view by scale and add offset.
Definition at line 428 of file vil_math.h.
| void vil_math_scale_values | ( | vil_image_view< T > & | image, |
| double | scale | ||
| ) | [inline] |
Multiply values in-place in image view by scale.
Definition at line 420 of file vil_math.h.
| void vil_math_sqrt | ( | vil_image_view< T > & | image | ) | [inline] |
Compute square-root of each pixel element (or zero if negative).
Definition at line 331 of file vil_math.h.
| sumT vil_math_ssd | ( | const vil_image_view< imT > & | imA, |
| const vil_image_view< imT > & | imB, | ||
| sumT | |||
| ) | [inline] |
Sum of squared differences between two images.
Definition at line 163 of file vil_math.h.
| sumT vil_math_ssd_complex | ( | const vil_image_view< vcl_complex< imT > > & | imA, |
| const vil_image_view< vcl_complex< imT > > & | imB, | ||
| sumT | |||
| ) | [inline] |
Sum squared magnitude differences between two complex images.
Definition at line 181 of file vil_math.h.
| void vil_math_sum | ( | sumT & | sum, |
| const vil_image_view< imT > & | im, | ||
| unsigned | p | ||
| ) | [inline] |
Sum of elements in plane p of image.
Definition at line 240 of file vil_math.h.
| void vil_math_sum_sqr | ( | const vil_image_view< srcT > & | src, |
| vil_image_view< destT > & | dest | ||
| ) | [inline] |
Computes sum of squares of each pixel over the planes of src image.
Dest is a single plane image,
Summation is performed using type destT
Definition at line 562 of file vil_math.h.
| void vil_math_sum_squares | ( | sumT & | sum, |
| sumT & | sum_sq, | ||
| const vil_image_view< imT > & | im, | ||
| unsigned | p | ||
| ) | [inline] |
Sum of squares of elements in plane p of image.
Definition at line 290 of file vil_math.h.
| void vil_math_truncate_range | ( | vil_image_view< T > & | image, |
| T | min_v, | ||
| T | max_v | ||
| ) | [inline] |
Truncate each pixel value so it fits into range [min_v,max_v].
If value < min_v value=min_v If value > max_v value=max_v
Definition at line 342 of file vil_math.h.
| void vil_math_value_range | ( | const vil_image_view< T > & | view, |
| T & | min_value, | ||
| T & | max_value | ||
| ) | [inline] |
Compute minimum and maximum values over view.
Definition at line 21 of file vil_math.h.
| VCL_DEFINE_SPECIALIZATION void vil_math_value_range | ( | const vil_image_view< vil_rgb< vxl_byte > > & | rgb_view, |
| vil_rgb< vxl_byte > & | min_value, | ||
| vil_rgb< vxl_byte > & | max_value | ||
| ) | [inline] |
Compute minimum and maximum values over view.
Definition at line 51 of file vil_math.h.
| VCL_DEFINE_SPECIALIZATION void vil_math_value_range | ( | const vil_image_view< vil_rgb< float > > & | rgb_view, |
| vil_rgb< float > & | min_value, | ||
| vil_rgb< float > & | max_value | ||
| ) | [inline] |
Compute minimum and maximum values over view.
Definition at line 63 of file vil_math.h.
| void vil_math_value_range_percentile | ( | const vil_image_view< T > & | im, |
| const double | fraction, | ||
| T & | value | ||
| ) | [inline] |
Compute the value corresponding to a percentile of the range of im.
Percentile is expressed as fraction, e.g. 0.05, or 0.95.
| im | The image to examine. |
| fraction | The fraction of the data range (from the lower end). |
| value | The image data value corresponding to the specified percentile. |
Definition at line 148 of file vil_math.h.
| void vil_math_value_range_percentiles | ( | const vil_image_view< T > & | im, |
| const vcl_vector< double > & | fraction, | ||
| vcl_vector< T > & | value | ||
| ) | [inline] |
Compute the values corresponding to several percentiles of the range of im.
Percentiles are expressed as fraction, e.g. 0.05, or 0.95.
| im | The image to examine. |
| fraction | The fractions of the data range (from the lower end). |
| value | The image data values corresponding to the specified percentiles. |
Definition at line 83 of file vil_math.h.
1.7.5.1