基本上我想找到给定内核/矩阵的等级,以便我可以检查它是否可分离?
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);
答案 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帮助我找到答案。