0

PGM画像で双一次補間を行うGNUOctaveで関数を書き込もうとしています。結果はそれほど素晴らしいものではありません。画像全体にさまざまな色合いの斜めのストライプが表示され続けます。また、補間中に追加される行と列は、本来よりも暗くなります。誰かが問題を指摘して私を助けてくれませんか?

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 に答える