执行 \(M\times N\) ( \(M>N\)) 矩阵 \(A = U*\Sigma*V^T\) 的奇异值分解。
- 参数
-
| src | 指向以列优先顺序存储的输入 \(M\times N\) 矩阵 \(A\) 的指针。工作完成后,src 将填充 \(U\) 的行,或者不修改(取决于标志 CV_HAL_SVD_MODIFY_A)。 |
| src_step | 矩阵 \(A\) 的两个连续列之间的字节数。 |
| w | 指向矩阵 \(A\) 的奇异值数组的指针(即矩阵 \(\Sigma\) 的前 \(N\) 个对角线元素)。 |
| u | 指向输出 \(M\times N\) 或 \(M\times M\) 矩阵 \(U\) 的指针(大小取决于标志)。如果未使用标志 CV_HAL_SVD_MODIFY_A,则指针必须有效。 |
| u_step | 矩阵 \(U\) 的两个连续行之间的字节数。 |
| vt | 指向 \(N\times N\) 矩阵 \(V^T\) 的数组的指针。 |
| vt_step | 矩阵 \(V^T\) 的两个连续行之间的字节数。 |
| m | 矩阵 \(A\) 中的行数。 |
| n | 矩阵 \(A\) 中的列数。 |
| flags | 算法选项(CV_HAL_SVD_FULL_UV 等的组合)。 |
|
| int | hal_ni_SVD32f (float *src, size_t src_step, float *w, float *u, size_t u_step, float *vt, size_t vt_step, int m, int n, int flags) |
| |
| int | hal_ni_SVD64f (double *src, size_t src_step, double *w, double *u, size_t u_step, double *vt, size_t vt_step, int m, int n, int flags) |
| |
◆ hal_ni_SVD32f()
| int hal_ni_SVD32f |
( |
float * | src, |
|
|
size_t | src_step, |
|
|
float * | w, |
|
|
float * | u, |
|
|
size_t | u_step, |
|
|
float * | vt, |
|
|
size_t | vt_step, |
|
|
int | m, |
|
|
int | n, |
|
|
int | flags ) |
|
inline |
◆ hal_ni_SVD64f()
| int hal_ni_SVD64f |
( |
如果传入NULL,则假定尺度参数c为1.0。否则,指向的变量将被设置为最优尺度。 | src, |
|
|
size_t | src_step, |
|
|
如果传入NULL,则假定尺度参数c为1.0。否则,指向的变量将被设置为最优尺度。 | w, |
|
|
如果传入NULL,则假定尺度参数c为1.0。否则,指向的变量将被设置为最优尺度。 | u, |
|
|
size_t | u_step, |
|
|
如果传入NULL,则假定尺度参数c为1.0。否则,指向的变量将被设置为最优尺度。 | vt, |
|
|
size_t | vt_step, |
|
|
int | m, |
|
|
int | n, |
|
|
int | flags ) |
|
inline |