1

6 バンドのマルチスペクトル画像があります。

imagen1=imread('re_2008.tif')
size2=size(imagen1);
nrow= size2(1);
ncol= size2(2);
nband= size2(3);

私がやりたいことは、すべてのバンドのすべてのピクセル (同じ位置にある) をそれらの値で取得し、補間を行い、他の波長にある新しい値で置き換えることです。コードを見せれば、もっと理解してもらえるかもしれません。

imagen3_2 = zeros(nrow, ncol, nband);
var1= [1 2 3 4 5 6]'; %'

for row=1:nrow;
    for column=1:ncol;
        for band=1:nband;              
            v = imagen1(nrow(1),nband(2),:); v = v(:); 
            t= 0:100;

            interplan= interp1(var1, v, t,'cubic');
            y5 = interplan(5); % I get the value of the interpolation on this position
            y12 = interplan(12);
            y20 = interplan(20);
            y50 = interplan(50);
            y80 = interplan(80);
            y90 = interplan(90);

            imagen3_2(:,:,1)= (y5); % and I replace it
            imagen3_2(:,:,2)= (y12);
            imagen3_2(:,:,3)= (y20);
            imagen3_2(:,:,4)= (y50);
            imagen3_2(:,:,5)= (y80);
            imagen3_2(:,:,6)= (y90);
        end 
    end
end

すべてのピクセルではなく、結果として同じ値が得られます。

前もって感謝します、

4

3 に答える 3

1

効率を上げるために、Matlabでループを回避するようにしてください。次のような方法を試すことができます。

x = [1 2 3 4 5 6];
y = imread('re_2008.tif');
y_size = size((y(:,:,1)));

xi = 0:100;
yi = zeros([y_size,numel(xi)]);

for i_pix=1:prod(y_size)
    [aux_x,aux_y] = ind2sub(y_size,i_pix);
    yi(aux_x,aux_y,:) = interp1(x,squeeze(y(aux_x,aux_y,:)),xi,'cubic');
end

またはこのようにさえ:

x = [1 2 3 4 5 6];
y = imread('re_2008.tif');
xi = 0:100;

yi = arrayfun(@(y1,y2,y3,y4,y5,y6) interp1(x,[y1,y2,y3,y4,y5,y6],xi,'cubic'), ...
y(:,:,1), y(:,:,2), y(:,:,3), y(:,:,4), y(:,:,5), y(:,:,6))

コードを確認できなかったため、エラーが発生した可能性があります。しかし、それは他の種類の実装についてのアイデアを与えることだけです。

于 2013-02-13T10:11:44.977 に答える
1

y5Shai はすでにあなたの質問に答えているようですが、変数などにあまり興味がない場合はy12、コードをコンパクトにして維持しやすくする方法があります。

imagen3_2 = zeros(nrow, ncol, nband);
var1= [1 2 3 4 5 6]'; %'

for row=1:nrow;
    for column=1:ncol;
            v = imagen1(row, column, :); v = v(:); 
            t= 0:100;

            interplan= interp1(var1, v, t,'cubic');

            y = [5 12 20 50 80 90];
            for i = 1:length(y)         
               imagen3_2(row,column, i)= interplan(y(i));% repace interpolation value
            end
    end
end
于 2013-02-13T09:34:47.910 に答える