(3) MNIST画像をPNG画像で出力する(Octave版)

投稿者: | 2013年10月5日

7,789 views

この記事は最終更新から 1920日 が経過しています。

下記投稿では、MNIST画像データファイルをダウンロードした。
(1) MNIST画像データをダウンロード

下記投稿では、MNIST画像データのいくつかを Octaveで画像化して眺めてみた。
(2) MNIST学習画像を見てみる

今回は、MNIST画像データファイルに含まれる全画像を PNG画像 にして眺めてみたい。
今回も GNU-Octaveを使用する。Octaveは少ないコード量で高機能なプログラムを書けるので重宝している。

作成する関数は cre_MNIST_PNG とする。
第1引数は、MNIST画像データファイルのパス。学習用 or テスト用のどちらか一方を指定する。
第2引数は、PNG化したMNIST画像の出力先ディレクトリのパス。
【注意】
第1引数で渡すファイルは、(1) MNIST画像データをダウンロード に記したように事前に解凍しておくこと。

function cre_MNIST_PNG( image_file, output_dir )
  % 画像をロード
  fid = fopen(image_file,'r','b');
  magic_number      = fread(fid, 1, 'int32');
  number_of_items   = fread(fid, 1, 'int32');
  number_of_rows    = fread(fid, 1, 'int32');
  number_of_columns = fread(fid, 1, 'int32');
  img               = fread(fid, [number_of_rows*number_of_columns number_of_items],'uint8');
  image = permute(reshape(img, number_of_rows, number_of_columns,number_of_items),[2 1 3]);
  fclose(fid);

  % 画像をPNGファイル出力
  if exist(output_dir)==0
    mkdir(output_dir);
  end
  for i=1 : number_of_items
    pngfile = sprintf('%s/img%05d.png', output_dir, i);
    imwrite(uint8(image(:,:,i)), pngfile);
  end
end

まずはテスト用画像 t10k-images-idx3-ubyte をPNG画像化してみる。

octave:1> cre_MNIST_PNG('t10k-images-idx3-ubyte','./img');
octave:2>

以下のようなPNG画像ファイルが出力された。(全10,000個の内の先頭から105個を表示)
https://www.dogrow.net/nnet/wp-content/uploads/2013/10/20131005_04.png

次回「(4) シンプル構成の初版は正解率91%」では、実際に機械学習プログラムを作成して MNIST画像の自動認識をやってみる。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です