2013-02-13 50 views
1

我有一个6波段的多光谱图像。多光谱图像的Píxel循环

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 

我得到与结果相同的值,而不是每个像素。

由于提前,

回答

1

我如何

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'); 
      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(row,column,1)= (y5); % and I replace it 
      imagen3_2(row,column,2)= (y12); 
      imagen3_2(row,column,3)= (y20); 
      imagen3_2(row,column,4)= (y50); 
      imagen3_2(row,column,5)= (y80); 
      imagen3_2(row,column,6)= (y90); 
    end 
end 
+0

你又帮了我很多谢,非常感谢你! :) – user1578688 2013-02-13 09:20:57

1

看到夏嘉曦已经回答了你的问题,但是如果你不变量y5很感兴趣,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 
1

为了提高效率,尽量避免在Matlab中出现循环,可以尝试一下l IKE在此:

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)) 

我不能检查代码,所以有可能是错误的;但只是给出其他类型实现的想法。