t_kahi’s blog

KNIMEやCellProfiler、創薬に関する記事と,日々のメモです

【KNIME】マルチチャンネル画像データの一部を切り抜いてタイル状に並べるWorkflow①

こんにちは,@PKです.
今日はマルチチャンネル画像データをタイル状に並べるWorkflow①を紹介します.

はじめに

同僚からマルチチャンネル画像を任意に切り抜いてタイル状に並べたいと相談がありました.

f:id:t_kahi:20200113135010p:plain

PythonOpenCVを使ったり,
Python, OpenCVで画像を縦・横に連結 (hconcat, vconcat, np.tile) | note.nkmk.me
CellProfilerを使ってもできると思ったのですが,KNIMEでも画像ファイル触れると思って調べていると,ちょうど参考になるExample Workflowがありました.

Image Montage – KNIME Hub

こちらのWorkflowを参考しながら,複数のマルチチャンネル画像データの特定の部分を切り出してタイル状に並べるWorkflowを作成したので,2回に分けて,Workflowを紹介していきます.

Workflowの概要

今回作成したWorkflowは以下のとおりです.

f:id:t_kahi:20200113155633p:plain

上記Workflowの流れを以下に示しました(下図も参考にしてください).

  • 画像データの読み込み
  • ファイル名で画像データを並び替え
  • 画像の特定部分を切り抜き
  • マルチチャンネルを分解
  • チャンネルごとにループ処理を行い,タイル画像を作成
  • チャンネルごとのタイル画像を1枚のマルチチャンネル画像に変換
  • データの出力

f:id:t_kahi:20200113155757p:plain

KNIMEで画像を扱う場合は,「KNIME Image Processing」をインストールします.

インストールをしていない方は下記を参考してください.
Install KNIME Image Processing | KNIME

画像ファイルは以下を使用させていただきました.
http://cellimagelibrary.org/images/CCDB_44959
Angela Cone (2009) CCDB:44959, NA, None, astrocyte. CIL. Dataset. https://doi.org/doi:10.7295/W9CCDB44959

画像ファイルの読み込み

今回はサンプル画像として,名前だけ異なる画像ファイルを18枚用意しました.
f:id:t_kahi:20200113161241p:plain

画像の読み込みは「Image Reader」で行います.
nodepit.com

上図のように画像が格納されているフォルダを選択し,実行すると画像ファイルが読み込まれます.
今回はJPEGファイルを読み込みましたが,以下に示してある形式であれば読み込むことができるそうです.
Supported Formats — Bio-Formats 6.3.1 documentation

f:id:t_kahi:20200113144450p:plain

ファイル名で画像データを並び替え

「Image Reader」を実行すると下図の左のように,読み込めてはいますが,ファイル名がRow IDになってしまっているので,右下図のように名前順にソートします.
f:id:t_kahi:20200113150754p:plain

この部分は基本的なノードを使っているので,以下に概要を示して詳細は割愛します.
f:id:t_kahi:20200113155925p:plain

画像の特定部分を切り抜き

画像の切り抜きは「Image Cropper」で行います.
nodepit.com

以下の設定画面のように,OptionのXとYの部分を切り抜きたい部分を指定して実行した結果を以下に示します.
f:id:t_kahi:20200113154245p:plain

「Image Cropper」によって,元画像から [200, 200, 3]の画像を作成しました.

ちなみに画像の切り抜きはCelProfilerでも簡単にできますので,以下に参考記事を載せておきます.
【CellProfiler】Example pipeline(Fruit fly cells)で画像解析の基礎を学ぶ①:画像のトリミング - t_kahi’s blog

各チャンネルごとに分解

続いて,「Splitter」ノードを使ってマルチチャンネルの画像を,各チャンネルごとにカラムに展開します.

nodepit.com

設定画面では以下図のように,Splitするカラムを選択し,どのDimentionを残すか決めます.今回はZのみを分解します.
実行すると,右下図のように,各チャンネルごとにカラムが作成できていることがわかります.
f:id:t_kahi:20200113160509p:plain

最後に

マルチチャンネル画像データの一部を切り抜いてタイル状に並べるWorkflowの紹介ということで,画像の読み込みから,各チャンネルごとに添加する部分までを紹介しました.
この続きは次回の記事で紹介したいと思います.