0

我正在尝试在 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

这是显示问题的图像: 在此处输入图像描述

4

1 回答 1

2

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

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

顺便说一句,您的average_vector函数可以简单地写为res = (a + b) / 2;.

于 2012-04-27T14:02:27.977 回答