插值二维矩阵数据

时间:2014-06-20 14:41:20

标签: matlab image-processing interpolation

我有一个二维矩阵,其元素表示可以进行颜色映射并表示为图像的数据。我想插入它们,但是我在一些无法解释的边界上会出现奇怪的行为。

这是原始图像,插值例程的3次迭代后的图像,以及10次插值迭代后的图像。 Original data Data after 3 interpolation iterations Data after 10 interpolation iterations

这是我的代码:

close all

ifactor = 0.9;  % Interpolation factor

% Cut out the meaningless stuff at the edges
bshift_i = bshift(1:16, 1:50);

[m, n] = size(bshift_i);

% Plot the initial data using colormapping
figure()
imagesc(bshift_i, [7.5 10.5])
colorbar()

% Main processing loop
for ii = 1:10
    % Every iteration, we generate a grid that has the same size as the
    % existing data, and another one that whose axis step sizes are
    % (ifactor) times smaller than the existing axes.
    [b_x, b_y] = meshgrid(1:ifactor^(ii - 1):n, 1:ifactor^(ii - 1):m);
    [b_xi, b_yi] = meshgrid(1:ifactor^ii:n, 1:ifactor^ii:m);

    % Interpolate our data and reassign to bshift_i so that we can use it
    % in the next iteration
    bshift_i = interp2(b_x, b_y, bshift_i, b_xi, b_yi);
end

% Plot the interpolated image
figure()
imagesc(bshift_i, [7.5 10.5])
colorbar()

我主要想知道为什么会出现底部和右边的蓝色瑕疵,如果出现这种情况,我该如何解决/避免它们。

1 个答案:

答案 0 :(得分:1)

问题在于如何定义插值的xy范围 我们来看看1:ifactor^(ii - 1):m

  • 对于第一次迭代,您将获得16个值,从116
  • 对于第二次迭代,您可以获得17个值,从115.4
  • 对于第三次迭代,您获得了19个值,从115.58

这足以说明问题。通过第二次迭代,一切都很好,因为上面的插值边界在值范围内。但是,对于第三次迭代,您的上限现在超出了值范围(15.58 > 15.4interp2未进行推断,它返回NaN(在第3次迭代后,bshift_i(end,end)NaN)。这些NaN被绘制为0,因此为蓝色。

要解决此问题,您必须确保xy范围始终包含最后一个值。一种方法可以是:

[b_x, b_y] = meshgrid(linspace(1,n,n./(ifactor^(ii - 1))), ...
                      linspace(1,m,m./(ifactor^(ii - 1))));
[b_xi, b_yi] = meshgrid(linspace(1,n,n./(ifactor^(ii))), ...
                        linspace(1,m,m./(ifactor^(ii))));

linspace始终包含第一个和最后一个元素。但是,第三个输入增量,而是元素数。这就是为什么你必须调整这个条件以适应你的方法。