summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/image_transforms/assign_image_abstract.h
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/image_transforms/assign_image_abstract.h')
-rw-r--r--ml/dlib/dlib/image_transforms/assign_image_abstract.h196
1 files changed, 196 insertions, 0 deletions
diff --git a/ml/dlib/dlib/image_transforms/assign_image_abstract.h b/ml/dlib/dlib/image_transforms/assign_image_abstract.h
new file mode 100644
index 000000000..5ba262ba5
--- /dev/null
+++ b/ml/dlib/dlib/image_transforms/assign_image_abstract.h
@@ -0,0 +1,196 @@
+// Copyright (C) 2007 Davis E. King (davis@dlib.net)
+// License: Boost Software License See LICENSE.txt for the full license.
+#undef DLIB_ASSIGN_IMAGe_ABSTRACT
+#ifdef DLIB_ASSIGN_IMAGe_ABSTRACT
+
+#include "../pixel.h"
+#include "../image_processing/generic_image.h"
+
+namespace dlib
+{
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename dest_image_type,
+ typename src_image_type
+ >
+ void assign_image (
+ dest_image_type& dest_img,
+ const src_image_type& src_img
+ );
+ /*!
+ requires
+ - src_image_type == an image object that implements the interface defined in
+ dlib/image_processing/generic_image.h or any object convertible to a matrix
+ via mat().
+ - dest_image_type == an image object that implements the interface defined in
+ dlib/image_processing/generic_image.h or an image_view.
+ ensures
+ - #dest_img.nc() == src_img.nc()
+ - #dest_img.nr() == src_img.nr()
+ - for all valid r and c:
+ - performs assign_pixel(#dest_img[r][c],src_img[r][c])
+ (i.e. copies the src image to dest image)
+ !*/
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename dest_image_type,
+ typename src_image_type
+ >
+ void assign_image_scaled (
+ dest_image_type& dest_img,
+ const src_image_type& src_img,
+ const double thresh = 4
+ );
+ /*!
+ requires
+ - src_image_type == an image object that implements the interface defined in
+ dlib/image_processing/generic_image.h or any object convertible to a matrix
+ via mat().
+ - dest_image_type == an image object that implements the interface defined in
+ dlib/image_processing/generic_image.h or an image_view.
+ - thresh > 0
+ ensures
+ - #dest_img.nc() == src_img.nc()
+ - #dest_img.nr() == src_img.nr()
+ - if (dest_img's pixels have a wide enough dynamic range to contain all the
+ pixels in src_img. (Note that dynamic range is determined by the min() and
+ max() pixel_traits properties)) then
+ - performs: assign_image(dest_img, src_img)
+ (i.e. in this case, no scaling is performed. Just a normal color space
+ conversion and copy )
+ - else
+ - #dest_img will be converted to a grayscale image
+ - scales the contents of src_img into the dynamic range of dest_img and then
+ assigns the result into dest_img. The thresh parameter is used to filter
+ source pixel values which are outliers. These outliers will saturate
+ at the edge of the destination image's dynamic range.
+ - Specifically, for all valid r and c:
+ - scales get_pixel_intensity(src_img[r][c]) into the dynamic range
+ of the dest_img. This is done by computing the mean and standard
+ deviation of src_img. Call the mean M and the standard deviation
+ D. Then the scaling from src_img to dest_img is performed using
+ the following mapping:
+ let SRC_UPPER = min(M + thresh*D, max(mat(src_img)))
+ let SRC_LOWER = max(M - thresh*D, min(mat(src_img)))
+ let DEST_UPPER = pixel_traits<image_traits<dest_image_type>::pixel_type>::max()
+ let DEST_LOWER = pixel_traits<image_traits<dest_image_type>::pixel_type>::min()
+
+ MAPPING: [SRC_LOWER, SRC_UPPER] -> [DEST_LOWER, DEST_UPPER]
+
+ Where this mapping is a linear mapping of values from the left range
+ into the right range of values. Source pixel values outside the left
+ range are modified to be at the appropriate end of the range.
+
+ The scaled pixel is then stored in dest_img[r][c].
+ !*/
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename dest_image_type,
+ typename src_pixel_type
+ >
+ void assign_all_pixels (
+ dest_image_type& dest_img,
+ const src_pixel_type& src_pixel
+ );
+ /*!
+ requires
+ - dest_image_type == an image object that implements the interface defined in
+ dlib/image_processing/generic_image.h or an image_view.
+ - pixel_traits<src_pixel_type> is defined
+ ensures
+ - #dest_img.nc() == dest_img.nc()
+ - #dest_img.nr() == dest_img.nr()
+ (i.e. the size of dest_img isn't changed by this function)
+ - for all valid r and c:
+ - performs assign_pixel(#dest_img[r][c],src_pixel)
+ (i.e. assigns the src pixel to every pixel in the dest image)
+ !*/
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename image_type
+ >
+ void assign_border_pixels (
+ image_type& img,
+ long x_border_size,
+ long y_border_size,
+ const typename image_traits<image_type>::pixel_type& p
+ );
+ /*!
+ requires
+ - image_type == an image object that implements the interface defined in
+ dlib/image_processing/generic_image.h or an image_view
+ - x_border_size >= 0
+ - y_border_size >= 0
+ ensures
+ - #img.nc() == img.nc()
+ - #img.nr() == img.nr()
+ (i.e. the size of img isn't changed by this function)
+ - for all valid r such that r+y_border_size or r-y_border_size gives an invalid row
+ - for all valid c such that c+x_border_size or c-x_border_size gives an invalid column
+ - performs assign_pixel(#img[r][c],p)
+ (i.e. assigns the given pixel to every pixel in the border of img)
+ !*/
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename image_type
+ >
+ void zero_border_pixels (
+ image_type& img,
+ long x_border_size,
+ long y_border_size
+ );
+ /*!
+ requires
+ - image_type == an image object that implements the interface defined in
+ dlib/image_processing/generic_image.h or an image_view
+ - x_border_size >= 0
+ - y_border_size >= 0
+ ensures
+ - #img.nc() == img.nc()
+ - #img.nr() == img.nr()
+ (i.e. the size of img isn't changed by this function)
+ - for all valid r such that r+y_border_size or r-y_border_size gives an invalid row
+ - for all valid c such that c+x_border_size or c-x_border_size gives an invalid column
+ - performs assign_pixel(#img[r][c], 0 )
+ (i.e. assigns 0 to every pixel in the border of img)
+ !*/
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename image_type
+ >
+ void zero_border_pixels (
+ image_type& img,
+ rectangle inside
+ );
+ /*!
+ requires
+ - image_type == an image object that implements the interface defined in
+ dlib/image_processing/generic_image.h or an image_view
+ ensures
+ - #img.nc() == img.nc()
+ - #img.nr() == img.nr()
+ (i.e. the size of img isn't changed by this function)
+ - All the pixels in img that are not contained inside the inside rectangle
+ given to this function are set to 0. That is, anything not "inside" is on
+ the border and set to 0.
+ !*/
+
+// ----------------------------------------------------------------------------------------
+
+}
+
+#endif // DLIB_ASSIGN_IMAGe_ABSTRACT
+
+