こんにちは,@PKです.
今日はマルチチャンネル画像データをタイル状に並べるWorkflow①を紹介します.
はじめに
同僚からマルチチャンネル画像を任意に切り抜いてタイル状に並べたいと相談がありました.
PythonのOpenCVを使ったり,
Python, OpenCVで画像を縦・横に連結 (hconcat, vconcat, np.tile) | note.nkmk.me
CellProfilerを使ってもできると思ったのですが,KNIMEでも画像ファイル触れると思って調べていると,ちょうど参考になるExample Workflowがありました.
こちらのWorkflowを参考しながら,複数のマルチチャンネル画像データの特定の部分を切り出してタイル状に並べるWorkflowを作成したので,2回に分けて,Workflowを紹介していきます.
Workflowの概要
今回作成したWorkflowは以下のとおりです.
上記Workflowの流れを以下に示しました(下図も参考にしてください).
- 画像データの読み込み
- ファイル名で画像データを並び替え
- 画像の特定部分を切り抜き
- マルチチャンネルを分解
- チャンネルごとにループ処理を行い,タイル画像を作成
- チャンネルごとのタイル画像を1枚のマルチチャンネル画像に変換
- データの出力
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枚用意しました.
画像の読み込みは「Image Reader」で行います.
nodepit.com
上図のように画像が格納されているフォルダを選択し,実行すると画像ファイルが読み込まれます.
今回はJPEGファイルを読み込みましたが,以下に示してある形式であれば読み込むことができるそうです.
Supported Formats — Bio-Formats 6.3.1 documentation
ファイル名で画像データを並び替え
「Image Reader」を実行すると下図の左のように,読み込めてはいますが,ファイル名がRow IDになってしまっているので,右下図のように名前順にソートします.
この部分は基本的なノードを使っているので,以下に概要を示して詳細は割愛します.
画像の特定部分を切り抜き
画像の切り抜きは「Image Cropper」で行います.
nodepit.com
以下の設定画面のように,OptionのXとYの部分を切り抜きたい部分を指定して実行した結果を以下に示します.
「Image Cropper」によって,元画像から [200, 200, 3]の画像を作成しました.
ちなみに画像の切り抜きはCelProfilerでも簡単にできますので,以下に参考記事を載せておきます.
【CellProfiler】Example pipeline(Fruit fly cells)で画像解析の基礎を学ぶ①:画像のトリミング - t_kahi’s blog
各チャンネルごとに分解
続いて,「Splitter」ノードを使ってマルチチャンネルの画像を,各チャンネルごとにカラムに展開します.
設定画面では以下図のように,Splitするカラムを選択し,どのDimentionを残すか決めます.今回はZのみを分解します.
実行すると,右下図のように,各チャンネルごとにカラムが作成できていることがわかります.
最後に
マルチチャンネル画像データの一部を切り抜いてタイル状に並べるWorkflowの紹介ということで,画像の読み込みから,各チャンネルごとに添加する部分までを紹介しました.
この続きは次回の記事で紹介したいと思います.