2016-11-10 75 views
1

我想用两个通过复制另一个矩阵上采样矩阵,但我很困惑的代码,基本上就是我想要的,如果:手动上采样/复制矩阵

Y = [1,2] 

则升取样版本看起来像:

Up = [1,1,2,2;1,1,2,2] 

是我到目前为止已经写的是:

[row,col] = size(y) 

Up = zeros(row*2,col*2); 

for i = 1:2:row*2 

    for j = 1:2:col*2 

     Up(i, j) = Y(i,j); 
     Up(i+1, j) = Y(i,j); 
     Up(i, j+1) = Y(i,j); 
     Up(i+1, j+1) = Y(i,j); 

    end 
end 

但它说指数超过矩阵尺寸,我的理解是,因为+ 1秒,但我不知道怎么回事,到去这样做......

+0

工作的呢? 'repmat(sort(repmat([1,2],1,2)),2,1)' – Alex

+0

你是在做这个编程练习,还是只需要调整矩阵大小?因为你可以用'kron'或'imresize'做一行...... – beaker

+1

这个问题是相关的:http://stackoverflow.com/questions/16266804/matlab-repeat-every-column-sequentially-n-times – Alex

回答

1

数据:

Up = repelem(Y,n,n); 

搜索解决方案:在使用repelem function(在R2015a引入)

Y = [1,2]; % matrix 
n = 2; % repetition factor 

解n使用索引;使用克罗内克产品

Up = Y(ceil(1/n:1/n:end), ceil(1/n:1/n:end)); 

解决方案:

Up = kron(Y, ones(n)) 
0

我结束了使用的解决方案是:

[row,col] = size(Y); 
Up = zeros(row*2,col*2); 
idx_row = 1; 

for i = 1:D:row 
    idx_col = 1; 
    for j = 1:D:col 

     Up(i:i+1, j:j+1) = repmat(repmat(Y(idx_row,idx_col),1,2),2,1); 
     idx_col = idx_col + 1; 
    end 
    idx_row = idx_row + 1; 
end