記事ディレクトリ
1.tiff形式とは
TIFF 形式は とも呼ばれTIF
、 に属し位图格式
、フルネームは ですTag Image File Format
。
TIFF 形式と JPEG と PNG がすべて主流であり高位彩色图像格式
、.
スキャナーやファックスを使用したことのある友人は、多くのブランドとそのデフォルト ファイルに .tiff サフィックスが付いていることを覚えておく必要があります。TIFF の当初の設計目的は 1980 年頃であったため、スキャナー メーカーは、各メーカーが独自の独自形式を使用して混乱を招くのではなく、共通の統一されたスキャン イメージ ファイル形式に到達しました。
- TIFF は比較的柔軟な画像形式で、正式名称は Tagged Image File Format で、ファイル拡張子は TIF または TIFF です。この形式は、256 色、24 ビット True Color、32 ビット カラー、48 ビット カラー、およびその他のカラー ビットをサポートし、RGB、CMYK、YCbCr およびその他のカラー モードもサポートし、複数のプラットフォームをサポートします。
- TIFF ファイルは、非圧縮、より大きなサイズ、または圧縮することができ、RAW、RLE、LZW、JPEG、CCITT3 グループおよび 4 グループおよびその他の圧縮方法をサポートします。
- TIFF 形式 (Tag Image File Format) は Macintosh で広く使用されているグラフィック形式で、複雑なグラフィック形式と大容量のストレージ情報という特徴があります。3DS および 3DS MAX の多数のテクスチャは TIFF 形式です。TIFF の最大色深度は 32 ビットで、LZW ロスレス圧縮方式を使用して保存できます。
- TIFF 形式は非常に高品質の画像を生成し、出版や印刷によく使用されます。何百万もの色を表示でき (グレースケール画像は 256 色または濃淡に制限されます)、通常、GIF または JPEG 形式よりも大きな画像ファイルに使用されます。この形式で保存すると、さまざまなプログラムで認識されるため、画像を作成していないプログラムで画像を編集する場合に役立ちます。
- アプリケーションとコンピューター プラットフォームの間でファイルを交換するために使用されます。TIFF は、ほぼすべてのペイント、画像編集、およびページ レイアウト アプリケーションでサポートされている柔軟なビットマップ画像形式です。また、ほぼすべてのデスクトップ スキャナで TIFF 画像を生成できます。
2、tiffの構成
コンテンツのこの部分は、https://blog.csdn.net/tony5243/article/details/123410603 から参照されています。学習記録のみを対象としています。
TIFF (Tagged Image File Format) は、接続によってデータを編成するフラグ ベースのグラフィックスです指针
。TIFF は、画像データを除いて他のマークアップ言語とは異なります还可以记录其他信息
。其他的图像格式可以嵌入到TIFF中为其所用
. TIFF には次の 4 種類があります。
- TIFF-B、2 色。
- TIFF-G、白黒グレースケール。
- TIFF-P、パレット付きカラー グラフィック。
- RGB カラーのグラフィックスに適した TIFF-R。
TIFF は 4 つの部分で構成されています。
- イメージ ファイル ヘッダー イメージ ファイル ヘッダー (IFH)、
- イメージ ファイル ディレクトリ イメージ ファイル ディレクトリ (IFD)、
- ディレクトリ エントリ ディレクトリ エントリ (DE)、
- 画像データ。
イメージは、最初のファイル ディレクトリを指す8字节的文件头
ファイル ヘッダーで始まります。ファイル ディレクトリには、 も含まれています。图像的各种信息
一个指向实际图像数据的指针
1. 画像ファイルヘッダー (IFH)
バイト 0 ~ 1:バイト オーダー フラグ、値はII
またはですMM
。II はリトル エンディアンを意味し、リトル エンディアンとも呼ばれます。MM は、ビッグ バイトが最初に来て、再びビッグ エンディアンになることを意味します。
バイト 2-3: TIFF フラグ、通常42
バイト 4-7:最初の IFD のオフセット。任意の位置に配置できますが、単語境界上にある必要があります。つまり、2 の整数倍でなければなりません。
2. イメージ ファイル ディレクトリ (IFD)
TIFF ファイルには複数の画像が存在する可能性があり、一个IFD只标识一个图像的所有属性
TIFF ファイルには複数の画像があるため、複数の IFD が存在します。
バイト 0-1:この IFD に含まれる IFD の数を示しますDE
。每个DE只标识了图像的一个属性,那么这幅图像有N个属性就会有N个DE
. ここで数を n とします。
バイト 2-(n*12+1): n 個の DE
バイト (n 12+2)-(n 12+5):次の IFD のオフセット、如果没有(只有一幅图像)则置为0
3. ディレクトリ エントリ (DE)
バイト 0-1: TAG
、つまり、ファイル ディレクトリ に配置された属性 のラベル番号升序
。
バイト 2 ~ 3:データ型。
バイト 4-7:数量。合格过类型和数量可以确定存储此TAG的数据需要占据的字节数
バイト 8-11:占有されている場合字节数少于4
、数据直接存于此
. の場合超过4个
、ここに格納されるのは次のとおりです指向实际数据的指针
。 注: ASCII 型はテキスト型で、7 ビットの ASCII コードに 1 つのバイナリ 0 を加えたものです。Rational は小数型で、2 つの long で構成され、最初は分子で、2 番目は分母。
4. 画像データ
このデータは、圧縮されている場合と圧縮されていない場合があります。圧縮すると、圧縮アルゴリズムの種類が多くなるため、画像データは TIFF ファイルの中で最も複雑な部分であり、すべての圧縮アルゴリズムを変換できるソフトウェアはまだありません。
ケース分析
次のように、16 進数のイメージ ビューアーで tiff データを表示します。
- ファイルヘッダー: バイト 0000-0007
**バイト 0-1:** 値はすべて 49 で、対応する ASCII コードは II です。つまり、小さいバイトが最初に来ます。
**バイト 2-3:** 値は 42、TIFF フラグ ビット
**バイト 4-7:** 最初の IFD のオフセットは 8e です。つまり、最初の IFD は 8e から始まります。tif ファイルにはイメージが 1 つしかないため、IFD も 1 つしかありません。
- 画像ファイルディレクトリ:Byte 008e-015f
**バイト 008e-008f: **値は 11 です。つまり、17 のディレクトリ エントリ DE があり、各 DE が 12 バイトを占有し、17 個の DE が合計で 204 バイトを占有します。
**バイト 0090-015b:** 合計 204 バイトの 17 個の DE。以下の各 DE の分析を参照してください
**バイト 015c-015f: **値は 0、つまり、2 番目のイメージ (IFD) はありません
- ディレクトリ エントリ: バイト 0090-015f
3. tiff 形式と jpg 形式の違い
1. 異なる科目
-
tif: 柔軟なビットマップ形式で、主に写真やアートワークなどの画像を保存するために使用されます。
-
jpg: Joint Photographic Experts Group によって開発された一般的な画像形式。
2つの異なる特性
-
tif: 画像情報の保存は柔軟で変更可能であり、多くのカラー システムをサポートでき、オペレーティング システムに依存しないため、広く使用されています。
-
jpg:非可逆圧縮を使用して冗長な画像とカラー データを削除し、非常に高い圧縮率を取得しながら、非常にリッチで鮮やかな画像を表示できます。つまり、より少ないディスク容量でより良い画質を取得できます。
3.さまざまな利点
-
tif: さまざまな地理情報システム、写真測量、およびリモート センシングアプリケーションでは、画像が配置されている座標系、縮尺、画像上の点の座標、緯度と経度、長さなどのジオコーディング情報が画像に必要です。単位、角度単位。
-
jpg:プログレッシブ伝送を実現できます。つまり、画像の輪郭が最初に送信され、次にデータが徐々に送信されて画像品質が継続的に向上し、画像がぼやけてから鮮明に表示されます。
4. tiff 画像の読み方
1. python-opencv
tif 画像のエンコード形式は一般的に yes 16bit
. python-opencv を使用して tif ファイルを読み取る場合、保留其编码格式
次の方法を使用する必要があります:
import numpy as np
import cv2
img = cv2.imread('demo.tif', -1)
print(img.dtype)
输出结果为:uint16
opencv の imread 関数の最後のパラメーターは、次のように説明されています。
-
パラメータ>0 の場合、opencv は
3通道的彩色图
(灰度图也会被默认转化成彩色图
) を読み取り、エンコード形式は次のように変換されます。8bit
-
その時
参数=0
opencv が読んだのは、1通道灰度图
エンコーディング形式が に変換されるということでした。8bit
-
その際
参数<0
、opencv は按照原图的格式读取
、エンコーディング形式を16bit
返します。
2.ティフファイル
tif 画像を読み取る別の方法は、tifffile ライブラリを使用することです. Python では、最初に pip を介してインストールできます:
pip install tifffile
import tifffile as tiff
import numpy as np
a = tiff.imread('demo.tif')
print(a.shape)