使用OPENCV查找内核/矩阵的等级

Finding Rank of Kernel/Matrix using OpenCV

本文关键字:OPENCV 查找 内核 使用      更新时间:2023-10-16

基本上我想找到给定内核/矩阵的等级,以便我可以检查它是否可分开?

OPENCV中是否有一个函数可以找到内核的等级?

如果我正确,我们可以使用SVD类的计算方法来找到单数值,但是之后我们如何计算排名?以下是我使用的代码。

double k = 3;
float kdata[] = {2,0,2,0,1,0,0,0,0};
Mat kernel(k,k,CV_32F, kdata);
Mat s,u,v;
SVD::compute(kernel,s,u,v);

当我们使用SVD类的计算方法时,我们基本上是在计算矩阵的奇异值分解,并且奇异值被计算并存储在第一个参数中,即变量's'。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</p>

现在要找到矩阵的等级,我们要做的就是计算变量's'的非零值的数量。

int count = 0;
for(int i = 0; i < s.rows; i++)
{
  for(int j = 0; j < s.cols; j++)
    {
      if( s.at<float>(i,j) != 0)
        count++;
    }
}
cout<<count<<endl;

'count'变量存储我们的排名。现在,如果等级为1,则过滤器是可分离的。如果超过1,则不能分开。

我要感谢Frik帮助我找到答案。