Below is the image processing section of the OpenCV user manual: gradient, edge and angular point (Chinese translation), there is a mistake welcome, original:
http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cv.htm
Note: This chapter describes some of the functions of image processing and analysis. Most functions are for two-dimensional arrays. So we use the array to describe "images", and the image does not have to be IPLIMAGE, but also CVMAT's or CVMATND.
Gradient, edge and angle
Translation: Hunnish, abeer
Sobel
Use the extended Sobel operator to calculate the first order, second, third-order or mixed image difference
Void Cvsobel (Const Cvarr * SRC, CVARR * DST, INT XORDER, INT YORDER, INT Aperture_size = 3);
SRC
Enter the image.
DST
Output image.
xorder
X? Directional difference
yorder
The difference between the Y? direction
Aperture_size
Expand
The Sobel core must be 1, 3, 5 or 7. In addition to the size of 1, in other cases, the aperture_size × aperture_size can separate the kernel will be used to calculate the difference. The 3x1 or 1x3 kernel (not a Gaussian smoothing operation) is used for Aperture_Size = 1. There is a special variable? CV_SCHARR (= -1), corresponding to the 3x3 Scharr filter, can give more accurate results than 3x3 Sobel filtering. The SCHARR filter coefficient is:
| -3 0 3 |
| -10 0 10 |
| -3 0 3 |
Correct
The x-direction and the transposed matrix on the Y-direction.
The function CVSobel calculates the image difference by convolving the image with the corresponding kernel:
DST (x, y) = DXORDER YODERSRC / DXXORDER • DYYORDER | (X, Y)
The Sobel operator combines Gaussian smooth and differential to increase the calculation results to noise resistance. Normally, the function call uses the following parameters (xorder = 1, yorder = 0, Aperture_Size = 3) or (Xorder = 0, Yorder = 1, Aperture_SIZE = 3) to calculate image differences in the first order x- or Y-direction. The first case corresponds to:
| -1 0 1 |
| -2 0 2 |
| -1 0 1 |
nuclear. Second corresponding
| -1 -2 -1 |
| 0 0 0 |
| 1 2 1 |
oral
| 1 2 1 |
| 0 0 0 |
| -1 -2 -1 |
Nuclear, it relies on the definition of the image origin (Origin is defined by the IPLImage structure). Image scale transformation is not performed. Therefore, the output image is usually larger than the input image. To prevent overflow, when the input image is 8 bits, the output image is required to be 16 bits. The resulting image can be converted to 8 bits with a function CVConvertscale or CVConvertscaleabs. In addition to the 8-bit image, the function also accepts 32-bit floating point images. All input and output images must be single channels, and the image size or ROI size is consistent.
Laplace
Calculate the image of Laplacian?
Void CVLAPLACE (Const Cvarr * SRC, CVARR * DST, INT Aperture_size = 3);
SRC
Enter the image.
DST
Output image.
Aperture_size
Nuclear size
(As defined in CVSobel).
Function CVLAPLACE calculates the Laplacian of the input image. The method is the second-order x- and y-difference and: DST (x, y) = d2src / dx2 d2src / dy2
The fastest calculation result is given to Aperture_Size = 1, which is equivalent to the following cores to make convolution:
| 0 1 0 |
| 1 -4 1 |
| 0 1 0 |
Similar to the CVSobel function, it is not a scale transformation of the image, and supports the input, the output image type is consistent.
Canny
Edge detection by Canny algorithm
Void Cvcanny (Const Cvarr * Image, Cvarr * Edges, Double Threshold1,
Double Threshold2, int Aperture_size = 3);
Image
Enter the image.
EDGES
Output edge image
Threshold1
First threshold
Threshold2
Second threshold
Aperture_size
Sobel operator kernel size (see CVSobel).
The function Cvcanny uses the Canny algorithm to find the edge of the input image and identify these edges in the output image. Small threshold Threshold1 is used to control the edge connection, and the large threshold is used to control the initial segmentation of the strong edge.
PrecornerDetect
Calculation characteristics for angular point detection
Void CvpRecornerDetect (const cvarr * image, cvarr * corners, int Aperture_size = 3);
Image
Enter the image.
Corners
Array for saving angular coordinates
Aperture_size
The nuclear size of the Sobel operator (see cvsobel).
Function CvPrecornerDetect calculation function DX2DYY DY2DXX - 2DXDYDXY where D? Indicates a first-order image difference, D ?? represents a second-order image difference. The angle is considered to be the local maximum of the function:
// Assuming That the Image IS floating point number
IPLIMAGE * CORNERS = CVCloneImage (Image);
IPLIMAGE * DILATED_CORNERS = CVCloneImage (image);
IPLIMAGE * CORNER_MASK = CVCReateImage (Cvgetsize (Image), 8, 1);
CvpRecornerDetect (Image, Corners, 3);
CVDilate (Corners, Dilated_Corners, 0, 1);
Cvsubs (Corners, Dilated_Corners, Corners);
CVCMPS (Corners, 0, Corner_Mask, CV_CMP_GE);
CVRELEASEIMAGE (& CORNERS);
CVRELEASEIMAGE (& DiLated_Corners);
CorneReiGenvalsandVecs
Calculate the characteristic value and feature vector of the image block for angular detection
Void CvcorneReigenvalsandVECS (Const Cvarr * Image, Cvarr * Eigenvv,
INT block_size, int Aperture_size = 3);
Image
Enter the image.
Eigenvv
The array of saved results. Must be wide than the input image
6 times.
Block_size
Neighborhood
(See discussion).
Aperture_size
The nuclear size of the Sobel operator (see CVSobel).
For each pixel, function CVCorneReiGenvalsandVecs consider the neighbor s (p) of block_size × block_size size, then calculate the differential correlation matrix: | SUMS (P) (Di / DX) 2 SUMS (P) (Di / DX • DI / DY) |
M = | |
SUMS (P) (DI / DX • DI / DY) SUMS (P) (DI / DY) 2 |
It then calculates the characteristic value and feature vectors of the matrix, and stores these values in the output image as follows (λ1, λ2, X1, Y1, X2, Y2), where λ1, λ2 - m, is not sorted (x1) , Y1) - Feature vector, λ1 (x2, y2) - feature vector, λ2
CornermineiGenval
Calculate the minimum feature value of the gradient matrix for angular detection
Void CvcornerMineiGenval (const cvarr * image, cvarr * eigenval, int block_size, int Aperture_size = 3);
Image
Enter the image.
Eigenval
Image of saving minimum feature values
Consistent with the input image size
Block_size
Neighborhood
(See discussion
CvcorneReigenvalsandVecs).
Aperture_size
The core size of the Sobel operator (see CVSobel). When the input image is a floating point number format, the parameter represents the number of floating point filters for calculating the difference.
Similar to CVCornerMineiGenVal, but it only calculates and stores minimum feature values for each pixel point differential correlation matrix, that is, the previous function of MIN (λ1, λ2)
Findcornersubpix
Accurate angular position
Void Cvfindcornersubpix (const cvarr * image, cvpoint2d32f * corners,
INT Count, Cvsize Win, Cvsize Zero_zone,
CVTERMCRITERIA CRITERIA);
Image
Enter the image.
Corners
Input angle point initial coordinates, also stores accurate output coordinates
count
Angular point
Win
Search half size of the window. in case
Win
= (5, 5) So use 5 * 2 1 × 5 * 2 1 = 11 × 11 size search window
ZERO_ZONE
Half size of the dead zone, the dead zone is a region where the center of the search area is doing and calculates. It is used to avoid certain possible strangeness that appear from autocorrelation matrices. Value
(-1, -1) indicates no dead zone.
criteria
The termination condition of the iterative process of the angle point. The determination of the angular point position, or the number of iterations is greater than a set value, or the accuracy reaches a set value.
criteria
Can be the maximum number of iterations, or the accuracy
The function CVFindCornersubpix discovers the angular position of the sub-pixel accuracy by iteration, or the radial saddle point shown in the figure.
Sub-pixel accurate corner locator is based on the observation that every vector from the center q to a point p located within a neighborhood of q is orthogonal to the image gradient at p subject to image and measurement noise Consider the expression.:
εi = Dipit • (Q-Pi)
where DIpi is the image gradient at the one of the points pi in a neighborhood of q The value of q is to be found such that εi is minimized A system of equations may be set up with εi 'set to zero:.. sumi ( DIPI • Dipit) • Q - SUMI (Dipi • Dipit • Pi) = 0
WHERE The Gradients Are Summed within a neighborhood ("search window") of q. Calling the first gradient Term g and the second gradient Term B Gives:
Q = G-1 • B
...................
Goodfeaturestotrack
Determine the strong angle of the image
Void Cvgoodfeaturestotrack (Const Cvarr * Image, Cvarr * EIG_IMAGE, CVARR * TEMP_IMAGE,
CvpoinT2D32F * Corners, Int * Corner_count,
Double Quality_Level, Double Min_Distance,
Const Cvarr * mask = null);
Image
Enter an image,
8-bit or floating point 32- bits, single channel
EIG_IMAGE
Temporary floating point
32-bit image, the size is consistent with the input image
TEMP_IMAGE
Another temporary image, format and size
EIG_IMAGE
Consistent
Corners
Output parameters, detected angle points
Corner_count
Output parameters, the number of angular points detected
Quality_level
Multiplication factor of maximum minimum characteristic value. Define the minimum mass factor that accepts image angle points.
min_distance
Limit factor. The minimum distance of the corner point. use
Euclidian distance
Mask
ROI: Issue of interest. The function calculates the angle in the ROI. If MASK is NULL, select the entire image.
Functions CvgoodFeaStotrack look for angular points with large feature values in the image. This function, first calculate the minimum eigenval value of each pixel point of the input image with CVCORNERMINEiGENVAL, and store the result in the variable eiG_Image. Then do not maximum compression (only the local maximum of the 3x3 neighborhood) is retained. The next step will be less than Quality_LEVEL • Max (EIG_IMAGE (X, Y)). Finally, the function ensures that there is enough distance between all discovery angles (the strongest angle point, then check the distance between the new angular point and the angular point is greater than min_distance).