使用OpenCV查找内核/矩阵的排名

时间:2016-06-16 07:00:07

标签: c++ opencv matrix

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

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);

1 个答案:

答案 0 :(得分:0)

当我们使用SVD类的计算方法时,我们基本上计算矩阵的奇异值分解,并计算奇异值并将其存储在第一个参数中,即变量'。

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

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;

&#39;计数&#39;变量存储我们的排名。现在,如果rank为1,则过滤器是可分离的。如果它大于1,则不可分离。

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