SVSデータフォーマットとは何ですか?
TIFF (Tagged Image File Format) は、画像を保存するためのファイル形式です。TIFF ファイルは、複数の「ページ」または画像、およびさまざまな保存形式と圧縮方法をサポートしています。このようなストレージ形式の 1 つは、Tiled TIFF ストレージ形式と呼ばれます。
タイル化 TIFF: タイル化 TIFF 画像は、同じサイズ (通常は 256 × 256 ピクセル) の多数の正方形のタイルで構成されます。Tiled 形式の利点は、単一の大きな (巨大な) モノリシック画像を読み込むのではなく、絶対に必要な画像のみを読み込むことで、非常に大きな画像を効率的に読み込んで表示できることです。
SVS: SVS ファイルは、スライド ラベル、概要画像、およびスキャンされたスライドの縮小されたいくつかのコピーを含む追加のページ (画像) を含むタイル状の TIFF 画像です。
当社では、顕微鏡スライドからスキャンされた関心領域 (ROI) を含む画像フォーマットを指すために「全体スキャン画像」(WSI) という用語を使用します。通常、フル スキャン画像は非常に大きくなります。画像のピクセルは約 100,000 × 100,000 で、画像のサイズは通常 60M ~ 1.5G ですが、これらのファイルは大きすぎてほとんどのコンピューターのメモリに収まりません。したがって、jpg、png、bmp などの従来の画像形式は、このような画像の保存に使用できません。タイル化された TIFF ファイルは、これらの画像を小さな正方形の「タイル」に分割することを提案しています。
OpenSlide デモにはオンラインの写真があります。
全体スキャン画像(WSI)では 3 つの異なるファイル形式を作成できます。
- ディープズーム
- タイル状 TIFF (SVS)
- イージーズーム(SZI)
SVS を共通フォーマットに変換する
1. OpenCV の試行が失敗しました: svs ファイル サイズが範囲外です×
“ cv2.error: OpenCV(3.4.2) /io/opencv/modules/imgcodecs/src/loadsave.cpp:74: error: (-215:Assertion failed) pixels <= (1<<30) in function 'validateInputImageSize' ”,
2. OpenSlide(openslide-python) : https://openslide.org/
OpenSlide は、Python インターフェイスを備えたオープンソースの C ライブラリで、非常に使いやすいです。openslide の具体的な使用方法については、Baidu 自身で行うことができます。リンクは次のとおりです: https://blog.csdn.net/weixin_41787032/article/details/79817926
# 将.svs转化成.tif
import openslide
import numpy as np
import scipy.misc
test = openslide.open_slide('test.svs')
img = np.array(test.read_region((0, 0), 0, test.dimensions))
scipy.misc.imsave('test.tif', img)
デメリット:高解像度の画像を丸ごと保存すると、画像サイズが何倍にも大きくなります(tiff形式で保存されるため約10倍になりますが、jpg形式だと確かに画像は小さくなりますが、ただし、これは非可逆圧縮です。PNG も良い選択であると考えてください)。これは、画像の最大解像度を維持できるように、レベル = 0 の下の寸法が取得されるためです。ただし、同時に、画像が大きい場合や、コンピューターのパフォーマンスがわずかに低下すると、コンピューターがスタックするか、MemoryError エラーが報告される可能性があります。
3. libvips(pyvips) : http://jcupitt.github.io/libvips/API/current/Examples.md.html
libvips も C ライブラリですが、pyvips と呼ばれる Python インターフェイスもあります。公式を参照してください。使用方法のドキュメント: https://libvips.github.io/pyvips/。
コードは次のとおりです。
import pyvips
img = pyvips.Image.new_from_file('test.svs', access='sequential')
img.write_to_file('test.tif')
長所: 直接読み取り、保存します。保存に失敗することはありません。つまり、メモリエラーなどの保存に失敗する現象が発生しません。
欠点: 保存後の画像のサイズは依然として非常に大きくなります。
SVSの表示
1. pyvips ライブラリを使用して、svs ファイルを dzi ファイル形式に変換し、保存します。
import pyvips
img = pyvips.Image.new_from_file('test.svs', access='sequential')
img.dzsave('test')
上記のコードを実行すると、test.dzi、test_files という 2 つのファイルが生成されます。前者は 1 つのファイルで、後者は、異なる解像度の svs ファイルのスライスと test.dzi 内のファイルを保存するフォルダーです。内容は以下の通りです。
<?xml version="1.0" encoding="UTF-8"?>
<Image xmlns="http://schemas.microsoft.com/deepzoom/2008"
Format="jpeg"
Overlap="1"
TileSize="254"
>
<Size
Height="32893"
Width="46000"
/>
</Image>
2. OpenSeaDragon ライブラリをダウンロードし、HTML ファイルを生成します
① dzi ファイルを表示するには、OpenSeaDragon という Java ライブラリ (https://openseadragon.github.io/examples/tilesource-dzi/) があります。OpenSeaDragon をダウンロードし、ローカルの任意のフォルダーに解凍し、openseadragon に名前を変更します。
②html ファイルも必要です (出典: https://blog.csdn.net/qianqianyixiao1/article/details/50420398)。ここでは test.html という名前で、内容は次のとおりです。
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<title>OpenSeadragon_Demo0</title>
<script src='../openseadragon.min.js'></script>
</head>
<body>
<div id='openSeadragon1' style='width:1850px; height:960px;'></div>
</body>
<script type='text/javascript'>
OpenSeadragon({
id: 'openSeadragon1',
prefixUrl: '../images/',
tileSources: {
Image: {
xmlns: 'http://schemas.microsoft.com/deepzoom/2008',
Url: './test_files/',
Overlap: '1',
TileSize: '254',
Format: 'jpeg',
Size: {
Height: '32893',
Width: '46000'
}
}
}
});
</script>
</html>
内部のデータを dzi ファイル内のデータに置き換えることを忘れないでください。そうすれば、test.dzi ファイルを削除できます。
3. test.html フォルダーと test_files フォルダーを同じディレクトリ (ここでは、ディレクトリ名はzoomFiles) に配置し、それらを openseadragon フォルダーに配置します。次に、test.html ファイルをクリックし、Web ページをクリックします。対応する結果を表示できます。