私の全体的な目標は、入力 mirax (.mrxs) スライド イメージから JPEG 出力ファイルにいくつかの領域をトリミングすることです。
これらの画像の 1 つが次のようになります。
暗い灰色の領域は画像の一部であり、最終的に JPEG 形式で抽出したい領域は 3 つの黒い正方形の領域であることに注意してください。
さて、具体的には:
コマンド ラインで vips を使用して、mirax イメージからカラー チャネルを 3 つの個別の TIFF ファイルに抽出できます。
vips extract_band INPUT.mrxs OUTPUT.tiff[tile,compression=jpeg] C --n 1
チャネルC
番号 (0 ~ 2) に対応し、各出力ファイルのサイズは約 250 MB です。
次の仕事は、画像から関心領域を何らかの形で認識して抽出することなので、いくつかの python 画像処理ライブラリに目を向けましたが、ここで困難に遭遇しました。
OpenCV を使用して TIFF をロードしようとすると、次のようになります。
i = cv2.imread('/home/user/input_img.tiff',cv2.IMREAD_ANYDEPTH)
エラーが発生するerror: (-211) The total matrix size does not fit to "size_t" type in function setSize
次のようにして、Pillow でもう少し牽引力を得ることができました。
from PIL import Image
tiff = Image.open('/home/user/input_img.tiff')
print len(tiff.tile)
print tiff.tile[0]
print tiff.info
出力:
636633
('jpeg', (0, 0, 128, 128), 8, ('L', ''))
{'compression': 'jpeg', 'dpi': (25.4, 25.4)}
ただし、画像をロードする以外に、有用な操作を実行できないようです。たとえば、tiff.tostring()
結果が得られますMemoryError
(PILオブジェクトをnumpy配列に変換しようとしてこれを行います)タイルが存在する場合でも、この操作が有効かどうかはわかりません。
私の限られた理解では、これらの TIFF は画像データを「タイル」(上の画像には 636633 が含まれています) に JPEG 圧縮形式で格納します。
ただし、これらのタイルを通常の JPEG 画像として使用するためにどのように抽出するのか、または上記のプロセスの一連の手順が ROI をミラックスのイメージ。
私が正しい方向に進んでいる場合は、いくつかのガイダンスをいただければ幸いです。または、Python を使用せずに vips/openslide を使用して目標を達成する別の方法がある場合は、アイデアを聞いてみたいと思います。さらに、説明した TIFF ファイルをどのように処理または理解できるかについての詳細情報も役立ちます。
理想的な状況は次のとおりです。
1) vips/openslide の自動クロッピング機能の一種で、TIFF または元の mirax 画像から JPEG を生成できます。次のコマンドの行に従って、何万もの画像を生成する必要はありません。
vips dzsave CMU-1.mrxs[autocrop] pyramid
2) OpenCV または別の方法を使用して 3 つの ROI を検出するために、TIFF からタイルを抽出し、画像領域に対応するデータを numpy 配列として格納できること。