var searchIndex = {}; searchIndex["imageproc"] = {"doc":"","items":[[0,"utils","imageproc","Utils for testing and debugging.",null,null],[3,"TestBuffer","imageproc::utils","Wrapper for image buffers to allow us to write an Arbitrary instance.",null,null],[12,"0","","",0,null],[5,"pixel_diff_summary","","Human readable description of some of the pixels that differ\nbetween left and right, or None if all pixels match.",null,{"inputs":[{"name":"i"},{"name":"j"}],"output":{"name":"option"}}],[5,"significant_pixel_diff_summary","","Human readable description of some of the pixels that differ\nsignifcantly (according to provided function) between left\nand right, or None if all pixels match.",null,{"inputs":[{"name":"i"},{"name":"j"},{"name":"f"}],"output":{"name":"option"}}],[5,"pixel_diffs","","Lists pixels that differ between left and right images.",null,{"inputs":[{"name":"i"},{"name":"j"},{"name":"f"}],"output":{"name":"vec"}}],[5,"describe_pixel_diffs","","Gives a summary description of a list of pixel diffs for use in error messages.",null,{"inputs":[{"name":"i"}],"output":{"name":"string"}}],[5,"load_image_or_panic","","Loads image at given path, panicking on failure.",null,{"inputs":[{"name":"path"}],"output":{"name":"dynamicimage"}}],[5,"gray_bench_image","","Gray image to use in benchmarks. This is neither noise nor\nsimilar to natural images - it's just a convenience method\nto produce an image that's not constant.",null,{"inputs":[{"name":"u32"},{"name":"u32"}],"output":{"name":"grayimage"}}],[5,"rgb_bench_image","","RGB image to use in benchmarks. See comment on gray_bench_image.",null,{"inputs":[{"name":"u32"},{"name":"u32"}],"output":{"name":"rgbimage"}}],[5,"edge_detect_bench_image","","Gray image to use in edge detection benchmarks.\nCreates a white rectangle centered in black background.",null,{"inputs":[{"name":"u32"},{"name":"u32"}],"output":{"name":"grayimage"}}],[6,"GrayTestImage","","8bpp grayscale TestBuffer.",null,null],[6,"RgbTestImage","","24bpp RGB TestBuffer.",null,null],[8,"ArbitraryPixel","","Workaround for not being able to define Arbitrary instances for pixel types\ndefines in other modules.",null,null],[10,"arbitrary","","",1,{"inputs":[{"name":"g"}],"output":{"name":"self"}}],[11,"clone","","",0,null],[11,"arbitrary","","",0,{"inputs":[{"name":"g"}],"output":{"name":"self"}}],[11,"shrink","","",0,null],[11,"fmt","","",0,null],[0,"affine","imageproc","Functions for affine transformations of images.",null,null],[4,"Interpolation","imageproc::affine","How to handle pixels whose pre-image lies between input pixels.",null,null],[13,"Nearest","","Choose the nearest pixel to the pre-image of the\noutput pixel.",2,null],[13,"Bilinear","","Bilinearly interpolate between the four pixels\nclosest to the pre-image of the output pixel.",2,null],[5,"affine","","Applies an affine transformation to an image, or None if the provided\ntransformation is not invertible.\nThe output image has the same dimensions as the input. Output pixels\nwhose pre-image lies outside the input image are set to black.",null,{"inputs":[{"name":"i"},{"name":"affine2"},{"name":"interpolation"}],"output":{"name":"option"}}],[5,"affine_with_default","","Applies an affine transformation to an image, or None if the provided\ntransformation is not invertible.\nThe output image has the same dimensions as the input. Output pixels\nwhose pre-image lies outside the input image are set to default.",null,{"inputs":[{"name":"i"},{"name":"affine2"},{"name":"pixel"},{"name":"interpolation"}],"output":{"name":"option"}}],[5,"rotate","","Rotate an image clockwise about provided center by theta radians.\nThe output image has the same dimensions as the input. Output pixels\nwhose pre-image lies outside the input image are black.",null,null],[5,"rotate_about_center","","Rotate an image clockwise about its center by theta radians.\nThe output image has the same dimensions as the input. Output pixels\nwhose pre-image lies outside the input image are black.",null,{"inputs":[{"name":"i"},{"name":"f32"},{"name":"interpolation"}],"output":{"name":"vecbuffer"}}],[5,"rotate_with_default","","Rotate an image clockwise about provided center by theta radians.\nThe output image has the same dimensions as the input. Output pixels\nwhose pre-image lies outside the input image are set to default.",null,null],[5,"translate","","Translates the input image by t. Note that image coordinates increase from\ntop left to bottom right. Output pixels whose pre-image are not in the input\nimage are set to the boundary pixel in the input image nearest to their pre-image.",null,null],[11,"clone","","",2,null],[11,"eq","","",2,null],[11,"fmt","","",2,null],[0,"contrast","imageproc","Functions for manipulating the contrast of images.",null,null],[5,"otsu_level","imageproc::contrast","Returns the Otsu threshold level of an 8bpp image.\nThis threshold will optimally binarize an image that\ncontains two classes of pixels which have distributions\nwith equal variances. For details see:\nXu, X., et al. Pattern recognition letters 32.7 (2011)",null,{"inputs":[{"name":"i"}],"output":{"name":"u8"}}],[5,"threshold","","Returns a binarized image from an input 8bpp grayscale image\nobtained by applying the given threshold.",null,{"inputs":[{"name":"i"},{"name":"u8"}],"output":{"name":"grayimage"}}],[5,"threshold_mut","","Mutates given image to form a binarized version produced by applying\nthe given threshold.",null,{"inputs":[{"name":"i"},{"name":"u8"}],"output":null}],[5,"histogram","","Returns the histogram of grayscale values in an 8bpp\ngrayscale image.",null,null],[5,"cumulative_histogram","","Returns the cumulative histogram of grayscale values in an 8bpp\ngrayscale image.",null,null],[5,"equalize_histogram_mut","","Equalises the histogram of an 8bpp grayscale image in place.\nhttps://en.wikipedia.org/wiki/Histogram_equalization",null,{"inputs":[{"name":"i"}],"output":null}],[5,"equalize_histogram","","Equalises the histogram of an 8bpp grayscale image.\nhttps://en.wikipedia.org/wiki/Histogram_equalization",null,{"inputs":[{"name":"i"}],"output":{"name":"grayimage"}}],[5,"match_histogram_mut","","Adjusts contrast of an 8bpp grayscale image in place so that its\nhistogram is as close as possible to that of the target image.",null,{"inputs":[{"name":"i"},{"name":"j"}],"output":null}],[5,"match_histogram","","Adjusts contrast of an 8bpp grayscale image so that its\nhistogram is as close as possible to that of the target image.",null,{"inputs":[{"name":"i"},{"name":"j"}],"output":{"name":"grayimage"}}],[0,"corners","imageproc","Functions for detecting corners, also known as interest points.",null,null],[3,"Corner","imageproc::corners","A location and score for a detected corner.\nThe scores need not be comparable between different\ncorner detectors.",null,null],[12,"x","","",3,null],[12,"y","","",3,null],[12,"score","","",3,null],[4,"Fast","","Variants of the [FAST](https://en.wikipedia.org/wiki/Features_from_accelerated_segment_test)\ncorner detector. These classify a point based on its intensity relative to the 16 pixels\nin the Bresenham circle of radius 3 around it. A point P with intensity I is detected as a\ncorner if all pixels in a sufficiently long contiguous section of this circle either\nall have intensity greater than I + t or all have intensity less than\nI - t, for some user-provided threshold t. The score of a corner is\nthe greatest threshold for which the given pixel still qualifies as\na corner.",null,null],[13,"Nine","","Corners require a section of length as least nine.",4,null],[13,"Twelve","","Corners require a section of length as least twelve.",4,null],[5,"corners_fast12","","Finds corners using FAST-12 features. See comment on Fast enum.",null,{"inputs":[{"name":"i"},{"name":"u8"}],"output":{"name":"vec"}}],[5,"corners_fast9","","Finds corners using FAST-9 features. See comment on Fast enum.",null,{"inputs":[{"name":"i"},{"name":"u8"}],"output":{"name":"vec"}}],[5,"fast_corner_score","","The score of a corner detected using the FAST\ndetector is the largest threshold for which this\npixel is still a corner. We input the threshold at which\nthe corner was detected as a lower bound on the search.\nNote that the corner check uses a strict inequality, so if\nthe smallest intensity difference between the center pixel\nand a corner pixel is n then the corner will have a score of n - 1.",null,{"inputs":[{"name":"i"},{"name":"u8"},{"name":"u32"},{"name":"u32"},{"name":"fast"}],"output":{"name":"u8"}}],[11,"eq","","",3,null],[11,"ne","","",3,null],[11,"fmt","","",3,null],[11,"clone","","",3,null],[11,"new","","",3,{"inputs":[{"name":"u32"},{"name":"u32"},{"name":"f32"}],"output":{"name":"corner"}}],[11,"x","","",3,null],[11,"y","","",3,null],[11,"score","","",3,null],[0,"definitions","imageproc","Trait definitions and type aliases.",null,null],[6,"VecBuffer","imageproc::definitions","An ImageBuffer containing Pixels of type P with storage\nVec<P::Subpixel>.",null,null],[8,"HasBlack","","Pixels which have a named Black value.",null,null],[10,"black","","",5,{"inputs":[],"output":{"name":"self"}}],[8,"HasWhite","","Pixels which have a named White value.",null,null],[10,"white","","",6,{"inputs":[],"output":{"name":"self"}}],[8,"Position","","Something with a 2d position.",null,null],[10,"x","","",7,null],[10,"y","","",7,null],[8,"Score","","Something with a score.",null,null],[10,"score","","",8,null],[8,"Clamp","","A type to which we can clamp a value of type T.\nImplementations are not required to handle NaNs gracefully.",null,null],[10,"clamp","","",9,{"inputs":[{"name":"t"}],"output":{"name":"self"}}],[0,"drawing","imageproc","Helpers for drawing basic shapes on images.",null,null],[5,"draw_cross_mut","imageproc::drawing","Draws a colored cross on an image in place. Handles coordinates outside\nimage bounds.",null,{"inputs":[{"name":"i"},{"name":"pixel"},{"name":"i32"},{"name":"i32"}],"output":null}],[5,"draw_cross","","Draws a colored cross on an image. Handles coordinates outside image bounds.",null,{"inputs":[{"name":"i"},{"name":"pixel"},{"name":"i32"},{"name":"i32"}],"output":{"name":"vecbuffer"}}],[5,"draw_line_segment","","Draws as much of the line segment between start and end as lies inside the image bounds.",null,null],[5,"draw_line_segment_mut","","Draws as much of the line segment between start and end as lies inside the image bounds.",null,null],[5,"draw_hollow_rect","","Draws as much of the boundary of a rectangle as lies inside the image bounds.",null,{"inputs":[{"name":"i"},{"name":"rect"},{"name":"pixel"}],"output":{"name":"vecbuffer"}}],[5,"draw_hollow_rect_mut","","Draws as much of the boundary of a rectangle as lies inside the image bounds.",null,{"inputs":[{"name":"i"},{"name":"rect"},{"name":"pixel"}],"output":null}],[5,"draw_filled_rect","","Draw as much of a rectangle, including its boundary, as lies inside the image bounds.",null,{"inputs":[{"name":"i"},{"name":"rect"},{"name":"pixel"}],"output":{"name":"vecbuffer"}}],[5,"draw_filled_rect_mut","","Draw as much of a rectangle, including its boundary, as lies inside the image bounds.",null,{"inputs":[{"name":"i"},{"name":"rect"},{"name":"pixel"}],"output":null}],[0,"edges","imageproc","Functions for detecting edges in images.",null,null],[5,"canny","imageproc::edges","Runs the canny edge detection algorithm on the provided `ImageBuffer`.",null,{"inputs":[{"name":"i"},{"name":"f32"},{"name":"f32"}],"output":{"name":"imagebuffer"}}],[0,"filter","imageproc","Functions for filtering images.",null,null],[3,"Kernel","imageproc::filter","A 2D kernel, used to filter images via convolution.",null,null],[5,"box_filter","","Convolves an 8bpp grayscale image with a kernel of width (2 * x_radius + 1)\nand height (2 * y_radius + 1) whose entries are equal and\nsum to one. i.e. each output pixel is the unweighted mean of\na rectangular region surrounding its corresponding input pixel.\nWe handle locations where the kernel would extend past the image's\nboundary by treating the image as if its boundary pixels were\nrepeated indefinitely.",null,{"inputs":[{"name":"i"},{"name":"u32"},{"name":"u32"}],"output":{"name":"vecbuffer"}}],[5,"gaussian_blur_f32","","Blurs an image using a Gausian of standard deviation sigma.\nThe kernel used has type f32 and all intermediate calculations are performed\nat this type.",null,{"inputs":[{"name":"i"},{"name":"f32"}],"output":{"name":"vecbuffer"}}],[5,"separable_filter","","Returns 2d correlation of view with the outer product of the 1d\nkernels h_filter and v_filter.",null,null],[5,"separable_filter_equal","","Returns 2d correlation of an image with the outer product of the 1d\nkernel filter with itself.",null,null],[5,"filter3x3","","Returns 2d correlation of an image with a 3x3 kernel. Intermediate calculations are\nperformed at type K, and the results clamped to subpixel type S. Pads by continuity.",null,null],[5,"horizontal_filter","","Returns horizontal correlations between an image and a 1d kernel.\nPads by continuity. Intermediate calculations are performed at\ntype K.",null,null],[5,"vertical_filter","","Returns horizontal correlations between an image and a 1d kernel.\nPads by continuity.",null,null],[11,"new","","",10,null],[11,"filter","","Returns 2d correlation of an image. Intermediate calculations are performed\nat type K, and the results converted to pixel Q via f. Pads by continuity.",10,null],[0,"gradients","imageproc","Functions for computing gradients of image intensities.",null,null],[5,"horizontal_sobel","imageproc::gradients","Convolves with the horizontal Sobel kernel to detect horizontal\ngradients in an image.",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[5,"vertical_sobel","","Convolves with the vertical Sobel kernel to detect vertical\ngradients in an image.",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[5,"horizontal_prewitt","","Convolves with the horizontal Prewitt kernel to detect horizontal\ngradients in an image.",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[5,"vertical_prewitt","","Convolves with the vertical Prewitt kernel to detect vertical\ngradients in an image.",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[5,"sobel_gradients","","Returns the magnitudes of gradients in an image using Sobel filters.",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[5,"prewitt_gradients","","Returns the magnitudes of gradients in an image using Prewitt filters.",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[0,"haar","imageproc","Functions for creating and evaluating [Haar-like features](https://en.wikipedia.org/wiki/Haar-like_features).",null,null],[3,"HaarFilter","imageproc::haar","A Haar filter whose value on an integral image is the weighted sum\nof the values of the integral image at the given points.",null,null],[4,"Sign","","Whether the top left region in a Haar filter is counted\nwith positive or negative sign.",null,null],[13,"Positive","","",11,null],[13,"Negative","","",11,null],[5,"enumerate_haar_filters","","Returns a vector of all valid Haar filters for an image with given width and height.",null,{"inputs":[{"name":"u32"},{"name":"u32"}],"output":{"name":"vec"}}],[5,"draw_haar_filter","","Draws the given Haar filter on an image, drawing pixels\nwith a positive sign white and those with a negative sign black.",null,{"inputs":[{"name":"i"},{"name":"haarfilter"}],"output":{"name":"vecbuffer"}}],[5,"draw_haar_filter_mut","","Draws the given Haar filter on an image in place, drawing pixels\nwith a positive sign white and those with a negative sign black.",null,{"inputs":[{"name":"i"},{"name":"haarfilter"}],"output":null}],[11,"fmt","","",11,null],[11,"eq","","",11,null],[11,"clone","","",11,null],[11,"fmt","","",12,null],[11,"eq","","",12,null],[11,"ne","","",12,null],[11,"clone","","",12,null],[11,"evaluate","","Evaluates the Haar filter on an integral image.",12,null],[11,"two_region_horizontal","","Returns the following feature (with signs reversed if Sign == Sign::Negative).\n<pre>\n A B C\n + -\n D E F\n</pre>\nA = (top, left), B.x = left + dx1, C.x = B.x + dx2, and D.y = A.y + dy.",12,{"inputs":[{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"sign"}],"output":{"name":"haarfilter"}}],[11,"two_region_vertical","","Returns the following feature (with signs reversed if Sign == Sign::Negative).\n<pre>\n A B\n +\n C D\n -\n E F\n</pre>\nA = (top, left), B.x = left + dx, C.y = top + dy1, and E.y = C.y + dy2.",12,{"inputs":[{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"sign"}],"output":{"name":"haarfilter"}}],[11,"three_region_horizontal","","Returns the following feature (with signs reversed if Sign == Sign::Negative).\n<pre>\n A B C D\n + - +\n E F G H\n</pre>\nA = (top, left), B.x = left + dx1, C.x = B.x + dx2, D.x = C.x + dx3, and E.y = top + dy.",12,{"inputs":[{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"sign"}],"output":{"name":"haarfilter"}}],[11,"three_region_vertical","","Returns the following feature (with signs reversed if Sign == Sign::Negative).\n<pre>\n A B\n +\n C D\n -\n E F\n +\n G H\n</pre>\nA = (top, left), B.x = left + dx, C.y = top + dy1, E.y = C.y + dy2, and G.y = E.y + dy3.",12,{"inputs":[{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"sign"}],"output":{"name":"haarfilter"}}],[11,"four_region","","Returns the following feature (with signs reversed if Sign == Sign::Negative).\n<pre>\n A B C\n + -\n D E F\n - +\n G H I\n</pre>\nA = (top, left), B.x = left + dx1, C.x = B.x + dx2, D.y = top + dy1, and G.y = D.y + dy2.",12,{"inputs":[{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"u32"},{"name":"sign"}],"output":{"name":"haarfilter"}}],[11,"mul","","",12,null],[0,"hog","imageproc","[HoG features](https://en.wikipedia.org/wiki/Histogram_of_oriented_gradients)\nand helpers for visualizing them.",null,null],[3,"HogOptions","imageproc::hog","Parameters for HoG descriptors.",null,null],[12,"orientations","","Number of gradient orientation bins.",13,null],[12,"signed","","Whether gradients in opposite directions are treated as equal.",13,null],[12,"cell_side","","Width and height of cell in pixels.",13,null],[12,"block_side","","Width and height of block in cells.",13,null],[12,"block_stride","","Offset of the start of one block from the next in cells.",13,null],[3,"HogSpec","","HoG options plus values calculated from these options and the desired\nimage dimensions. Validation must occur when instances of this struct\nare created - functions receiving a spec will assume that it is valid.",null,null],[5,"hog","","Computes the HoG descriptor of an image, or None if the provided\noptions are incompatible with the image size.",null,{"inputs":[{"name":"i"},{"name":"hogoptions"}],"output":{"name":"result"}}],[5,"cell_histograms","","Computes orientation histograms for each cell of an image. Assumes that\nthe provided dimensions are valid.",null,{"inputs":[{"name":"i"},{"name":"hogspec"}],"output":{"name":"array3d"}}],[5,"render_hist_grid","","Visualises an array of orientation histograms.\nThe dimensions of the provided Array3d are orientation bucket,\nhorizontal location of the cell, then vertical location of the cell.\nNote that we ignore block-level aggregation or normalisation here.\nEach rendered star has side length star_side, so the image will have\nwidth grid.lengths[1] * star_side and height grid.lengths[2] * star_side.",null,{"inputs":[{"name":"u32"},{"name":"view3d"},{"name":"bool"}],"output":{"name":"vecbuffer"}}],[11,"eq","","",13,null],[11,"ne","","",13,null],[11,"clone","","",13,null],[11,"fmt","","",13,null],[11,"new","","",13,{"inputs":[{"name":"usize"},{"name":"bool"},{"name":"usize"},{"name":"usize"},{"name":"usize"}],"output":{"name":"hogoptions"}}],[11,"eq","","",14,null],[11,"ne","","",14,null],[11,"clone","","",14,null],[11,"fmt","","",14,null],[11,"from_options","","Returns an error message if image dimensions aren't compatible with the provided options.",14,{"inputs":[{"name":"u32"},{"name":"u32"},{"name":"hogoptions"}],"output":{"name":"result"}}],[11,"descriptor_length","","The total size in floats of the HoG descriptor with these dimensions.",14,null],[0,"stats","imageproc","Statistical properties of images.",null,null],[5,"root_mean_squared_error","imageproc::stats","Returns the square root of the mean of the squares of differences\nbetween all subpixels in left and right. All channels are considered\nequally. If you do not want this (e.g. if using RGBA) then change\nimage formats first.",null,{"inputs":[{"name":"i"},{"name":"j"}],"output":{"name":"f64"}}],[5,"peak_signal_to_noise_ratio","","Returns the peak signal to noise ratio for a clean image and its noisy\naproximation. All channels are considered equally. If you do not want this\n(e.g. if using RGBA) then change image formats first.\nhttps://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio.",null,{"inputs":[{"name":"i"},{"name":"j"}],"output":{"name":"f64"}}],[0,"integralimage","imageproc","Functions for computing [integral images](https://en.wikipedia.org/wiki/Summed_area_table)\nand running sums of rows and columns.",null,null],[5,"integral_image","imageproc::integralimage","Computes the integral image of an 8bpp grayscale image.\nI is the integral image of an image F if I(x, y) is the\nsum of F(x', y') for x' <= x, y' <= y. i.e. each pixel\nin the integral image contains the sum of the pixel intensities\nof all input pixels that are above it and to its left.\nThe integral image has the helpful property that it lets us\ncompute the sum of pixel intensities from any rectangular region\nin the input image in constant time.\nSpecifically, given a rectangle in F with clockwise corners\nA, B, C, D, with A at the upper left, the total pixel intensity\nof this rectangle is I(C) - I(B) - I(D) + I(A).",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[5,"padded_integral_image","","Computes the integral image of the result of padding image with\nits boundary pixels for x_padding columns on either side and y_padding\nrows at its top and bottom. Returned image has width image.width() + 2 * x_padding\nand height image.height() + 2 * y_padding.",null,{"inputs":[{"name":"i"},{"name":"u32"},{"name":"u32"}],"output":{"name":"vecbuffer"}}],[5,"row_running_sum","","Computes the running sum of one row of image, padded\nat the beginning and end. The padding is by continuity.\nTakes a reference to buffer so that this can be reused\nfor all rows in an image.",null,null],[5,"column_running_sum","","Computes the running sum of one column of image, padded\nat the top and bottom. The padding is by continuity.\nTakes a reference to buffer so that this can be reused\nfor all columns in an image.",null,null],[0,"localbinarypatterns","imageproc","Functions for computing [local binary patterns](https://en.wikipedia.org/wiki/Local_binary_patterns).",null,null],[5,"local_binary_pattern","imageproc::localbinarypatterns","Computes the basic local binary pattern of a pixel, or None\nif it's too close to the image boundary.",null,{"inputs":[{"name":"i"},{"name":"u32"},{"name":"u32"}],"output":{"name":"option"}}],[5,"min_shift","","Returns the least value of all rotations of a byte.",null,{"inputs":[{"name":"u8"}],"output":{"name":"u8"}}],[5,"count_transitions","","Number of bit transitions in a byte, counting the last and final bits as adjacent.",null,{"inputs":[{"name":"u8"}],"output":{"name":"u32"}}],[7,"UNIFORM_REPRESENTATIVE_2","","Maps uniform bytes (i.e. those with at most two bit transitions) to their\nleast circular shifts, and non-uniform bytes to 10101010 (an arbitrarily chosen\nnon-uniform representative).",null,null],[7,"MIN_SHIFT","","Lookup table for the least circular shift of a byte.",null,null],[0,"map","imageproc","Functions for mapping over pixels, colors or subpixels of images.",null,null],[5,"map_subpixels","imageproc::map","Applies f to each subpixel of the input image.",null,{"inputs":[{"name":"i"},{"name":"f"}],"output":{"name":"vecbuffer"}}],[5,"map_colors","","Applies f to the color of each pixel in the input image.",null,{"inputs":[{"name":"i"},{"name":"f"}],"output":{"name":"vecbuffer"}}],[5,"map_pixels","","Applies f to each pixel in the input image.",null,{"inputs":[{"name":"i"},{"name":"f"}],"output":{"name":"vecbuffer"}}],[5,"red_channel","","Create a grayscale image by extracting a channel of an RGB image.",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[5,"as_red_channel","","Create an RGB image by embedding a grayscale image in a single channel.",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[5,"green_channel","","Create a grayscale image by extracting a channel of an RGB image.",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[5,"as_green_channel","","Create an RGB image by embedding a grayscale image in a single channel.",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[5,"blue_channel","","Create a grayscale image by extracting a channel of an RGB image.",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[5,"as_blue_channel","","Create an RGB image by embedding a grayscale image in a single channel.",null,{"inputs":[{"name":"i"}],"output":{"name":"vecbuffer"}}],[6,"ChannelMap","","Alias to make uses of WithChannel less syntactically noisy.",null,null],[8,"WithChannel","","The type obtained by replacing the channel type of a given Pixel type.",null,null],[16,"Pixel","","",15,null],[0,"math","imageproc","Assorted mathematical helper functions.",null,null],[3,"Mat2","imageproc::math","Square matrix of dimension 2.",null,null],[12,"m11","","",16,null],[12,"m21","","",16,null],[12,"m12","","",16,null],[12,"m22","","",16,null],[3,"Vec2","","Vector of dimension 2.",null,null],[12,"x","","First component of the vector.",17,null],[12,"y","","Second component of the vector.",17,null],[3,"Affine2","","A 2d affine transformation.",null,null],[12,"linear","","",18,null],[12,"translation","","",18,null],[5,"l2_norm","","",null,null],[5,"cast","","Helper for a conversion that we know can't fail.",null,{"inputs":[{"name":"t"}],"output":{"name":"u"}}],[11,"fmt","","",18,null],[11,"eq","","",18,null],[11,"ne","","",18,null],[11,"clone","","",18,null],[11,"new","","Constructs an Affine2 with given linear transformation\nand translation.",18,{"inputs":[{"name":"mat2"},{"name":"vec2"}],"output":{"name":"affine2"}}],[11,"identity","","The identity transformation.",18,{"inputs":[],"output":{"name":"affine2"}}],[11,"inverse","","Returns the inverse of an affine transformation, or\nNone if its linear part is singular.",18,null],[11,"apply","","Applies the affine transformation to a given vector.",18,null],[0,"multiarray","imageproc","Helpers providing multi-dimensional views of 1d data.",null,null],[3,"Array3d","imageproc::multiarray","A 3d array that owns its data.",null,null],[12,"data","","",19,null],[12,"lengths","","Lengths of the dimensions, from innermost (i.e. fastest-varying) to outermost.",19,null],[3,"View3d","","A view into a 3d array.",null,null],[12,"data","","THe underlying data.",20,null],[12,"lengths","","Lengths of the dimensions, from innermost (i.e. fastest-varying) to outermost.",20,null],[11,"new","","Allocates a new Array3d with the given dimensions.",19,null],[11,"view_mut","","Provides a 3d view of the data.",19,null],[11,"from_raw","","Constructs index from existing data and the lengths of the desired dimensions.",20,null],[11,"data","","Immutable access to the raw data.",20,null],[11,"data_mut","","Mutable access to the raw data.",20,null],[11,"at","","An immutable reference from a 3d index.",20,null],[11,"at_mut","","A mutable reference from a 3d index.",20,null],[11,"inner_slice","","All entries with the given outer dimensions. As the first dimension\nis fastest varying, this is a contiguous slice.",20,null],[11,"inner_slice_mut","","All entries with the given outer dimensions. As the first dimension\nis fastest varying, this is a contiguous slice.",20,null],[0,"noise","imageproc","Functions for adding synthetic noise to images.",null,null],[5,"gaussian_noise","imageproc::noise","Adds independent additive Gaussian noise to all channels\nof an image, with the given mean and standard deviation.",null,{"inputs":[{"name":"i"},{"name":"f64"},{"name":"f64"},{"name":"usize"}],"output":{"name":"vecbuffer"}}],[5,"gaussian_noise_mut","","Adds independent additive Gaussian noise to all channels\nof an image in place, with the given mean and standard deviation.",null,{"inputs":[{"name":"i"},{"name":"f64"},{"name":"f64"},{"name":"usize"}],"output":null}],[5,"salt_and_pepper_noise","","Converts pixels to black or white at the given rate. Black and\nwhite occur with equal probability.",null,{"inputs":[{"name":"i"},{"name":"f64"},{"name":"usize"}],"output":{"name":"vecbuffer"}}],[5,"salt_and_pepper_noise_mut","","Converts pixels to black or white in place at the given rate. Black and\nwhite occur with equal probability.",null,{"inputs":[{"name":"i"},{"name":"f64"},{"name":"usize"}],"output":null}],[0,"pixelops","imageproc","Pixel manipulations.",null,null],[5,"weighted_sum","imageproc::pixelops","Adds pixels with the given weights. Results are clamped to prevent arithmetical overflows.",null,{"inputs":[{"name":"p"},{"name":"p"},{"name":"f32"},{"name":"f32"}],"output":{"name":"p"}}],[0,"rect","imageproc","Basic manipulation of rectangles.",null,null],[3,"Rect","imageproc::rect","A rectangular region of non-zero width and height.",null,null],[3,"RectPosition","","Position of the top left of a rectangle.",null,null],[8,"Region","","A geometrical representation of a set of 2D points with coordinate type T.",null,null],[10,"contains","","",21,null],[11,"eq","","",22,null],[11,"ne","","",22,null],[11,"fmt","","",22,null],[11,"clone","","",22,null],[11,"at","","Reduces possibility of confusing coordinates and dimensions\nwhen specifying rects.",22,{"inputs":[{"name":"i32"},{"name":"i32"}],"output":{"name":"rectposition"}}],[11,"top","","Smallest y-coordinate reached by rect.",22,null],[11,"left","","Smallest x-coordinate reached by rect.",22,null],[11,"bottom","","Greatest y-coordinate reached by rect.",22,null],[11,"right","","Greatest x-coordinate reached by rect.",22,null],[11,"width","","Width of rect.",22,null],[11,"height","","Height of rect.",22,null],[11,"intersect","","Returns the intersection of self and other, or none if they are are disjoint.",22,null],[11,"contains","","",22,null],[11,"contains","","",22,null],[11,"eq","","",23,null],[11,"ne","","",23,null],[11,"fmt","","",23,null],[11,"clone","","",23,null],[11,"of_size","","Construct a rectangle from a position and size. Width and height\nare required to be strictly positive.",23,null],[0,"regionlabelling","imageproc","Functions for finding and labelling connected components of an image.",null,null],[4,"Connectivity","imageproc::regionlabelling","Whether we consider the NW, NE, SW, and SE neighbors of\na pixel to be connected to it, or just its N, S, E, and W\nneighbors.",null,null],[13,"Four","","",24,null],[13,"Eight","","",24,null],[5,"connected_components","","Returns an image of the same size as the input, where each pixel\nis labelled by the connected foreground component it belongs to,\nor 0 if it's in the background. Input pixels are treated as belonging\nto the background if and only if they have value 0.",null,{"inputs":[{"name":"i"},{"name":"connectivity"}],"output":{"name":"vecbuffer"}}],[11,"clone","","",24,null],[11,"eq","","",24,null],[11,"fmt","","",24,null],[0,"suppress","imageproc","Functions for suppressing non-maximal values.",null,null],[5,"suppress_non_maximum","imageproc::suppress","Returned image has zeroes for all inputs pixels which do not have the greatest\nintensity in the (2 * radius + 1) square block centred on them.\nTies are resolved lexicographically.",null,{"inputs":[{"name":"i"},{"name":"u32"}],"output":{"name":"imagebuffer"}}],[5,"local_maxima","","Returns all items which have the highest score in the\n(2 * radius + 1) square block centred on them. Ties are resolved lexicographically.",null,null],[0,"unionfind","imageproc","An implementation of disjoint set forests for union find.",null,null],[3,"DisjointSetForest","imageproc::unionfind","Data structure for efficient union find.",null,null],[11,"new","","Constructs forest of singletons with count elements.",25,{"inputs":[{"name":"usize"}],"output":{"name":"disjointsetforest"}}],[11,"num_trees","","Returns the number of trees in the forest.",25,null],[11,"root","","Returns index of the root of the tree containing i.\nNeeds mutable reference to self for path compression.",25,null],[11,"find","","Returns true if i and j are in the same tree.\nNeed mutable reference to self for path compression.",25,null],[11,"union","","Unions the trees containing i and j.",25,null],[11,"trees","","Returns the elements of each tree.",25,null],[14,"assert_pixels_eq!","imageproc","Panics if any pixels differ between the two input images.",null,null],[14,"assert_pixels_eq_within!","","Panics if any pixels differ between the two images by more than the\ngiven tolerance in a single channel.",null,null],[14,"assert_dimensions_match!","","Panics if image dimensions do not match.",null,null],[11,"new","imageproc::math","",16,{"inputs":[{"name":"n"},{"name":"n"},{"name":"n"},{"name":"n"}],"output":{"name":"mat2"}}],[11,"at_fast","","",16,null],[11,"set_fast","","",16,null],[11,"fmt","","",17,null],[11,"hash","","",17,null],[11,"clone","","",17,null],[11,"decode","","",17,{"inputs":[{"name":"__dn"}],"output":{"name":"result"}}],[11,"encode","","",17,null],[11,"eq","","",17,null],[11,"ne","","",17,null],[11,"new","","Creates a new vector.",17,{"inputs":[{"name":"n"},{"name":"n"}],"output":{"name":"vec2"}}],[11,"inf","","",17,null],[11,"sup","","",17,null],[11,"partial_cmp","","",17,null],[11,"partial_lt","","",17,null],[11,"partial_le","","",17,null],[11,"partial_gt","","",17,null],[11,"partial_ge","","",17,null],[11,"x","","Create a unit vector with its `$compN` component equal to 1.0.",17,{"inputs":[],"output":{"name":"vec2"}}],[11,"y","","Create a unit vector with its `$compN` component equal to 1.0.",17,{"inputs":[],"output":{"name":"vec2"}}],[11,"from","","",17,{"inputs":[{"name":"vec2"}],"output":{"name":"vec2"}}],[11,"as_ref","","",17,null],[11,"as_mut","","",17,null],[11,"index","","",17,null],[11,"index_mut","","",17,null],[11,"shape","","",17,null],[11,"swap","","",17,null],[11,"unsafe_at","","",17,null],[11,"unsafe_set","","",17,null],[11,"at_fast","","Unsafe read access to a vector element by index.",17,null],[11,"set_fast","","Unsafe write access to a vector element by index.",17,null],[11,"repeat","","Creates a new vector with all its components equal to a given value.",17,{"inputs":[{"name":"n"}],"output":{"name":"vec2"}}],[11,"dim","","",17,{"inputs":[{"name":"option"}],"output":{"name":"usize"}}],[11,"len","","",17,null],[11,"add","","",17,null],[11,"sub","","",17,null],[11,"mul","","",17,null],[11,"div","","",17,null],[11,"add","","",17,null],[11,"sub","","",17,null],[11,"mul","","",17,null],[11,"div","","",17,null],[11,"neg","","",17,null],[11,"dot","","",17,null],[11,"translation","","",17,null],[11,"inv_translation","","",17,null],[11,"append_translation_mut","","",17,null],[11,"append_translation","","",17,null],[11,"prepend_translation_mut","","",17,null],[11,"prepend_translation","","",17,null],[11,"set_translation","","",17,null],[11,"sqnorm","","",17,null],[11,"normalize","","",17,null],[11,"normalize_mut","","",17,null],[11,"approx_epsilon","","",17,{"inputs":[{"name":"option"}],"output":{"name":"n"}}],[11,"approx_ulps","","",17,{"inputs":[{"name":"option"}],"output":{"name":"u32"}}],[11,"approx_eq","","",17,null],[11,"approx_eq_eps","","",17,null],[11,"approx_eq_ulps","","",17,null],[11,"one","","",17,{"inputs":[],"output":{"name":"vec2"}}],[11,"zero","","",17,{"inputs":[],"output":{"name":"vec2"}}],[11,"is_zero","","",17,null],[11,"from_iter","","",17,{"inputs":[{"name":"i"}],"output":{"name":"vec2"}}],[11,"max_value","","",17,{"inputs":[],"output":{"name":"vec2"}}],[11,"min_value","","",17,{"inputs":[],"output":{"name":"vec2"}}],[11,"axpy","","",17,null],[11,"iter","","",17,null],[11,"iter_mut","","",17,null],[11,"to_homogeneous","","",17,null],[11,"from","","",17,{"inputs":[{"name":"vec3"}],"output":{"name":"vec2"}}],[11,"translate","","",17,null],[11,"inv_translate","","",17,null],[11,"rotate","","",17,null],[11,"inv_rotate","","",17,null],[11,"transform","","",17,null],[11,"inv_transform","","",17,null],[11,"to_pnt","","",17,null],[11,"as_pnt","","",17,null],[11,"abs","","",17,{"inputs":[{"name":"vec2"}],"output":{"name":"vec2"}}],[11,"rand","","",17,{"inputs":[{"name":"r"}],"output":{"name":"vec2"}}],[11,"mean","","",17,null],[11,"fmt","","",16,null],[11,"hash","","",16,null],[11,"clone","","",16,null],[11,"decode","","",16,{"inputs":[{"name":"__dn"}],"output":{"name":"result"}}],[11,"encode","","",16,null],[11,"eq","","",16,null],[11,"ne","","",16,null],[11,"new_identity","","",16,{"inputs":[{"name":"usize"}],"output":{"name":"mat2"}}],[11,"repeat","","",16,{"inputs":[{"name":"n"}],"output":{"name":"mat2"}}],[11,"as_ref","","",16,null],[11,"as_mut","","",16,null],[11,"from","","",16,{"inputs":[{"name":"mat2"}],"output":{"name":"mat2"}}],[11,"add","","",16,null],[11,"sub","","",16,null],[11,"add","","",16,null],[11,"sub","","",16,null],[11,"mul","","",16,null],[11,"div","","",16,null],[11,"abs","","",16,{"inputs":[{"name":"mat2"}],"output":{"name":"mat2"}}],[11,"zero","","",16,{"inputs":[],"output":{"name":"mat2"}}],[11,"is_zero","","",16,null],[11,"one","","",16,{"inputs":[],"output":{"name":"mat2"}}],[11,"iter","","",16,null],[11,"iter_mut","","",16,null],[11,"dim","","",16,{"inputs":[{"name":"option"}],"output":{"name":"usize"}}],[11,"shape","","",16,null],[11,"swap","","",16,null],[11,"unsafe_at","","",16,null],[11,"unsafe_set","","",16,null],[11,"index","","",16,null],[11,"index_mut","","",16,null],[11,"transpose","","",16,null],[11,"transpose_mut","","",16,null],[11,"approx_epsilon","","",16,{"inputs":[{"name":"option"}],"output":{"name":"n"}}],[11,"approx_ulps","","",16,{"inputs":[{"name":"option"}],"output":{"name":"u32"}}],[11,"approx_eq_eps","","",16,null],[11,"approx_eq_ulps","","",16,null],[11,"nrows","","",16,null],[11,"set_row","","",16,null],[11,"row","","",16,null],[11,"ncols","","",16,null],[11,"set_col","","",16,null],[11,"col","","",16,null],[11,"col_slice","","",16,null],[11,"row_slice","","",16,null],[11,"from_diag","","",16,{"inputs":[{"name":"vec2"}],"output":{"name":"mat2"}}],[11,"diag","","",16,null],[11,"to_homogeneous","","",16,null],[11,"from","","",16,{"inputs":[{"name":"mat3"}],"output":{"name":"mat2"}}],[11,"outer","","",17,null],[11,"eigen_qr","","",16,null],[11,"rand","","",16,{"inputs":[{"name":"r"}],"output":{"name":"mat2"}}],[11,"mean","","",16,null],[11,"mul","","",17,null],[11,"inv","","",16,null],[11,"inv_mut","","",16,null],[11,"det","","",16,null],[11,"mul","","",16,null],[11,"mul","","",17,null],[11,"mul","","",16,null],[11,"mul","","",16,null],[11,"angle_to","","",17,null],[11,"rotation_to","","",17,null],[11,"cross","","",17,null],[11,"cross_matrix","","",17,null],[11,"nrows","","",17,null],[11,"row","","",17,null],[11,"set_row","","",17,null],[11,"canonical_basis","","",17,null],[11,"orthonormal_subspace_basis","","",17,null],[11,"canonical_basis_element","","",17,{"inputs":[{"name":"usize"}],"output":{"name":"option"}}],[11,"sample","","",17,null]],"paths":[[3,"TestBuffer"],[8,"ArbitraryPixel"],[4,"Interpolation"],[3,"Corner"],[4,"Fast"],[8,"HasBlack"],[8,"HasWhite"],[8,"Position"],[8,"Score"],[8,"Clamp"],[3,"Kernel"],[4,"Sign"],[3,"HaarFilter"],[3,"HogOptions"],[3,"HogSpec"],[8,"WithChannel"],[3,"Mat2"],[3,"Vec2"],[3,"Affine2"],[3,"Array3d"],[3,"View3d"],[8,"Region"],[3,"Rect"],[3,"RectPosition"],[4,"Connectivity"],[3,"DisjointSetForest"]]}; initSearch(searchIndex);