Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image Matlab-主成分在求形状最长轴中的应用_Image_Matlab_Find_Pca_Axes - Fatal编程技术网

Image Matlab-主成分在求形状最长轴中的应用

Image Matlab-主成分在求形状最长轴中的应用,image,matlab,find,pca,axes,Image,Matlab,Find,Pca,Axes,我正试图使用pca函数在二值图像中找到形状的最长轴。这些是2D图像,所以我只希望有两个主成分。如果我将pca应用于图像本身,我会得到许多组件 我的想法是,pca作用的矩阵被处理为行是观察值,列是变量,因此我需要将图像转换为非零像素的x,y坐标列表。这是什么功能?尝试使用find,这是我目前所拥有的: for k=1:cellnum %for each cell... [nucleus, nucnum] = bwlabel(B5.*(cell==k)); %label nuclei i

我正试图使用pca函数在二值图像中找到形状的最长轴。这些是2D图像,所以我只希望有两个主成分。如果我将pca应用于图像本身,我会得到许多组件

我的想法是,pca作用的矩阵被处理为行是观察值,列是变量,因此我需要将图像转换为非零像素的x,y坐标列表。这是什么功能?尝试使用find,这是我目前所拥有的:

 for k=1:cellnum %for each cell...
     [nucleus, nucnum] = bwlabel(B5.*(cell==k)); %label nuclei in cell (Thanks @CapeCode)
    if nucnum == 1
      % other methods
      [row, col] = find(nucleus);
      [coeff, ~, eigen] = pca([row, col]);
      disp (coeff);
    end
我得到每个核的两对系数,如下所示:

    0.8327    0.5537
   -0.5537    0.8327

    0.9791    0.2036
   -0.2036    0.9791

    0.8546    0.5193
   -0.5193    0.8546
所以。。。我真的在做我认为我在做的事情吗

谢谢

奥利


编辑:链接到我先前关于重叠对象识别的问题,以及Cape Code优雅的单线解决方案-

我认为您需要对像素坐标的协方差矩阵进行PCA。看看线程是否有用。我不确定我是否理解。find函数给出了两个变量的n个观测值,即像素的x和y位置列表。如果我在上面做cov,我只得到两个数字…协方差矩阵将是2x2。该矩阵的特征向量将给出主轴。与最大特征向量相关联的将是您想要的。啊哈,所以我应该在find?的结果上使用eig函数。在阅读帮助pca之后,看起来您是对的,它只执行cov,然后执行eig。至于阶数,特征向量没有真正的阶数。相反,每个特征向量都与一个特征值相关联。按照惯例,人们通常按降序排列特征值,但没有固定的规则。我相信你想要的是与最大特征值相关的特征向量。根据帮助pca:根据分量方差,列按降序排列,这意味着第一列是与最大特征向量相关联的列。我希望这有帮助。