2014-10-08 40 views
-9

谁能告诉我如何在Matlab中实现线性插值而不使用interp1函数?我需要像在Matlab中的线性插值

输入[1,0,0,4,0,0,7]; 输出[1,2,3,4,5,6,7];

也请避免循环。

预先感谢您!

+1

'linspace(firstValueInArray,lastValueInArray,lengthOfArray)'会的工作,但它不能保证你在中间指定的非零元素(在上面的例子中,4)将是相同的。如果你想这样做,那么你可以做两次空间(从1到4)和从(4到7),或做一些优化。 – 2014-10-08 02:11:12

+0

在开始之前,您需要从'input'中删除'0'。之后,使用'interp1'很简单。但我建议,如果你想知道你不使用这些数字,因为他们会混淆你,因为元素值总是等于元素位置... – Dan 2014-10-08 08:07:57

回答

0

好吧伙计们。而不是不喜欢的答案,你最好张贴正确的。 我已经想通了

close all; 
Img_in = imread(Img_in_bmp); 

out_name1 = [Img_in_bmp ' upsampledLinear_to_512.bmp']; 

[m,n] = size(Img_in); 
Upsampl_to_512 = zeros(s*(m),s*(n)); 
for i=1:(s*(m-1)) 
    x = rem(i-1,s)/s; 
    u = floor((i-1)/s)+1; 
    for j=1:(s*(n-1)) 
     y = rem((j-1),s)/s; 
     v = floor((j-1)/s)+1; 
     Upsampl_to_512(i,j) = Img_in(u+0,v+0)*(1-x)*(1-y) + Img_in(u+1,v+0)*x*(1-y) + Img_in(u+0,v+1)*(1-x)*y + Img_in(u+1,v+1)*x*y; 
    end 
end 

感谢大家的批评,但我宁愿答案。

+0

“请避免循环”...并发布答案有两个嵌套循环。 XDDD – 2016-07-18 15:11:07