Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

イメージへのエクスポート

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

たとえば、uint8 データの多次元配列 I を、MATLAB ワークスペースから TIFF 形式のファイルに書き込みます。ファイルに書き込まれる出力イメージのクラスは、指定する形式によって異なります。ほどんどの形式では、入力配列がクラス uint8 の場合、imwrite はデータを 8 ビット値として出力します。詳細については、imwrite のリファレンス ページを参照してください。

I = imread("ngc6543a.jpg");
whos I
  Name        Size                 Bytes  Class    Attributes

  I         650x600x3            1170000  uint8              
imwrite(I,"my_graphics_file.tif","tif")

メモ

imwrite では、いくつかの標準形式の異なる構文がサポートされます。たとえば、TIFF ファイル形式では、MATLAB でイメージの保存に使用される圧縮タイプを指定できます。詳細については、imwrite のリファレンス ページを参照してください。

TIFF ファイルへのデータの書き込みをさらに制御するには、Tiff オブジェクトを使用します。詳細については、TIFF ファイルへのイメージ データとメタデータのエクスポートを参照してください。

TIFF ファイルへのイメージ データとメタデータのエクスポート

imwrite を使用してイメージ データとメタデータ (タグ) を Tagged Image File Format (TIFF) ファイルにエクスポートできますが、この関数にはいくつかの制限があります。たとえば、ファイル内のイメージ データやメタデータを変更する場合は、すべてのデータをファイルに書き込まなければなりません。更新部分のみを書き込むことはできません。Tiff オブジェクトを使用すると、TIFF ファイルに対しイメージ データを部分的に書き込んだり、個々のタグを加えたりできます。Tiff オブジェクトを作成することで、TIFF ファイルとの関連が示されるため、LibTIFF ライブラリにある多くのルーチンにアクセスできるようになります。

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

TIFF ファイルの作成

何らかのイメージ データを作成します。

imgdata = imread("ngc6543a.jpg");

新しいファイルの名前を引数として指定し、Tiff オブジェクトを作成することにより、新しい TIFF ファイルを作成します。ファイルを作成するには、書き込みモード ("w") または追加モード ("a") のいずれかを指定しなければなりません。

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

新しい TIFF ファイルを作成する際には、Tiff コンストラクターによってイメージ ファイル ディレクトリ (IFD) を含むファイルが作成されます。TIFF ファイルではこの IFD が使用され、特定のイメージと関連付けられているすべてのデータとメタデータが整理されます。TIFF ファイルには複数の IFD が含まれている場合があります。Tiff オブジェクトによって作成される IFD が "現在の" IFD になります。Tiff オブジェクト メソッドは現在の IFD に対して実行されます。TIFF ファイル内の IFD 間を移動し、Tiff オブジェクト メソッドを使用してどの IFD を現在の IFD とするかを指定できます。

Tiff オブジェクトの setTag メソッドを使用して、TIFF タグを設定します。これらのタグには必須タグとオプションのタグがあり、長さや幅などのイメージに関する情報を指定します。イメージ データをストリップに分割するには、RowsPerStrip タグの値を指定します。イメージ データをタイルに分割するには、TileWidth タグと TileLength タグの値を指定します。次の例ではタグの名前と値を含む構造体を作成し、それを setTag に渡します。それぞれのタグを別々に設定することもできます。

tagstruct.ImageLength = size(imgdata,1);
tagstruct.ImageWidth = size(imgdata,2);
tagstruct.Photometric = Tiff.Photometric.RGB;
tagstruct.BitsPerSample = 8;
tagstruct.SamplesPerPixel = 3;
tagstruct.RowsPerStrip = 16;
tagstruct.Software = "MATLAB";
tagstruct % display tagstruct
tagstruct = struct with fields:
        ImageLength: 650
         ImageWidth: 600
        Photometric: 2
      BitsPerSample: 8
    SamplesPerPixel: 3
       RowsPerStrip: 16
           Software: "MATLAB"

setTag(t,tagstruct)

サポートされている TIFF タグとその値の設定方法の詳細については、タグ値の設定を参照してください。たとえば、Tiff オブジェクトでは、特定のタグの値の設定に使用できるプロパティがサポートされています。この例では、Tiff オブジェクト Photometric のプロパティを使用して、RGB 構成の次の正しい値を指定しています (Tiff.Photometric.RGB)。

Tiff オブジェクトの write メソッドを使用して、イメージ データとメタデータを現在のディレクトリに書き込みます。

write(t,imgdata)

複数のイメージをファイル内に配置する場合は、この書き込み操作の実行直後に writeDirectory メソッドを呼び出します。writeDirectory メソッドによってファイルに新しいイメージ ファイル ディレクトリが設定され、この新しいディレクトリが現在のディレクトリとなります。

Tiff オブジェクトを閉じることによってファイルへの接続を閉じます。

close(t)

関数 imread を使用してファイルを読み取り、イメージを表示して、有効な TIFF ファイルが作成されたかどうかをテストします。

imagesc(imread("myfile.tif"))

Figure contains an axes object. The axes object contains an object of type image.

イメージ データのストリップまたはタイルの書き込み

メモ: イメージ データのストリップまたはタイルの変更は、データが圧縮されていない場合に限り可能です。

Tiff オブジェクトの作成により変更を行うため、既存の TIFF ファイルを開きます。この例では、TIFF ファイルの作成で作成したファイルを使用します。Tiff コンストラクターによって Tiff オブジェクトへのハンドルが返されます。

t = Tiff("myfile.tif","r+");

イメージのストリップに書き込む何らかのデータを作成します。この例では、ストリップと同じサイズのゼロの 3 次元配列を作成します。コードでは、ストリップにおける行数、イメージの幅、およびピクセルあたりのサンプル数を次元として使用します。配列は、uint8 値の配列です。

width = getTag(t,"ImageWidth");
height = getTag(t,"RowsPerStrip");
numSamples = getTag(t,"SamplesPerPixel");
stripData = zeros(height,width,numSamples,"uint8");

イメージ データがタイル レイアウトの場合は、TileWidth タグと TileLength タグを使用して次元を指定します。

writeEncodedStrip メソッドを使用してファイルのストリップにデータを書き込みます。変更するストリップを特定するために、インデックス番号を指定します。この例ではストリップ 18 を使用していますが、これはイメージでの変化がわかりやすいためです。

writeEncodedStrip(t,18,stripData)

イメージ データがタイル レイアウトの場合は、writeEncodedTile メソッドを使用してタイルを変更します。

Tiff オブジェクトを閉じることによってファイルへの接続を閉じます。

close(t)

関数 imread を使用してファイルを読み取り、イメージを表示して、TIFF ファイル内のイメージのストリップが変更されたかどうかをテストします。

modified_imgdata = imread("myfile.tif");
imagesc(modified_imgdata)

Figure contains an axes object. The axes object contains an object of type image.

イメージの中央を横切る黒いストリップに注意してください。

TIFF ファイルのメタデータ (タグ) の変更

Tiff オブジェクトの作成により変更を行うため、既存の TIFF ファイルを開きます。この例では、TIFF ファイルの作成で作成したファイルを使用します。Tiff コンストラクターによって Tiff オブジェクトへのハンドルが返されます。

t = Tiff("myfile.tif","r+");

現在、ファイルには Artist タグが含まれていません。getTag(t,"Artist") を実行するとエラーが表示されます。setTag メソッドを使用して Artist タグを追加します。

setTag(t,"Artist","Pablo Picasso")

rewriteDirectory メソッドを使用して TIFF ファイルに新しいタグ データを書き込みます。ファイル内の既存のメタデータを変更するときや、ファイルに新しいメタデータを追加するときには rewriteDirectory メソッドを使用します。

rewriteDirectory(t)

Tiff オブジェクトを閉じることによってファイルへの接続を閉じます。

close(t)

TIFF ファイルを再度開き、getTag メソッドを使用して Artist タグの値を取得し、ここまでの作業をテストします。

t = Tiff("myfile.tif","r");
getTag(t,"Artist")
ans = 
'Pablo Picasso'
close(t)

TIFF のサブディレクトリの作成

この例では、JPEG ファイルからイメージ データを読み取ってから、イメージ データの低解像度 (サムネイル) バージョンを 2 つ作成します。

何らかのイメージ データを作成します。

imgdata = imread("ngc6543a.jpg");
%
% Reduce number of pixels by one half.
img_half = imgdata(1:2:end,1:2:end,:);
%
% Reduce number of pixels by two thirds.
img_third = imgdata(1:3:end,1:3:end,:);

新しいファイルの名前を引数として指定し、Tiff オブジェクトを作成することにより、新しい TIFF ファイルを作成します。ファイルを作成するには、書き込みモード ("w") または追加モード ("a") のいずれかを指定しなければなりません。Tiff コンストラクターによって Tiff オブジェクトへのハンドルが返されます。

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

Tiff オブジェクトの setTag メソッドを使用して、TIFF タグを設定します。これらのタグには必須タグとオプションのタグがあり、長さや幅などのイメージに関する情報を指定します。イメージ データをストリップに分割するには、RowsPerStrip タグの値を指定します。イメージ データをタイルに分割するには、TileWidth タグと TileLength タグの値を指定します。次の例ではタグの名前と値を含む構造体を作成し、それを setTag に渡します。それぞれのタグを別々に設定することもできます。

サブディレクトリを作成するには、作成するサブディレクトリの数を指定して SubIFD タグを設定しなければなりません。指定する数は SubIFD タグの値ではないことに注意してください。この数は、2 つのサブディレクトリをポイントする SubIFD を作成するよう Tiff ソフトウェアに伝えるためのものです。SubIFD タグの実際の値は、2 つのサブディレクトリのバイト オフセットとなります。

tagstruct.ImageLength = size(imgdata,1);
tagstruct.ImageWidth = size(imgdata,2);
tagstruct.Photometric = Tiff.Photometric.RGB;
tagstruct.BitsPerSample = 8;
tagstruct.SamplesPerPixel = 3;
tagstruct.RowsPerStrip = 16;
tagstruct.Software = "MATLAB";
tagstruct.SubIFD = 2; % required to create subdirectories
tagstruct % display tagstruct
tagstruct = struct with fields:
        ImageLength: 650
         ImageWidth: 600
        Photometric: 2
      BitsPerSample: 8
    SamplesPerPixel: 3
       RowsPerStrip: 16
           Software: "MATLAB"
             SubIFD: 2

setTag(t,tagstruct)

サポートされている TIFF タグとその値の設定方法の詳細については、タグ値の設定を参照してください。たとえば、Tiff オブジェクトでは、特定のタグの値の設定に使用できるプロパティがサポートされています。この例では、Tiff オブジェクト Photometric のプロパティを使用して、RGB 構成の次の正しい値を指定しています (Tiff.Photometric.RGB)。

Tiff オブジェクトの write メソッドを使用して、イメージ データとメタデータを現在のディレクトリに書き込みます。

write(t,imgdata)

writeDirectory メソッドを呼び出して最初のサブディレクトリを設定します。writeDirectory メソッドによってサブディレクトリが設定され、新しいディレクトリが現在のディレクトリとなります。2 つのサブディレクトリを作成することが指定されているため、writeDirectory によってサブディレクトリが設定されます。

writeDirectory(t)

通常のディレクトリで行ったように、タグを設定します。LebTIFF API によると、サブディレクトリに SubIFD タグを含めることはできません。

tagstruct2.ImageLength = size(img_half,1);
tagstruct2.ImageWidth = size(img_half,2);
tagstruct2.Photometric = Tiff.Photometric.RGB;
tagstruct2.BitsPerSample = 8;
tagstruct2.SamplesPerPixel = 3;
tagstruct2.RowsPerStrip = 16;
tagstruct2.Software = "MATLAB";
tagstruct2 % display tagstruct2
tagstruct2 = struct with fields:
        ImageLength: 325
         ImageWidth: 300
        Photometric: 2
      BitsPerSample: 8
    SamplesPerPixel: 3
       RowsPerStrip: 16
           Software: "MATLAB"

setTag(t,tagstruct2)

Tiff オブジェクトの write メソッドを使用して、イメージ データとメタデータをサブディレクトリに書き込みます。

write(t,img_half)

writeDirectory メソッドを呼び出して 2 つ目のサブディレクトリを設定します。writeDirectory メソッドによってサブディレクトリが設定され、現在のディレクトリとなります。

writeDirectory(t)

任意のディレクトリと同様にタグを設定します。

tagstruct3.ImageLength = size(img_third,1);
tagstruct3.ImageWidth = size(img_third,2);
tagstruct3.Photometric = Tiff.Photometric.RGB;
tagstruct3.BitsPerSample = 8;
tagstruct3.SamplesPerPixel = 3;
tagstruct3.RowsPerStrip = 16;
tagstruct3.Software = "MATLAB";
tagstruct3 % display tagstruct3
tagstruct3 = struct with fields:
        ImageLength: 217
         ImageWidth: 200
        Photometric: 2
      BitsPerSample: 8
    SamplesPerPixel: 3
       RowsPerStrip: 16
           Software: "MATLAB"

setTag(t,tagstruct3)

Tiff オブジェクトの write メソッドを使用して、イメージ データとメタデータをサブディレクトリに書き込みます。

write(t,img_third)

Tiff オブジェクトを閉じることによってファイルへの接続を閉じます。

close(t)

タグ値の設定

下表に Tiff オブジェクトによってサポートされるすべての TIFF タグを一覧表示し、各タグの MATLAB クラスとサイズに関する情報を示します。タグによっては、Tiff オブジェクトによってサポートされる一連の値も表に示されています。これは、TIFF 仕様によって定義されるすべての可能な値のサブセットです。Tiff プロパティの構造体を使用すると、サポートされている値の範囲でこれらのタグの値を指定できます。たとえば、Tiff.Compression.JPEG を使用して JPEG 圧縮を指定します。プロパティの完全な一覧は、Tiff のリファレンス ページを参照してください。

表 1: サポートされる TIFF タグ

TIFF タグクラスサイズサポートされている値メモ
Artistchar1 行 N
BitsPerSampledouble1 行 1 列1, 8, 16, 32, 64表 2 および表 3 を参照。
ColorMapdouble256 行 3 列値は区間 [0, 1] 内で正規化する必要がある。uint16 値として内部に保存。PhotometricPalette でなければならない。
Compressiondouble1 行 1 列None: 1
CCITTRLE: 2
CCITTFax3: 3
CCITTFax4: 4
LZW: 5
JPEG: 7
CCITTRLEW: 32771
PackBits: 32773
Deflate: 32946
AdobeDeflate: 8
表 4 を参照。
Copyrightchar 1 行 N
DateTimechar1 行 19 列戻り値は、必要に応じて 19 文字となるようにパディングされる。
DocumentNamechar1 行 N
DotRangedouble1 行 2 列PhotometricSeparated でなければならない。
ExtraSamplesdouble1 行 NUnspecified: 0
AssociatedAlpha: 1
UnassociatedAlpha: 2
FillOrderdouble1 行 1 列
GeoAsciiParamsTagchar1 行 N
GeoDoubleParamsTagdouble1 行 N
GeoKeyDirectoryTagdoubleN 行 4 列
Group3Optionsdouble1 行 1 列CompressionCCITTFax3 でなければならない。
Group4Optionsdouble1 行 1 列CompressionCCITTFax4 でなければならない。
HalfToneHintsdouble1 行 2 列
HostComputerchar1 行 N
ICCProfileuint81 行 N
ImageDescriptionchar1 行 N
ImageLengthdouble1 行 1 列
ImageWidthdouble1 行 1 列
InkNameschar cell array1 行 NumInksPhotometricSeparated でなければならない。
InkSetdouble 1 行 1 列CMYK: 1
MultiInk: 2
PhotometricSeparated でなければならない。
JPEGQualitydouble1 行 1 列区間 [1, 100] 内の値
Makechar 1 行 N
MaxSampleValuedouble1 行 1 列区間 [0, 216-1] 内の値
MinSampleValuedouble1 行 1 列区間 [0, 216-1] 内の値
Modelchar1 行 N
ModelPixelScaleTagdouble1 行 3 列
ModelTiepointTagdoubleN 行 6 列
ModelTransformationMatrixTagdouble1 行 16 列
NumberOfInksdouble1 行 1 列NumberOfInksSamplesPerPixel と等しくなければならない。
Orientationdouble1 行 1 列TopLeft: 1
TopRight: 2
BottomRight: 3
BottomLeft: 4
LeftTop: 5
RightTop: 6
RightBottom: 7
LeftBottom: 8
PageNamechar1 行 N
PageNumberdouble1 行 2 列
Photometricdouble1 行 1 列MinIsWhite: 0
MinIsBlack: 1
RGB: 2
Palette: 3
Mask: 4
Separated: 5
YCbCr: 6
CIELab: 8
ICCLab: 9
ITULab: 10
表 3 を参照。
Photoshopuint8 1 行 N
PlanarConfigurationdouble1 行 1 列Chunky: 1
Separate: 2
PrimaryChromaticitiesdouble1 行 6 列
ReferenceBlackWhitedouble1 行 6 列
ResolutionUnitdouble 1 行 1 列
RICHTIFFIPTCuint81 行 N
RowsPerStripdouble1 行 1 列
RPCCoefficientTagdouble1 行 92 列表 6 を参照。
SampleFormatdouble1 行 1 列Uint: 1
Int: 2
IEEEFP: 3
表 2 を参照。
SamplesPerPixeldouble1 行 1 列
SMaxSampleValuedouble1 行 1 列イメージ データ用に指定された MATLAB データ型の範囲
SMinSampleValuedouble1 行 1 列イメージ データ用に指定された MATLAB データ型の範囲
Softwarechar1 行 N
StripByteCountsdouble1 行 N読み取り専用
StripOffsetsdouble1 行 N読み取り専用
SubFileTypedouble1 行 1 列Default : 0
ReducedImage: 1
Page: 2
Mask: 4
SubIFDdouble1 行 1 列
TargetPrinterchar1 行 N
Thresholdingdouble1 行 1 列BiLevel: 1
HalfTone: 2
ErrorDiffuse: 3
PhotometricMinIsWhite または MinIsBlack でなければならない。
TileByteCountsdouble1 行 N読み取り専用
TileLengthdouble1 行 1 列16 の倍数でなければならない
TileOffsetsdouble1 行 N読み取り専用
TileWidthdouble1 行 1 列16 の倍数でなければならない
TransferFunctiondoubleメモ1 を参照区間 [0, 216-1] 内でなければならないSamplesPerPixel1 または 3 でなければならない。
WhitePointdouble1 行 2 列PhotometricRGBPaletteYCbCrCIELabICCLab、または ITULab でなければならない。
XMPchar1 行 NN > 5
XPostiondouble1 行 1 列
XResolutiondouble1 行 1 列
YCbCrCoefficientsdouble1 行 3 列PhotometricYCbCr でなければならない。
YCbCrPositioningdouble1 行 1 列Centered: 1
Cosited: 2
PhotometricYCbCr でなければならない。
YCbCrSubSamplingdouble1 行 2 列PhotometricYCbCr でなければならない。
YPositiondouble1 行 1 列
YResolutiondouble1 行 1 列
ZipQualitydouble1 行 1 列区間 [0, 9] 内でなければならない

1 サイズは 12BitsPerSample 列または 32BitsPerSample 列です。

表 2: BitsPerSample 設定に対して有効な SampleFormat の値

BitsPerSampleSampleFormatMATLAB データ型
1Uintlogical
8Uint, Intuint8, int8
16Uint, Intuint16, int16
32Uint, Int, IEEEFPuint32, int32, single
64IEEEFPdouble

表 3: BitsPerSamplePhotometric の組み合わせに対して有効な SampleFormat の値

Photometric の値BitsPerSample の値
18163264
MinIsWhite UintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
MinIsBlack UintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
RGB UintUintUint
IEEEFP
IEEEFP
PaletteUintUint
Mask Uint
Separated UintUintUint
IEEEFP
IEEEFP
YCbCr UintUintUint
IEEEFP
IEEEFP
CIELab UintUint
ICCLab UintUint
ITULab UintUint

表 4: BitsPerSampleCompression の組み合わせに対して有効な SampleFormat の値

Compression の値BitsPerSample の値
18163264
NoneUintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
CCITTRLEUint
CCITTFax3Uint
CCITTFax4Uint
LZWUintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
JPEGUint
Int
CCITTRLEWUint
PackBitsUintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
DeflateUintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
AdobeDeflateUintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP

表 5: Photometric 設定に対して有効な SamplesPerPixel の値

Photometric の値SamplesPerPixel
MinIsWhite 1+
MinIsBlack 1+
RGB 3+
Palette1
Mask 1
Separated 1+
YCbCr 3
CIELab 3+
ICCLab 3+
ITULab 3+

表 6: RPCCoefficientTag 値の説明のリスト

92 要素ベクトルのインデックス値値の説明1単位
1平方根平均二乗バイアス誤差メートル/横軸
2平方根平均二乗確率的誤差メートル/横軸
3ラインのオフセットピクセル
4サンプルのオフセットピクセル
5測地緯度のオフセット
6測地経度のオフセット
7測地高度のオフセットメートル
8ラインのスケール係数ピクセル
9サンプルのスケール係数ピクセル
10測地緯度のスケール
11測地経度のスケール
12測地高度のスケール係数メートル
13 ~ 32有理多項式 r(n) の分子係数2
33 ~ 52有理多項式 r(n) の分母係数
53 ~ 72有理多項式 c(n) の分子係数2
73 ~ 92有理多項式 c(n) の分母係数

1RPCCoefficientTag オブジェクトを使用してこのベクトルの値を指定するには、Mapping Toolbox™ の RPCCoefficientTag (Mapping Toolbox) を参照してください。

2多項式 r(n) および c(n) は、汎用の厳密投影モデルの正規化された行と列の値を表します。

参考

関連するトピック