イメージへのエクスポート
標準グラフィックス ファイル形式の 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"))
イメージ データのストリップまたはタイルの書き込み
メモ: イメージ データのストリップまたはタイルの変更は、データが圧縮されていない場合に限り可能です。
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)
イメージの中央を横切る黒いストリップに注意してください。
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 タグ | クラス | サイズ | サポートされている値 | メモ |
|---|---|---|---|---|
Artist | char | 1 行 N 列 | — | — |
BitsPerSample | double | 1 行 1 列 | 1, 8, 16, 32, 64 | 表 2 および表 3 を参照。 |
ColorMap | double | 256 行 3 列 | 値は区間 [0, 1] 内で正規化する必要がある。uint16 値として内部に保存。 | Photometric は Palette でなければならない。 |
Compression | double | 1 行 1 列 | None: 1CCITTRLE: 2CCITTFax3: 3CCITTFax4: 4LZW: 5JPEG: 7CCITTRLEW: 32771PackBits: 32773Deflate: 32946AdobeDeflate: 8 | 表 4 を参照。 |
Copyright | char | 1 行 N 列 | — | — |
DateTime | char | 1 行 19 列 | 戻り値は、必要に応じて 19 文字となるようにパディングされる。 | — |
DocumentName | char | 1 行 N 列 | — | — |
DotRange | double | 1 行 2 列 | — | Photometric は Separated でなければならない。 |
ExtraSamples | double | 1 行 N 列 | Unspecified: 0AssociatedAlpha: 1UnassociatedAlpha: 2 | — |
FillOrder | double | 1 行 1 列 | — | — |
GeoAsciiParamsTag | char | 1 行 N 列 | — | — |
GeoDoubleParamsTag | double | 1 行 N 列 | — | — |
GeoKeyDirectoryTag | double | N 行 4 列 | — | — |
Group3Options | double | 1 行 1 列 | — | Compression は CCITTFax3 でなければならない。 |
Group4Options | double | 1 行 1 列 | — | Compression は CCITTFax4 でなければならない。 |
HalfToneHints | double | 1 行 2 列 | — | — |
HostComputer | char | 1 行 N 列 | — | — |
ICCProfile | uint8 | 1 行 N 列 | — | — |
ImageDescription | char | 1 行 N 列 | — | — |
ImageLength | double | 1 行 1 列 | — | — |
ImageWidth | double | 1 行 1 列 | — | — |
InkNames | char cell array | 1 行 NumInks 列 | — | Photometric は Separated でなければならない。 |
InkSet | double | 1 行 1 列 | CMYK: 1MultiInk: 2 | Photometric は Separated でなければならない。 |
JPEGQuality | double | 1 行 1 列 | 区間 [1, 100] 内の値 | — |
Make | char | 1 行 N 列 | — | — |
MaxSampleValue | double | 1 行 1 列 | 区間 [0, 216-1] 内の値 | — |
MinSampleValue | double | 1 行 1 列 | 区間 [0, 216-1] 内の値 | — |
Model | char | 1 行 N 列 | — | — |
ModelPixelScaleTag | double | 1 行 3 列 | — | — |
ModelTiepointTag | double | N 行 6 列 | — | — |
ModelTransformationMatrixTag | double | 1 行 16 列 | — | — |
NumberOfInks | double | 1 行 1 列 | — | NumberOfInks は SamplesPerPixel と等しくなければならない。 |
Orientation | double | 1 行 1 列 | TopLeft: 1TopRight: 2BottomRight: 3BottomLeft: 4LeftTop: 5RightTop: 6RightBottom: 7LeftBottom: 8 | — |
PageName | char | 1 行 N 列 | — | — |
PageNumber | double | 1 行 2 列 | — | — |
Photometric | double | 1 行 1 列 | MinIsWhite: 0MinIsBlack: 1RGB: 2Palette: 3Mask: 4Separated: 5YCbCr: 6CIELab: 8ICCLab: 9ITULab: 10 | 表 3 を参照。 |
Photoshop | uint8 | 1 行 N 列 | — | — |
PlanarConfiguration | double | 1 行 1 列 | Chunky: 1 Separate: 2 | — |
PrimaryChromaticities | double | 1 行 6 列 | — | — |
ReferenceBlackWhite | double | 1 行 6 列 | — | — |
ResolutionUnit | double | 1 行 1 列 | — | — |
RICHTIFFIPTC | uint8 | 1 行 N 列 | — | — |
RowsPerStrip | double | 1 行 1 列 | — | — |
RPCCoefficientTag | double | 1 行 92 列 | — | 表 6 を参照。 |
SampleFormat | double | 1 行 1 列 | Uint: 1Int: 2IEEEFP: 3 | 表 2 を参照。 |
SamplesPerPixel | double | 1 行 1 列 | — | — |
SMaxSampleValue | double | 1 行 1 列 | イメージ データ用に指定された MATLAB データ型の範囲 | — |
SMinSampleValue | double | 1 行 1 列 | イメージ データ用に指定された MATLAB データ型の範囲 | — |
Software | char | 1 行 N 列 | — | — |
StripByteCounts | double | 1 行 N 列 | — | 読み取り専用 |
StripOffsets | double | 1 行 N 列 | — | 読み取り専用 |
SubFileType | double | 1 行 1 列 | Default : 0ReducedImage: 1Page: 2Mask: 4 | — |
SubIFD | double | 1 行 1 列 | — | — |
TargetPrinter | char | 1 行 N 列 | — | — |
Thresholding | double | 1 行 1 列 | BiLevel: 1 HalfTone: 2 ErrorDiffuse: 3 | Photometric は MinIsWhite または MinIsBlack でなければならない。 |
TileByteCounts | double | 1 行 N 列 | — | 読み取り専用 |
TileLength | double | 1 行 1 列 | 16 の倍数でなければならない | — |
TileOffsets | double | 1 行 N 列 | — | 読み取り専用 |
TileWidth | double | 1 行 1 列 | 16 の倍数でなければならない | — |
TransferFunction | double | メモ1 を参照 | 区間 [0, 216-1] 内でなければならない | SamplesPerPixel は 1 または 3 でなければならない。 |
WhitePoint | double | 1 行 2 列 | — | Photometric は RGB、Palette、YCbCr、CIELab、ICCLab、または ITULab でなければならない。 |
XMP | char | 1 行 N 列 | — | N > 5 |
XPostion | double | 1 行 1 列 | — | — |
XResolution | double | 1 行 1 列 | — | — |
YCbCrCoefficients | double | 1 行 3 列 | — | Photometric は YCbCr でなければならない。 |
YCbCrPositioning | double | 1 行 1 列 | Centered: 1 Cosited: 2 | Photometric は YCbCr でなければならない。 |
YCbCrSubSampling | double | 1 行 2 列 | — | Photometric は YCbCr でなければならない。 |
YPosition | double | 1 行 1 列 | — | — |
YResolution | double | 1 行 1 列 | — | — |
ZipQuality | double | 1 行 1 列 | 区間 [0, 9] 内でなければならない | — |
1 サイズは 1 行 2BitsPerSample 列または 3 行 2BitsPerSample 列です。
表 2: BitsPerSample 設定に対して有効な SampleFormat の値
BitsPerSample | SampleFormat | MATLAB データ型 |
|---|---|---|
1 | Uint | logical |
8 | Uint, Int | uint8, int8 |
16 | Uint, Int | uint16, int16 |
32 | Uint, Int, IEEEFP | uint32, int32, single |
64 | IEEEFP | double |
表 3: BitsPerSample と Photometric の組み合わせに対して有効な SampleFormat の値
Photometric の値 | BitsPerSample の値 | ||||
|---|---|---|---|---|---|
1 | 8 | 16 | 32 | 64 | |
MinIsWhite | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
MinIsBlack | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
RGB | — | Uint | Uint | UintIEEEFP | IEEEFP |
Palette | — | Uint | Uint | — | — |
Mask | Uint | — | — | — | — |
Separated | — | Uint | Uint | UintIEEEFP | IEEEFP |
YCbCr | — | Uint | Uint | UintIEEEFP | IEEEFP |
CIELab | — | Uint | Uint | — | — |
ICCLab | — | Uint | Uint | — | — |
ITULab | — | Uint | Uint | — | — |
表 4: BitsPerSample と Compression の組み合わせに対して有効な SampleFormat の値
Compression の値 | BitsPerSample の値 | ||||
|---|---|---|---|---|---|
1 | 8 | 16 | 32 | 64 | |
None | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
CCITTRLE | Uint | — | — | — | — |
CCITTFax3 | Uint | — | — | — | — |
CCITTFax4 | Uint | — | — | — | — |
LZW | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
JPEG | — | UintInt | — | — | — |
CCITTRLEW | Uint | — | — | — | — |
PackBits | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
Deflate | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
AdobeDeflate | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
表 5: Photometric 設定に対して有効な SamplesPerPixel の値
Photometric の値 | SamplesPerPixel |
|---|---|
MinIsWhite | 1+ |
MinIsBlack | 1+ |
RGB | 3+ |
Palette | 1 |
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 | 有理多項式 の分子係数2 | — |
| 33 ~ 52 | 有理多項式 の分母係数 | — |
| 53 ~ 72 | 有理多項式 の分子係数2 | — |
| 73 ~ 92 | 有理多項式 の分母係数 | — |
1RPCCoefficientTag オブジェクトを使用してこのベクトルの値を指定するには、Mapping Toolbox™ の を参照してください。RPCCoefficientTag (Mapping Toolbox)
2多項式 および r(n) は、汎用の厳密投影モデルの正規化された行と列の値を表します。c(n)