Main Content

イメージのインポート

グラフィックス ファイルから MATLAB® ワークスペースにデータをインポートするには、関数 imread を使用します。この関数を使用すると、Tagged Image File Format (TIFF)、Graphics Interchange Format (GIF)、Joint Photographic Experts Group (JPEG)、Portable Network Graphics (PNG) など、多くの標準ファイル形式のファイルからデータをインポートできます。サポートされる形式の一覧は、imread のリファレンス ページを参照してください。

たとえば、JPEG 形式のファイルに保存されたイメージ データを、MATLAB ワークスペースに配列 I として読み取ります。

I = imread("ngc6543a.jpg");

imread によって、ワークスペース内のイメージはクラス uint8 の多次元配列として表されます。配列の次元はデータの形式によって異なります。たとえば、imread では RGB カラー イメージを表すのに 3 つの次元が使用されます。

whos I
  Name        Size                 Bytes  Class    Attributes

  I         650x600x3            1170000  uint8              

TIFF ファイルの読み取りをさらに制御するには、Tiff オブジェクトを使用します。詳細については、TIFF ファイルからのイメージ データとメタデータの読み取りを参照してください。

イメージ ファイルに関する情報の取得

標準的グラフィックス形式のファイルがある場合は、関数 imfinfo を使用してその内容についての情報を取得します。関数 imfinfo では、ファイルについての情報を含む構造体が返されます。構造体のフィールドはファイル形式によってさまざまですが、imfinfo では常にファイル名、最終変更日付、ファイル サイズ、形式などの基本的情報が返されます。

たとえば、Joint Photographic Experts Group (JPEG) 形式のファイルについての情報を取得します。

info = imfinfo("ngc6543a.jpg")
info = 

           Filename: 'current_directory\ngc6543a.jpg'
        FileModDate: '01-Oct-1996 16:19:44'
           FileSize: 27387
             Format: 'jpg'
      FormatVersion: ''
              Width: 600
             Height: 650
           BitDepth: 24
          ColorType: 'truecolor'
    FormatSignature: ''
    NumberOfSamples: 3
       CodingMethod: 'Huffman'
      CodingProcess: 'Sequential'
            Comment: {'CREATOR: XV Version 3.00b  Rev: 6/15/94  Quality = 75, Smoothing = 0↵'}

TIFF ファイルからのイメージ データとメタデータの読み取り

imread を使用してイメージ データとメタデータを TIFF ファイルからインポートできますが、この関数にはいくつかの制限があります。たとえば、TIFF ファイルには複数のイメージを含めることができ、その各イメージには複数のサブイメージを含めることができます。imread によってマルチイメージの TIFF ファイルからすべてのイメージを読み取ることはできますが、サブイメージにアクセスすることはできません。Tiff オブジェクトを使用すると、TIFF ファイルからイメージ データ、メタデータ、およびサブイメージを読み取ることができます。Tiff オブジェクトを作成することで、TIFF ファイルとの関連が示されるため、LibTIFF ライブラリにある多くのルーチンにアクセスできるようになります。

この例では、Tiff オブジェクトのメソッドとプロパティを使用して TIFF ファイルからサブイメージを読み取る方法について段階的に説明します。Tiff オブジェクトを最大限に利用するには、TIFF 仕様および技術情報に関する知識が必要です。このドキュメンテーションは LibTIFF - TIFF Library and Utilities で参照してください。

TIFF フィルからのサブイメージの読み取り

TIFF ファイルには 1 つ以上のイメージ ファイル ディレクトリ (IFD) を含めることができます。各 IFD にはイメージ データと、イメージに関連付けられたメタデータ (タグ) が含まれています。各 IFD には 1 つ以上のサブ IFD が含まれている場合があり、これにもイメージ データとメタデータが含まれている場合があります。こうしたサブイメージは、通常は、サブ IFD を含む IFD にあるイメージ データの低解像度 (サムネイル) バージョンです。

IFD のサブイメージを読み取るには、SubIFD タグからサブイメージの位置を取得しなければなりません。SubIFD タグにはサブイメージをポイントするバイト オフセットの配列が含まれています。サブ IFD のアドレスを setSubDirectory メソッドに渡して、サブ IFD を現在の IFD にすることができます。ほとんどの Tiff オブジェクト メソッドは現在の IFD に対して実行されます。

Tiff オブジェクト コンストラクターを使用して、イメージとサブイメージを含む TIFF ファイルを 開きます。この例では、TIFF のサブディレクトリの作成で作成した TIFF ファイルを使用します。このファイルには 2 つのサブ IFD をもつ 1 つの IFD が含まれています。Tiff コンストラクターを使用して TIFF ファイルを開き、ファイル内の最初のサブ IFD を現在の IFD にします。

t = Tiff("my_subimage_file.tif","r");

現在の IFD と関連付けられているサブ IFD の位置を取得します。getTag メソッドを使用して SubIFD タグの値を取得します。このメソッドによって、サブ IFD の位置を指定するバイト オフセットの配列が返されます。

offsets = getTag(t,"SubIFD");

最初のサブイメージに移動します。

まず、現在の IFD を最初のサブイメージを含むディレクトリに設定します。

dirNum = 1; 
setDirectory(t,dirNum)

次に、setSubDirectory メソッドを使用して最初のサブ IFD に移動します。サブ IFD のバイト オフセットを引数として指定します。この呼び出しによってサブ IFD が現在の IFD となります。

setSubDirectory(t,offsets(1))

ファイル内の他の IFD を読み取る場合と同様に、現在の IFD (最初のサブ IFD) からイメージ データを読み取ります。

subimage_one = read(t);

最初のサブイメージを表示します。

imagesc(subimage_one)

2 番目のサブイメージに移動します。

まず、現在の IFD を 2 番目のサブイメージを含むディレクトリに再設定します。

setDirectory(t,dirNum)

次に、setSubDirectory メソッドを使用して 2 番目のサブ IFD に移動します。2 番目のサブ IFD のバイト オフセットを指定します。

setSubDirectory(t,offsets(2))

ファイル内の他の IFD を読み取る場合と同様に、現在の IFD (2 番目のサブ IFD) からイメージ データを読み取ります。

subimage_two = read(t);

2 番目のサブイメージを表示します。

imagesc(subimage_two)

Tiff オブジェクトを閉じます。

close(t)

参考

関連するトピック