双线性插值产生的斜条纹

时间:2012-04-27 12:31:14

标签: matlab image-processing interpolation octave

我正在尝试在GNU Octave中编写一个在PGM图像上进行双线性插值的函数。结果并不是那么好:我在整个图像中不断得到不同色调的斜条纹。此外,插值期间添加的行和列比它们应该更暗。有人可以通过指出问题来帮助我吗?

function bilinear(img)
    data = imread(img);

    for n = 1 : 2 : (rows(data) - 1)  * 2
        average = average_vector(data(n, 1:end), data(n+1:1:end));
        data = [data(1:n, 1:end); average; data(n+1:rows(data), 1:end)];
    end

    for n = 1 : 2 : (columns(data) - 1) * 2
        average = average_vector(data(1:rows(data), n), data(1:rows(data), n+1));
        data = [data(1:rows(data), 1:n) average data(1:rows(data), n+1:end)];
    end

    imwrite(data, strcat("out_bilinear_", img));
end

function res = average_vector(a, b)
    res = zeros(size(a));
    for n = 1 : length(a)
        res(n) = (a(n) + b(n)) / 2;
    end
end

这是显示问题的图片: enter image description here

1 个答案:

答案 0 :(得分:2)

您逐行(或逐列)迭代输入图像,但随时插入新行(或列)。我很确定这会搞砸你的索引。

我建议创建一个新的输出矩阵,而不是修改原始矩阵。这也会快得多。

顺便提一下,您的average_vector功能可以简单地写为res = (a + b) / 2;