我在 Octave 中实现了这个算法,输出矩阵 (o) 与输入矩阵 (c) 一致,但显示的输出imshow()与输入图像不相似。
你能帮我指出这有什么问题吗?
我正在使用在 Ubuntu 12.10 上运行的 GNU Octave 3.6.2。
在下面的示例中,图像的大小被调整为 2 x 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