错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

本文档记录了在MATLAB中进行主成分分析(PCA)时遇到的错误及其解决方法。作者在尝试对6幅图像进行PCA并重建主分量图像时,由于重建图像尺寸不匹配导致reshape错误。修正后的代码将图像大小调整为原始尺寸564*564,从而成功避免了错误。博客展示了如何正确地使用reshape函数以及PCA在图像处理中的应用。
摘要由CSDN通过智能技术生成
%读入6幅图像(每一幅图像的大小是564*564)
f1 = imread('WashingtonDC_Band1_564.tif');
subplot(3,2,1),imshow(f1);
f2 = imread('WashingtonDC_Band2_564.tif');
subplot(3,2,2),imshow(f2);
f3 = imread('WashingtonDC_Band3_564.tif');
subplot(3,2,3),imshow(f3);
f4 = imread('WashingtonDC_Band4_564.tif');
subplot(3,2,4),imshow(f4);
f5 = imread('WashingtonDC_Band5_564.tif');
subplot(3,2,5),imshow(f5);
f6 = imread('WashingtonDC_Band6_564.tif');
subplot(3,2,6),imshow(f6);
% 对图像进行堆叠
S = cat(3,f1,f2,f3,f4,f5,f6);
[X,R] = imstack2vectors(S);
P = princomp(X,6);
% 显示主分量图像
g1 = P.Y(:,1);
g1 = reshape(g1,512,512);
subplot(3,2,1),imshow(g1,[]);
g2 = P.Y(:,2);
g2 = reshape(g2,512,512);
subplot(3,2,2),imshow(g2,[]);
g3 = P.Y(:,3);
g3 = reshape(g3,512,512);
subplot(3,2,3),imshow(g3,[]);
g4 = P.Y(:,4);
g4 = reshape(g4,512,512);
subplot(3,2,4),imshow(g4,[]);
g5 = P.Y(:,5);
g5 = reshape(g5,512,512);
subplot(3,2,5),imshow(g5,[]);
g6 = P.Y(:,6);
g6 = reshape(g6,512,512);
subplot(3,2,6),imshow(g6,[]);

上述代码运行后出现错误:

错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

将代码修改为:

%读入6幅图像(每一幅图像的大小是564*564)
f1 = imread('WashingtonDC_Band1_564.tif');
subplot(3,2,1),imshow(f1);
f2 = imread('WashingtonDC_Band2_564.tif');
subplot(3,2,2),imshow(f2);
f3 = imread('WashingtonDC_Band3_564.tif');
subplot(3,2,3),imshow(f3);
f4 = imread('WashingtonDC_Band4_564.tif');
subplot(3,2,4),imshow(f4);
f5 = imread('WashingtonDC_Band5_564.tif');
subplot(3,2,5),imshow(f5);
f6 = imread('WashingtonDC_Band6_564.tif');
subplot(3,2,6),imshow(f6);
% 对图像进行堆叠
S = cat(3,f1,f2,f3,f4,f5,f6);
[X,R] = imstack2vectors(S);
P = princomp(X,6);
% 显示主分量图像
g1 = P.Y(:,1);
g1 = reshape(g1,564,564);
subplot(3,2,1),imshow(g1,[]);
g2 = P.Y(:,2);
g2 = reshape(g2,564,564);
subplot(3,2,2),imshow(g2,[]);
g3 = P.Y(:,3);
g3 = reshape(g3,564,564);
subplot(3,2,3),imshow(g3,[]);
g4 = P.Y(:,4);
g4 = reshape(g4,564,564);
subplot(3,2,4),imshow(g4,[]);
g5 = P.Y(:,5);
g5 = reshape(g5,564,564);
subplot(3,2,5),imshow(g5,[]);
g6 = P.Y(:,6);
g6 = reshape(g6,564,564);
subplot(3,2,6),imshow(g6,[]);

运行上述修改后的代码之后,就不会出现reshape错误。

待处理的原图 

处理后的主分量图像 

本人错误原因:重建的图像与原图大小不一致导致出错,因此,在重建的reshape语句进行运行时,要确保图像的像素一致。(这是本人学习中的出错与纠错,仅仅是希望能够帮助到有相似错误的朋友,谢谢大家,希望与大家一起进步。)

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值