【问题标题】:Calculating and Plotting Principal Components using Principal Component Analysis (PCA) in Matlab在 Matlab 中使用主成分分析 (PCA) 计算和绘制主成分
【发布时间】:2015-07-03 06:28:15
【问题描述】:

我有一张图片。我需要确定图像方差最小的轴。一些阅读和搜索使我得出结论,主成分分析(PCA)是最好的选择。任何人都可以帮助我根据其主轴定位图像吗?由于我最近被介绍给 matlab,我发现它有点困难。图像示例如下。我正在尝试旋转图像以便生成直方图。

我还没有使用过 PCA,我目前的代码如下所示

enter code here
I2='image'
I11= bwlabel(I2);
OBB = imOrientedBox(I11);
obbsize=[];
for i=1:size(OBB,1)
   obbsize=[obbsize,OBB(i,3)*OBB(i,4)];
end
[a,i]=max(obbsize);
I11=(imrotate(I2,OBB(i,5)));
imshow(I11,[])

[pks,locs] =findpeaks(sum(I11,2));
[M1,Indx1] = max(pks);
imshow(I11(1:locs(Indx1),1:size(I11,2)),[])

【问题讨论】:

  • 你的输入数据是什么?坐标旋转?您的图像是相对于原点旋转的,还是有偏移?没有足够的信息来帮助您解决问题。请详细说明。
  • 嗨,我会更新问题。
  • 嗯,好的。那么我是否理解您有一组坐标,并且您想将坐标重新投影到基础向量上以消除旋转?从你的图表中很不清楚。此外,您正在使用的一些代码和/或原始图像肯定会有助于您解决问题。现在,我什么都做不了。
  • 另外,您可以使用regionprops 并确定方向角度,然后只需在相反方向应用imrotate 即可旋转图像。无需开箱即用地使用 PCA。
  • @krisdestruction - 哈哈不用担心。不过你的帖子做得很好。 +1。

标签: matlab image-processing computer-vision pca principal-components


【解决方案1】:

使用构建您的 PCA 转换矩阵。 C 是你的变换或旋转矩阵,它将把它变换到你的最高方差方向。

[C,~,~,~,explained] = pca( data );

如果您希望截断组件(例如 1-5 个组件),请移除 PC。如果您不需要截断/减少维度,请忽略此步骤。

C = C(:,1:5);

使用转换C 创建转换后的数据。数据现在将位于新的转换空间中,第一维度是最大方差,第二维度是第二大 方差等。由于您正在寻找最小方差,即最后一个维度

tfData = data * C;

在这个新的转换空间中相应地处理您的数据。要获得您的逆变换并将其放回原始空间,请使用以下内容。

origAxisData = tfData * C';

转置操作C'与逆变换的逆操作inv(C)相同,因为它是正交的as described here。然而,转置的计算速度比逆计算快得多,尤其是对于高维度。

您可以通过绘制 C 的列来绘制主成分/轴/内核,如下所示。

for i = 1:length(end)
    figure; plot( C(:,1) );
end

【讨论】:

  • 谢谢,我想我还有一些工作要做,还有一些事情要理解。我完成后会更新你。再次感谢。
  • 没问题,如果正确,请接受,如果需要更改,请告诉我!
  • 既然你问了,你可以用上面的代码绘制坐标轴,虽然这通常是更高维度的(例如我的维度是 1000)。
  • 嗨,我湿透了 PCA。我可以直接在图像上应用 PCA 还是需要对其进行重构?
  • 这取决于您要捕获的方差。如果您试图获得相邻 x-y 像素的最大方差,则需要提取相邻像素值。无论您要采用哪种方法,您都需要将要捕获的方差维度放入一个特征向量中,其中行代表每个样本数据集,列代表您正在测量的每个维度中的特征值。跨度>
猜你喜欢
  • 2015-07-29
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2012-10-24
  • 2013-04-07
相关资源
最近更新 更多