1

私の全体的な目標は、入力 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 配列として格納できること。

4

1 に答える 1

1

vips Python bindingを使用します。これは PIL に非常に似ていますが、これらの巨大な画像を処理できます。次のようなものを試してください:

from gi.repository import Vips

slide = Vips.Image.new_from_file(sys.argv[1])
tile = slide.extract_area(left, top, width, height)
tile.write_to_file(sys.argv[2])

もちろん、コマンドラインでエリアを抽出することもできます:

$ vips extract_area INPUT.mrxs OUTPUT.tiff left top width height

ただし、Python のループよりも少し遅くなります。cropの同義語として使用できますextract_area

openslide は、さまざまなサブイメージのレイアウトと位置を説明する多くのメタデータをイメージに添付します。試す:

$ vipsheader -a myslide.mrxs 

そして、出力を見てください。そこからサブイメージの位置を計算できる場合があります。また、openslide メーリング リストで質問したいと思います。彼らは非常に専門的で、非常に役に立ちます。

あなたが試すことができるもう1つのこと:低解像度の概要を取得し、そのコーナーを検出してから、高解像度の画像からタイルを抽出します. スライドの低解像度バージョンを取得するには、次のことを試してください。

$ vips copy myslide.mrxs[level=7] overview.tif

レベル 7 は 2 ** 7 でダウンサンプリングされるため、128x です。

于 2015-05-01T22:30:56.423 に答える