Octave:显示灰度矩阵显示和全黑图像的功能
Octave: Function to display greyscale matrix shows and all black image instead
我正在做 Andrew Ng 在 Coursera 上的机器学习课程的作业 3。作业附带一个包含 5000x400 矩阵(表示为 X)的 .mat,其值介于 0 和 1 之间,对应于灰度。每行代表一张尺寸为 20x20 的图像。
作业附带一个预制函数,用于在一种网格中显示图像,称为 DisplayData(X, width)。
问题是,这个函数只显示一个全黑的图形。由于此代码是课程标准代码,我根本没有弄乱它,所以我猜我的 Octave 一定有问题。我正在使用 popOS 并使用 'apt' 通过终端安装 Octave。我在开放 shell 中使用 Octave 控制台。无论如何,我会在这里留下函数的代码:
function [h, display_array] = displayData(X, example_width)
%DISPLAYDATA Display 2D data in a nice grid
% [h, display_array] = DISPLAYDATA(X, example_width) displays 2D data
% stored in X in a nice grid. It returns the figure handle h and the
% displayed array if requested.
% Set example_width automatically if not passed in
if ~exist('example_width', 'var') || isempty(example_width)
example_width = round(sqrt(size(X, 2)));
end
% Gray Image
colormap(gray);
% Compute rows, cols
[m n] = size(X);
example_height = (n / example_width);
% Compute number of items to display
display_rows = floor(sqrt(m));
display_cols = ceil(m / display_rows);
% Between images padding
pad = 1;
% Setup blank display
display_array = - ones(pad + display_rows * (example_height + pad), ...
pad + display_cols * (example_width + pad));
% Copy each example into a patch on the display array
curr_ex = 1;
for j = 1:display_rows
for i = 1:display_cols
if curr_ex > m,
break;
end
% Copy the patch
% Get the max value of the patch
max_val = max(abs(X(curr_ex, :)));
display_array(pad + (j - 1) * (example_height + pad) + (1:example_height), ...
pad + (i - 1) * (example_width + pad) + (1:example_width)) = ...
reshape(X(curr_ex, :), example_height, example_width) / max_val;
curr_ex = curr_ex + 1;
end
if curr_ex > m,
break;
end
end
% Display Image
h = imagesc(display_array, [-1 1]);
% Do not show axis
axis image off
drawnow;
end
使用命令graphics_toolkit('gnuplot');
解决了问题!
我正在做 Andrew Ng 在 Coursera 上的机器学习课程的作业 3。作业附带一个包含 5000x400 矩阵(表示为 X)的 .mat,其值介于 0 和 1 之间,对应于灰度。每行代表一张尺寸为 20x20 的图像。
作业附带一个预制函数,用于在一种网格中显示图像,称为 DisplayData(X, width)。
问题是,这个函数只显示一个全黑的图形。由于此代码是课程标准代码,我根本没有弄乱它,所以我猜我的 Octave 一定有问题。我正在使用 popOS 并使用 'apt' 通过终端安装 Octave。我在开放 shell 中使用 Octave 控制台。无论如何,我会在这里留下函数的代码:
function [h, display_array] = displayData(X, example_width)
%DISPLAYDATA Display 2D data in a nice grid
% [h, display_array] = DISPLAYDATA(X, example_width) displays 2D data
% stored in X in a nice grid. It returns the figure handle h and the
% displayed array if requested.
% Set example_width automatically if not passed in
if ~exist('example_width', 'var') || isempty(example_width)
example_width = round(sqrt(size(X, 2)));
end
% Gray Image
colormap(gray);
% Compute rows, cols
[m n] = size(X);
example_height = (n / example_width);
% Compute number of items to display
display_rows = floor(sqrt(m));
display_cols = ceil(m / display_rows);
% Between images padding
pad = 1;
% Setup blank display
display_array = - ones(pad + display_rows * (example_height + pad), ...
pad + display_cols * (example_width + pad));
% Copy each example into a patch on the display array
curr_ex = 1;
for j = 1:display_rows
for i = 1:display_cols
if curr_ex > m,
break;
end
% Copy the patch
% Get the max value of the patch
max_val = max(abs(X(curr_ex, :)));
display_array(pad + (j - 1) * (example_height + pad) + (1:example_height), ...
pad + (i - 1) * (example_width + pad) + (1:example_width)) = ...
reshape(X(curr_ex, :), example_height, example_width) / max_val;
curr_ex = curr_ex + 1;
end
if curr_ex > m,
break;
end
end
% Display Image
h = imagesc(display_array, [-1 1]);
% Do not show axis
axis image off
drawnow;
end
使用命令graphics_toolkit('gnuplot');
解决了问题!