MIL_ID SrcImageBufId, | //in |
MIL_ID DstImageBufId, | //in |
MIL_ID WarpParam1BufId, | //in |
MIL_ID WarpParam2BufId, | //in |
MIL_INT64 OperationMode, | //in |
MIL_INT64 InterpolationMode | //in |
This function warps an image through either a 3x3 matrix-defined warping or LUTs. You can perform first-order polynomial warpings or perspective polynomial warpings using either a 3x3 coefficients matrix or lookup tables (LUTs). You can perform custom warpings using LUTs.
A warping associates each pixel position of the destination buffer, (xd, yd ), with a specific point in the source buffer, (xs, ys ), and then determines the pixel value of (xd, yd ) from its associated point and from a specified interpolation mode.
When performing a first-order polynomial warping, (xd, yd ) gets associated with (xs, ys ) through the following equations:
x s = a0 x d + a1 y d + a2 .
y s = b0 x d + b1 y d + b2 .
When performing a perspective polynomial warping, (xd, yd ) gets associated with (xs, ys ) through the following equations:
x s = (a0 x d + a1 y d + a2)/(c0 x d + c1 y d + c2).
y s = (b0 x d + b1 y d + b2)/(c0 x d + c1 y d + c2).
When performing a 3x3 matrix-defined warping, WarpParam1BufId specifies the required coefficients (a0...a2, b0...b2 ) or (a0...a2, b0...b2, c0...c2 ) and WarpParam2BufId must be set to M_NULL. The coefficients can be automatically generated using MgenWarpParameter() or can be user-supplied.
When performing a warping using LUTs, xs is determined from (xd, yd ) through one LUT and ys is determined from (xd, yd ) through another LUT. In this case, WarpParam1BufId specifies the LUT for xs and WarpParam2BufId specifies the LUT for ys . The LUTs can be user-supplied or can be automatically generated from a 3x3 coefficient matrix (for a first-order or polynomial warping) using MgenWarpParameter().
Specifies the buffer on which to perform the warping. This buffer can be of any type.
This image buffer must not have a region of interest (ROI) associated with it. Using an image buffer with an ROI will cause an error.
The source image buffer must be unsigned monochrome 8- or 16-bit, or M_BGR32 packed.
Specifies the buffer in which to place the results of the warping. This buffer can be of any type.
This image buffer must not have a region of interest (ROI) associated with it. Using an image buffer with an ROI will cause an error.
Note that after performing the operation, the destination image will not be calibrated, even if the source image was calibrated.
The destination image buffer must be unsigned monochrome 8- or 16-bit, or M_BGR32 packed.
Specifies the buffer containing the matrix coefficients or the LUT buffer from which x s is determined.
When WarpParam1BufId specifies the (a0...a2, b0...b2 ) or (a0...a2, b0...b2, c0...c2 ) coefficients, the coefficients must be in a single-band, 32-bit floating-point buffer that has an M_ARRAY attribute and that has dimensions 3x2 or 3x3. The first row specifies the a n coefficients, the second row specifies the b n coefficients, and the third row specifies the c n coefficients. If the buffer is 3x2, the third row is assumed to be (0, 0, 1).
When WarpParam1BufId specifies the LUT buffer from which x s is determined, the buffer must be a signed 16- or 32-bit integer buffer, have the same X and Y size as the destination image buffer, and have an M_LUT attribute.
Specifies the LUT buffer from which y s is determined. This buffer must be a signed 16- or 32-bit integer buffer, have the same X and Y size as the destination image buffer, and have an M_LUT attribute.
If you are not using LUTs to perform the warping, set WarpParam2BufId to M_NULL.
Specifies the mode of operation. This parameter must be set to one of the values below.
For specifying the mode of
operation
|
|||||||||||||||||||||||||||||||||||||||
Value |
Description
|
MIL system-specific tooltip (†) |
|||||||||||||||||||||||||||||||||||||
M_WARP_LUT + |
Performs the warping through LUTs. (more details...) |
† | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | ||||||||||||||||||
MIL system specific | |||||||||||||||||||||||||||||||||||||||
LUT buffers support signed 16-bit integers only. |
† | d | |||||||||||||||||||||||||||||||||||||
M_WARP_POLYNOMIAL |
Performs the warping through a 3x3 coefficient matrix. (more details...) |
† | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s |
You can add the following value to the above-mentioned value to specify the number of fractional bits in the coordinates of the source point.
For M_WARP_LUT
|
|||||||||||||||||||||||||||||||||||||||
Combination value | Description
|
||||||||||||||||||||||||||||||||||||||
M_FIXED_POINT + n |
Specifies the number of fractional bits for the source point ( x s , y s ). (more details...) |
Specifies the interpolation mode. This parameter must be set to one of the values below.
For specifying the interpolation
mode
|
|||||||||||||||||||||||||||||||||||||||
Value | Description
|
MIL system-specific tooltip (†) |
|||||||||||||||||||||||||||||||||||||
M_DEFAULT |
Same as M_NEAREST_NEIGHBOR + M_OVERSCAN_ENABLE. |
† | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | ||||||||||||||||||
M_BICUBIC + |
Specifies bicubic interpolation. (more details...) |
† | a | b | c | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | |||||||||||||||||||
M_BILINEAR + |
Specifies bilinear interpolation. (more details...) |
† | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | ||||||||||||||||||
M_NEAREST_NEIGHBOR + |
Specifies nearest neighbor interpolation. (more details...) |
† | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s |
You can add one of the following values to the above-mentioned values to specify how to determine the value of a destination pixel when its associated point falls outside the source buffer.
For overscan
|
|||||||||||||||||||||||||||||||||||||||
Combination value |
Description
|
MIL system-specific tooltip (†) |
|||||||||||||||||||||||||||||||||||||
M_OVERSCAN_CLEAR |
Sets the destination pixel to 0, if the associated point falls outside the source buffer. |
† | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | ||||||||||||||||||
M_OVERSCAN_DISABLE |
Leaves the destination pixel as is. |
† | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | ||||||||||||||||||
M_OVERSCAN_ENABLE |
Uses pixels from the source buffer's ancestor buffer. (more details...) |
† | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | ||||||||||||||||||
MIL system specific | |||||||||||||||||||||||||||||||||||||||
Points falling outside the source image are undefined. |
† | d | j | k | l | m | p | q | r | ||||||||||||||||||||||||||||||
M_OVERSCAN_FAST |
Specifies that MIL will automatically select the overscan that optimizes speed, according to the specified operation and the target system. (more details...) |
† | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s |
Header | Include mil.h. |
Library | Use mil.lib; milim.lib. |
DLL | Requires mil.dll; milim.dll. |