cvSnakeImage函数更新snake用于最小化它的总能量,并在梯度能量场情况下的,使其对应图像边缘的局部能量极值达到最小。它的能量包括依赖于轮廓形状的内部能量(轮廓越平滑,能量越小),依赖于能量场的外部能量。
void cvSnakeImage( const IplImage* image, CvPoint* points, int length,
float* alpha, float* beta, float* gamma, int coeff_usage,
CvSize win, CvTermCriteria criteria, int calc_gradient=1 );
image
原图像或external energy field。
points
轮廓点(snake)。
length
轮廓中点的数目。
alpha
连续性能量(continuity energy)的权重,一个浮点数,或者每个轮廓点对应一个的浮点数数字。
beta
曲率能量(curvature energy)的权重,类似alpha
gamma
图像能量(image energy)的权重,类似alpha。
coeff_usage
前三个参数使用方式的设定变量:
CV_VALUE 说明前面的alpha,beta,gamma是一个指向一个单独值的指针,每个轮廓点都是用这一相同的参数;
CV_ARRAY 说明alpha,beta,gamma是一个数组,每一个轮廓点(snake)都对应自己的一组alpha,beta,gamma值,因此,三个参数的元素个数必须和轮廓点尺寸相同;
win
每个点用于搜索最小值的邻居的范围,win.width和win.height都必须为奇数;
criteria
终止标准;
calc_gradient
梯度标志。如果非0,函数计算每个图像像素的梯度大小,并将之作为能量场;否则,输入图像本身作为能量场考虑。
参数criteria.epsilon用于定义每次迭代必须移动的最小点的数目,用于确保迭代处理运行。如果某次迭代,移动的点数少于criteria.epsilon或函数执行达到了criteria.max_iter,函数终止。
void cvSnakeImage( const IplImage* image, CvPoint* points, int length,
float* alpha, float* beta, float* gamma, int coeff_usage,
CvSize win, CvTermCriteria criteria, int calc_gradient=1 );
image
原图像或external energy field。
points
轮廓点(snake)。
length
轮廓中点的数目。
alpha
连续性能量(continuity energy)的权重,一个浮点数,或者每个轮廓点对应一个的浮点数数字。
beta
曲率能量(curvature energy)的权重,类似alpha
gamma
图像能量(image energy)的权重,类似alpha。
coeff_usage
前三个参数使用方式的设定变量:
CV_VALUE 说明前面的alpha,beta,gamma是一个指向一个单独值的指针,每个轮廓点都是用这一相同的参数;
CV_ARRAY 说明alpha,beta,gamma是一个数组,每一个轮廓点(snake)都对应自己的一组alpha,beta,gamma值,因此,三个参数的元素个数必须和轮廓点尺寸相同;
win
每个点用于搜索最小值的邻居的范围,win.width和win.height都必须为奇数;
criteria
终止标准;
calc_gradient
梯度标志。如果非0,函数计算每个图像像素的梯度大小,并将之作为能量场;否则,输入图像本身作为能量场考虑。
参数criteria.epsilon用于定义每次迭代必须移动的最小点的数目,用于确保迭代处理运行。如果某次迭代,移动的点数少于criteria.epsilon或函数执行达到了criteria.max_iter,函数终止。