在这种情况下如何使用interp2

时间:2015-12-18 14:26:07

标签: matlab interpolation

我正在进行图像变形。我有矩阵D和I,我想通过使用函数 interp2 得到J J的定义是

其中D和I的大小相同。

显然,矩阵J中的某些值未分配,我想通过使用interp2为它们赋值。

这是我在不使用interp2

的情况下测试转换的原因
for i=1:1:h
    for j = 1:1:w
         J(i,j+img_d(i,j)) = img_c(i,j);
    end
end

J有很多未分配的价值。 Interp2提供了一些插值算法,但我不知道如何使用。

然后我尝试了以下内容:

img_d = imread('1_d.png');
img_c = imread('1_c.png');
[h,w] = size(img_d);
for i = 1:1:h
    for j = 1:1:w
        J(i,j+img_d(i,j)) = img_c(i,j,1);
    end
end
[Xq,Yq] = meshgrid((1:1:w),(1:1:h));
V = interp2(J,Xq,Yq,'spline');

matlab报告错误:

使用griddedInterpolant时出错 样本值必须是单个或双数组。

interp2中的错误> makegriddedinterp(第228行)     F = griddedInterpolant(varargin {:});

interp2中的错误(第112行)     F = makegriddedinterp({X,Y},V,方法,extrap);

错误是因为J的维度与meshgrid不一样,如何解决这个问题?

这是我为后向扭曲实施的

    img_d = imread('1_d.png');img_c = imread('1_c.png');
    [h,w] = size(img_d);
    J_1 = zeros(h,w);
    J_2 = zeros(h,w);
    J_3 = zeros(h,w);
    for i = 1:1:h
        for j = 1:1:w
            min_value = j;
            col = 1;
            for k = 1:1:w
                temp = j-(k + img_d(i,k));
                if temp < min_value
                    min_value = temp;
                    col = k;
                end
            end
            J_1(i,j) = img_c(i,col,1);
            J_2(i,j) = img_c(i,col,2);
            J_3(i,j) = img_c(i,col,3);
        end
    end
    J = cat(3,J_1,J_2,J_3);

太慢.....

1 个答案:

答案 0 :(得分:0)

答案很简单,只需反转矩阵,interp2用于imresize