最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Tiff

LibTIFF ライブラリ ルーチンの MATLAB ゲートウェイ

説明

Tiff オブジェクトは、Tagged Image File Format (TIFF) ファイルへの接続を表し、LibTIFF ライブラリの多くの関数へのアクセスを可能にします。Tiff では、サブイメージの読み取り、イメージ データのタイルとストリップの書き込み、個々の TIFF タグの変更など、関数 imread や関数 imwrite よりも多くの機能が提供されます。

多くの場合、Tiff オブジェクト関数の構文は、対応する LibTIFF ライブラリ関数の構文と類似しています。Tiff オブジェクトの機能を十分に理解するには、LibTIFF API および TIFF の仕様とテクニカル ノートを参照してください。このドキュメンテーションは LibTIFF - TIFF Library and Utilities で参照してください。

MATLAB® では LibTIFF Version 4.0.0 がサポートされます。LibTIFF ライブラリの著作権に関する情報は、libtiffcopyright.txt ファイルを参照してください。

作成

説明

obj = Tiff(filename) は、TIFF ファイル filename への読み取りアクセスに使用する Tiff オブジェクトを作成します。

obj = Tiff(filename,mode) は、mode で指定される TIFF ファイルへのアクセス タイプをもつ Tiff オブジェクトを作成します。

入力引数

すべて展開する

ファイルの名前。文字ベクトルまたは string スカラーとして指定します。

例: 'myfile.tif'

ファイル アクセス タイプ。次の値のいずれかとして指定します。

パラメーター説明
'r'読み取りのためにファイルを開く (既定)。
'w'書き込みのためにファイルを開く。既存の内容を破棄。
'w8'BigTIFF ファイルの書き込みのためにファイルを開く。既存の内容を破棄。
'a'書き込みのためにファイルを開くまたは作成する。ファイルの最後にデータを追加
'r+'読み込みと書き込みのためにファイルを開く (作成はしない)。

書き込みや追加のために TIFF ファイルを開くと、後続のデータを書き込むために、Tiff オブジェクトによってファイル内に IFD が自動的に作成されます。この IFD には、TIFF Revision 6.0 で指定されているすべての既定値があります。

プロパティ

すべて展開する

TIFF ファイルは、イメージ データおよびそれに関連付けられたタグを含むイメージ ファイル ディレクトリで構成されています。タグには、イメージの幅、イメージの高さ、サンプルの数など、イメージ関連の情報が含まれています。TIFF プロパティのそれぞれはタグの値を指定する構造体です。関数 setTag を使用してタグの値を設定します。たとえば、ファイルを作成して、JPEG 圧縮を指定します。

t = Tiff('myfile.tif','w');
setTag(t,'Compression',Tiff.Compression.JPEG);

ファイルを作成する場合、データをファイルに書き込む前に以下のタグを設定しなければなりません。

ImageWidthCompression
ImageLengthPlanarConfiguration
BitsPerSamplePhotometric
SamplesPerPixel 

イメージのレイアウトに応じて、次の追加タグを設定しなければなりません。

  • ストリップ レイアウト — RowsPerStrip タグを設定します。

  • タイル レイアウト — TileWidth タグと TileHeight タグを設定します。

イメージ データを圧縮するスキーム。次のフィールドをもつ構造体に格納されます。

フィールド名
None
CCITTRLE (Read-only)
CCITTFax3
CCITTFax4
LZW
OJPEG
JPEG
AdobeDeflate
...

Compression タグについて MATLAB でサポートされる値の完全なリストを表示するには、コマンド ウィンドウで Tiff.Compression と入力します。

例: setTag(t,'Compression',Tiff.Compression.JPEG);

予備のチャネルについての説明。次のフィールドをもつ構造体に格納されます。

フィールド名説明
Unspecified未指定のデータ
AssociatedAlpha関連付けられているアルファ (事前乗算済み)
UnassociatedAlpha関連付けられていないアルファ データ

通常のカラーメトリック チャネルに加えて予備のチャネルが存在する場合は、ExtraSamples タグが必要です。使用例は、カラー チャネルおよびアルファ チャネルのデータをもつ Tiff イメージの書き込みを参照してください。

例: setTag(t,'ExtraSamples',Tiff.ExtraSamples.AssociatedAlpha)

グループ 3 FAX 圧縮オプション。次のフィールドをもつ構造体に格納されます。

フィールド名説明
Encoding2D

ビット 0 は 1 です。

この値は 2 次元のコーディングを指定します。複数のストリップを指定した場合、各ストリップは 1 次元のコード行で始めなければなりません。つまり、CCITT 仕様で定められているように、RowsPerStrip はパラメーター K の倍数でなければなりません。

Uncompressed

ビット 1 は 1 です。

この値は、エンコード時に非圧縮モードであることを指定します。

FillBits

ビット 2 は 1 です。

EOL が必ずバイト境界で終了するように、EOL コードの前に必要に応じて埋め込みビットを追加します。これにより、0 ニブルが EOL シーケンスに必ず 1 バイト先行するようになります。たとえば、xxxx-0000 0000-0001 のようになります。

このプロパティは Fax3 または T4Options とも呼ばれます。このプロパティの値は、最初の 3 ビットで制御されるビット マスクです。

例: setTag(t,'Group3Options',Tiff.Group3Options.Uncompressed);

分離されたイメージ インクのセット。次のフィールドをもつ構造体に格納されます。

フィールド名説明
CMYK成分の順序: シアン、マゼンタ、黄色、黒。通常、0 という値は 0% のインク カバレッジを示し、255 という値は、その成分の 100% のインク カバレッジを示しますが、DotRange の TIFF 仕様を参照してください。CMYK を指定する場合は、InkNames タグを設定しないでください。
MultiInkCMYK 以外のあらゆる順序。使用されるインクの説明については、InkNames フィールドの TIFF 仕様を参照してください。

このプロパティのコンテキストで言及しているのは、光度測定解釈での分離についてであり、平面構成についてではありません。

例: setTag(t,'InkSet',Tiff.InkSet.CMYK);

カラー モード。次のフィールドをもつ構造体に格納されます。

フィールド名説明
Raw (既定)Y、Cb、Cr 行列を個別の入力として維持します。
RGBRGB 入力を YCbCr に変換します。

YCbCr イメージを RGB として読み取るためにこのプロパティを使用しないでください。代わりに、関数 readRGBAImagereadRGBAStripreadRGBATile で提供される RGBA インターフェイスを使用します。

例については、RGB データからの YCbCr/JPEG イメージの作成を参照してください。

例: setTag(t,'JPEGColorMode',Tiff.JPEGColorMode.RGB);

イメージ データの視覚的配置。次のフィールドをもつ構造体に格納されます。

フィールド名
TopLeft
TopRight
BottomRight
BottomLeft
LeftTop
RightTop
RightBottom
LeftBottom

Orientation プロパティは、行と列によってイメージの配置方向を記述します。たとえば、OrientationTopLeft に設定されている場合、最初の行はイメージの一番上を表し、最初の列は左側を表します。Orientation で指定される値は情報提供のみを目的としており、MATLAB によるイメージ データの読み込みや書き込みの方法には影響しません。

例: setTag(t,'Orientation',Tiff.Orientation.TopLeft);

イメージ データの色空間。次のフィールドをもつ構造体に格納されます。

フィールド名
MinIsWhite
MinIsBlack
RGB
Palette
Mask
Separated (CMYK)
YCbCr
CIELab
ICCLab
ITULab
LogL
LogLUV
CFA
LinearRaw

例: setTag(t,'Photometric',Tiff.Photometric.RGB);

イメージ成分値のストレージ構成。次のフィールドをもつ構造体に格納されます。

フィールド名説明
Chunky各ピクセルの成分値を隣接して保存します。たとえば、RGB データの場合、最初の 3 つのピクセルを RGBRGBRGB としてファイルに保存します。ほとんどすべての TIFF イメージには、隣接する平面構成がありす。
Separate各ピクセルの成分値を個別に保存します。たとえば、RGB データの場合、赤の成分は緑と青の成分とは別にファイルに保存されます。

例: setTag(t,'PlanarConfiguration',Tiff.PlanarConfiguration.Chunky);

XResolution タグと YResolution タグに含まれる値を解釈するための解像度の単位。次のフィールドをもつ構造体に格納されます。

フィールド名説明
None既定の値。
InchXResolution タグと YResolution タグに含まれている値にインチの単位を指定します。
CentimeterXResolution タグと YResolution タグに格納されている値にセンチメートルの単位を指定します。

たとえば、次のコードは X および Y 方向のイメージ解像度の値を、1 インチあたり 300 ピクセルに設定します。

setTag(t,'ResolutionUnit',Tiff.ResolutionUnit.Inch);
setTag(t,'XResolution',300);
setTag(t,'YResolution',300);

例: setTag(t,'ResolutionUnit',Tiff.ResolutionUnit.Inch);

ピクセル サンプル形式。次のフィールドをもつ構造体に格納されます。

フィールド名説明
UInt (既定)符号なし整数データ
Int2 の補数の符号付き整数データ
IEEEFPIEEE 浮動小数点データ

MATLAB は VoidComplexIntComplexIEEEFP の各形式をサポートしません。

例: setTag(t,'SampleFormat',Tiff.SampleFormat.IEEEFP);

SGIL コーデックデータ形式。次のフィールドをもつ構造体に格納されます。

フィールド名説明
Float単精度のサンプル
Bits8uint8 サンプル (読み取り専用)。

SGILogDataFmtFloat または Bits8 に設定すると、LogLuv イメージでは SamplesPerPixel の値が 3 に、LogL イメージでは 1 になります。

SGILogDataFmt タグは、LogL/LogLuv TIFF イメージ オブジェクトのインスタンスにつき 1 回のみ設定できます。

次のコードを使用して Tiff オブジェクトを作成し、SGIL データ形式を設定してから、イメージ データを読み取ります。

tiffobj = Tiff('example.tif','r');
setDirectory(tiffobj,3); % image three is a LogLuv image
setTag(tiffobj,'SGILogDataFmt',Tiff.SGILogDataFmt.Float);
imdata = read(tiffobj);

例: setTag(t,'SGILogDataFmt',Tiff.SGILogDataFmt.Float);

イメージのタイプ。次のフィールドをもつ構造体に格納されます。

フィールド名説明
Default1 つのイメージ ファイルまたは最初のイメージの既定値。
ReducedImageイメージは、マルチイメージ (またはマルチページ) ファイルの 1 つのイメージです。
Page関連付けられていないアルファ データ。
Maskイメージは、ファイルの別のイメージの透明度マスクです。光度測定解釈値は Photometric.Mask としなければなりません。

例: setTag(t,'SubFileType',Tiff.SubFileType.Mask);

MATLAB がサポートする TIFF タグ ID。次のフィールドをもつ構造体に格納されます。

フィールド名
SubFileType254
ImageWidth256
ImageLength257
BitsPerSample258
Compression259
Photometric262
Thresholding263
FillOrder266
......

タグ名とそれに対応するタグ ID の完全な一覧を表示するには、コマンド ウィンドウで Tiff.TagID と入力します。

関数 setTag を使用するときに、このプロパティを使用してタグを指定します。たとえば、Tiff.TagID.ImageWidth を指定すると、ImageWidth タグの ID が返されます。サポートされているすべてのタグの一覧を取得するには、関数 Tiff.getTagNames を使用します。

例: setTag(t,Tiff.TagID.ImageWidth,300);

しきい値処理手法。次のフィールドをもつ構造体に格納されます。

フィールド名
BiLevel
HalfTone
ErrorDiffuse

このタグを使用して、ピクセルをグレースケールからモノクロに変換する際に使用するアルゴリズムを指定します。

例: setTag(t,'Thresholding',Tiff.Thresholding.HalfTone);

輝度サンプルに対する色差サンプルの位置。次のフィールドをもつ構造体に格納されます。

フィールド名説明
CenteredPostScript® Level 2 などの業界標準との互換性を指定します。
CositedCCIR Recommendation 601-1 などのほとんどのデジタル ビデオ標準との互換性を指定します。

例: setTag(t,'YCbCrPositioning',Tiff.YCbCrPositioning.Centered);

オブジェクト関数

TIFF ファイルは、1 つまたは複数のイメージ ファイル ディレクトリ (IFD) から構成されます。IFD には、イメージ データとそれに関連するメタデータが含まれます。IFD には、それ自身にイメージ データとメタデータを含むサブ IFD を含めることができます。読み取るために TIFF ファイルを開くと、Tiff オブジェクトによって、ファイルの最初の IFD が "現在の" IFD に設定されます。Tiff オブジェクト関数は現在の IFD に対して機能します。

すべて展開する

readTIFF イメージ全体の読み取り
readEncodedStrip指定したストリップからのデータの読み込み
readEncodedTile指定したタイルからのデータの読み込み
readRGBAImageRGBA インターフェイスを使ったイメージの読み取り
readRGBAStripRGBA インターフェイスを使ったストリップ データの読み取り
readRGBATileRGBA インターフェイスを使ったタイル データの読み取り
closeTiff オブジェクトを閉じる
writeイメージ全体の書き込み
writeEncodedStrip指定されたストリップへのデータの書き込み
writeEncodedTile指定されたタイルへのデータの書き込み
closeTiff オブジェクトを閉じる
getTag指定されたタグの値
setTagタグの値の設定
Tiff.getTagNames認識されている TIFF タグのリスト
currentDirectory現在の IFD のインデックスを返す
lastDirectory現在の IFD がファイルの最後かどうかを確認
nextDirectory次の IFD を現在の IFD にする
setDirectory指定した IFD を現在の IFD に設定
setSubDirectoryサブ IFD を現在の IFD に設定
rewriteDirectory既存のIFD への修正メタデータの書き込み
writeDirectory新しい IFD を作成し、現在の IFD に設定
isTiledイメージがタイル配置であるかどうかを判別
computeTile指定された座標を含むタイルのインデックス番号
numberOfTilesイメージ内のタイルの総数
computeStrip指定された座標を含むストリップのインデックス番号
numberOfStripsイメージ内のストリップの総数
getVersionLibTIFF ライブラリ バージョン

すべて折りたたむ

myfile.tif という新しいファイルを作成します。この例を実行するには、フォルダーに対する書き込みアクセス権限がなければなりません。

t = Tiff('myfile.tif','w');

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

close(t);

カラー チャネルおよびアルファ チャネルをもつデータセットで、Tiff タグを設定してからデータをファイルに書き込みます。

カラー チャネルとアルファ チャネルを含むデータの配列 data を作成します。

rgb = imread('example.tif');
numrows = size(rgb,1);
numcols = size(rgb,2);
alpha = 255*ones([numrows numcols], 'uint8');
data = cat(3,rgb,alpha);

Tiff オブジェクトを作成します。

t = Tiff('myfile.tif','w');

Tiff タグを設定し、ExtraSamples タグの値を指定します。これは、データにカラー チャネルに加えてアルファ チャネルが含まれているためです。

setTag(t,'Photometric',Tiff.Photometric.RGB);
setTag(t,'Compression',Tiff.Compression.None);
setTag(t,'BitsPerSample',8);
setTag(t,'SamplesPerPixel',4);
setTag(t,'SampleFormat',Tiff.SampleFormat.UInt);
setTag(t,'ExtraSamples',Tiff.ExtraSamples.Unspecified);
setTag(t,'ImageLength',numrows);
setTag(t,'ImageWidth',numcols);
setTag(t,'TileLength',32);
setTag(t,'TileWidth',32);
setTag(t,'PlanarConfiguration',Tiff.PlanarConfiguration.Chunky);

TIFF ファイルにデータを書き込み、Tiff オブジェクトを閉じます。

write(t,data);
close(t);

RGB イメージ データを YCbCr/JPEG イメージとして TIFF ファイルに書き込みます。

RGB データを取得します。

rgb = imread('example.tif');

Tiff オブジェクト t を作成し、タグを設定します。JPEGColorMode タグを使用して、入力データが RGB であることを指定します。

t = Tiff('myfile.tif','w');
setTag(t,'Photometric',Tiff.Photometric.YCbCr);
setTag(t,'Compression',Tiff.Compression.JPEG);
setTag(t,'YCbCrSubSampling',[2 2]);
setTag(t,'BitsPerSample',8);
setTag(t,'SamplesPerPixel',3);
setTag(t,'SampleFormat',Tiff.SampleFormat.UInt);
setTag(t,'ImageLength',size(rgb,1));
setTag(t,'ImageWidth',size(rgb,2));
setTag(t,'TileLength',32);
setTag(t,'TileWidth',32);
setTag(t,'PlanarConfiguration',Tiff.PlanarConfiguration.Chunky);
setTag(t,'JPEGColorMode',Tiff.JPEGColorMode.RGB);
setTag(t,'JPEGQuality',75);

TIFF ファイルにデータを書き込み、Tiff オブジェクトを閉じます。

write(t,rgb);
close(t);

R2009b で導入