イメージのインポート
グラフィックス ファイルから 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)