我正在尝试在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
这是显示问题的图片:
答案 0 :(得分:2)
您逐行(或逐列)迭代输入图像,但随时插入新行(或列)。我很确定这会搞砸你的索引。
我建议创建一个新的输出矩阵,而不是修改原始矩阵。这也会快得多。
顺便提一下,您的average_vector
功能可以简单地写为res = (a + b) / 2;
。