影像出现条带斜纹式的乱码——reshape操作中按行与按列取数据的差异

影像出现条带斜纹式的乱码

如图
影像出现条带斜纹式的乱码——reshape操作中按行与按列取数据的差异_第1张图片

目前在两种情景中,出现了上图及类似上图的结果:

Case1:ENVI打开遥感影像,并手动添加头文件,编辑图片行列号(samples and lines),当输入的行列号与图像实际的不符时,会出现类似上图的情况。

Case2:做反演的时候,矩阵变向量输入模型,输出向量再变回矩阵时,reshape使用错误时,出现上图结果。
如,对于输入的矩阵,用以下代码生成输入到模型里面的列向量:

for i=1:m
    for j=1:n
        templat=lat2-0.03*(i-1);   %中心像素的纬度
        templon=lon1+0.03*(j-1);   %中心像素的经度
        
        %生成经纬度的列向量
        lat(count,1)=templat;
        lon(count,1)=templon;
        
        %生成变量LC的列向量
        mm=ceil((53.505-templat)/0.03);
        nn=ceil((templon-73.645)/0.03);
        LC(count)=LCdata(mm,nn);
        
     end
end

此代码是按行取数据,将矩阵变成列向量;
列向量输入模型,输出仍是列向量,需要reshape成矩阵。Matlab里面的reshape默认是按列取数据的,如果需要按照行取数据,需要进行转置处理。例如,把列向量A改变成m*n的矩阵:
1)如果按照取,应该写成:reshape(A,m,n)
2)如果按照取,应该写成:reshape(A‘,n,m)‘

我们看一下Matlab下两句代码结果的差异:

% 按行与按列取数据的不同结果

% 原始的列向量
A=[1,2,3,4,5,6]'

%按列取数据
B=reshape(A,2,3)

%按行取数据
C=reshape(A',3,2)'

输出结果为:

影像出现条带斜纹式的乱码——reshape操作中按行与按列取数据的差异_第2张图片
如果在矩阵变列向量时使用的按行取数据,那么列向量变回矩阵的时候,应该保持同样的按行取数据,否则就会出现如上图的结果(适用于所有的reshape操作)。

你可能感兴趣的:(影像出现条带斜纹式的乱码——reshape操作中按行与按列取数据的差异)