我在Octave中實現了這個算法,根據輸入矩陣(c),輸出矩陣(o)是預期的,但是在imshow()
中顯示的輸出與輸入圖像不相似。實現最近鄰調整大小的扭曲結果圖像Octave
你能幫我指出這有什麼問題嗎?
我使用的是在Ubuntu 12.10上運行的GNU Octave 3.6.2。
在下面的實施例中的圖像進行2
源圖像尺寸調整2:
輸出圖像
源矩陣
ans(:,:,1) =
237 255 34
237 255 34
255 255 255
255 255 255
0 255 0
0 255 0
ans(:,:,2) =
28 242 177
28 242 177
242 242 242
242 242 242
162 242 0
162 242 0
ans(:,:,3) =
36 0 76
36 0 76
0 0 0
0 0 0
232 0 0
232 0 0
輸出矩陣
ans(:,:,1) =
237 237 255 255 34 34
237 237 255 255 34 34
237 237 255 255 34 34
237 237 255 255 34 34
255 255 255 255 255 255
255 255 255 255 255 255
255 255 255 255 255 255
255 255 255 255 255 255
0 0 255 255 0 0
0 0 255 255 0 0
0 0 255 255 0 0
0 0 255 255 0 0
ans(:,:,2) =
28 28 242 242 177 177
28 28 242 242 177 177
28 28 242 242 177 177
28 28 242 242 177 177
242 242 242 242 242 242
242 242 242 242 242 242
242 242 242 242 242 242
242 242 242 242 242 242
162 162 242 242 0 0
162 162 242 242 0 0
162 162 242 242 0 0
162 162 242 242 0 0
ans(:,:,3) =
36 36 0 0 76 76
36 36 0 0 76 76
36 36 0 0 76 76
36 36 0 0 76 76
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
232 232 0 0 0 0
232 232 0 0 0 0
232 232 0 0 0 0
232 232 0 0 0 0
的源代碼
function out_img = nneig(in_img, x_scale, y_scale);
in_img_height = size(in_img, 1);
in_img_width = size(in_img, 2);
in_img_channels = size(in_img, 3);
out_img_height = round(in_img_height * y_scale);
out_img_width = round(in_img_width * x_scale);
out_img_channels = in_img_channels;
out_img = zeros(out_img_height, out_img_width, out_img_channels);
tf_mtx = zeros(3, 3);
tf_mtx(1, 1) = 1/x_scale;
tf_mtx(2, 2) = 1/y_scale;
tf_mtx(3, 3) = 1;
for out_channel = 1:out_img_channels
for out_line = 1:out_img_height
for out_col = 1:out_img_width
org_coord_mtx = floor(tf_mtx * [out_col - 1; out_line - 1; 1]) + [1; 1; 0];
org_coord_line = org_coord_mtx(2, 1);
org_coord_col = org_coord_mtx(1, 1);
out_img(out_line, out_col, out_channel) = in_img(org_coord_line, org_coord_col, out_channel);
end
end
end
endfunction
將輸出矩陣轉換爲uint8,並按預期工作!我知道imresize和interp,但我想這樣做是爲了學術目的。非常感謝! :D對不起,我無法贊成你,因爲我沒有足夠的聲望。 – marcioggs
@marcioggs現在你已經寫了它,至少看看'interp2()'看看它是如何做到的。這就是Octave的美妙之處,你可以自由地看到事情是如何完成的。 – carandraug