gpt4 book ai didi

matlab - 在 Matlab 中使用主成分分析 (PCA) 计算和绘制主成分

转载 作者:太空宇宙 更新时间:2023-11-03 20:34:07 25 4
gpt4 key购买 nike

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

enter image description here

我还没有使用过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)),[])

最佳答案

使用构建您的 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

关于matlab - 在 Matlab 中使用主成分分析 (PCA) 计算和绘制主成分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29851076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com