あらまし
使いやすい画像処理環境は、画像処理のアルゴリズム実装のときに役立ちます。
私は、GoogleColabがJavaを動かすことができることは知っていましたが、外部ライブラリを利用できることは知りませんでした。
この記事は、私が普段から使っているImageJをColabで動かす手順の記録です。
ColabNotebookを編集する
Colabノートブックはデフォルトのプログラミング言語のカーネルがpythonになっています。
これを、javaに変更します。
方法は、kernelspecのpythonの箇所をjavaに置き換えるだけです。
置き換えると、このような状態になります。
編集の方法は、まず、GoogleDriveに新しいColabノートブックを作り、空のまま、「.ipynb」でダウンロードします。
適当なテキストエディタでダウンロードしたノートブックを開き、上述の箇所を編集します。
編集し終えたら、再度、GoogleDriveへアップロードし、Colabで開きます。
JavaとIJavaをインストール
次に、OpenJDK8と、IJavaをインストールします。
ImageJはまだjava8で開発されているので、バージョンを合わせています。
IJavaは、ノートブックをJava仕様で動かすためのツールです。
以下のコードセルを追加して、実行します。
!apt update -q
!apt-get install -q openjdk-8-jdk-headless
!curl -L https://github.com/SpencerPark/IJava/releases/download/v1.3.0/ijava-1.3.0.zip -o ijava-kernel.zip
!unzip -q ijava-kernel.zip -d ijava-kernel && cd ijava-kernel && python3 install.py --sys-prefix
カーネルが無事に追加されると、カーネルリストにjavaが追加されます。
確認は以下のコマンドで可能です。
!jupyter kernelspec list
Available kernels:
ir /usr/local/share/jupyter/kernels/ir
python3 /usr/local/share/jupyter/kernels/python3
java /usr/share/jupyter/kernels/java
ホストされているランタイムに接続
ランタイムに再接続することで、Javaを有効にします。
(ランタイムの再起動ではJavaを有効にできません。)
ノートブック右上のRAM、ディスクの表示の右にある下向きの三角マークを選択して、「ホストされているランタイムに接続」を選択します。
数秒、ランタイムが再起動するまで待ちます。
Javaの動作確認
Hello javaを出力してみます。
// check running java
System.out.println("Hello java")
ImageJを動かす
次に、ImageJをMavenを使って導入します。
ここでは、拡張性を考えて、POM形式で外部ライブラリを読み込む方法を示します。
以下のコードセルを実行します。
%%loadFromPOM
<repositories>
<repository>
<id>scijava.public</id>
<url>https://maven.scijava.org/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>net.imagej</groupId>
<artifactId>ij</artifactId>
<version>1.53r</version>
</dependency>
</dependencies>
POMを用いなくとも、各ライブラリやリポジトリは、次のように一行で追加できます。
しかし、POMが確実です。
// add repositories
// %mavenRepo <ID> <URL>
// %mavenRepo scijava.public https://maven.scijava.org/content/groups/public/
// example of load dependensies
// %maven net.imagej:ij:1.53r
画像を表示したいときは、BufferedImageで返すようにします。
(DICOMは非圧縮(JPEG形式のDICOMはNG)でなければ読み込めないので注意してください)
ImagePlus sampleCT = new ImagePlus("https://imagej.nih.gov/ij/images/ct2.dcm");
sampleCT.getBufferedImage();
画像フィルタリング、画像のリサイズ、保存、しきい値処理、ROI、など処理できます。
ちょっと楽しみが増えました。
コメント募集
ImageJでこのような処理をしたい!など、難しいものでなければリクエストにお答え致します。お気軽にコメントください。
サンプルノートブック
References
- Prepare Java Kernel for Google Colab: https://colab.research.google.com/gist/tueda/a200b3f747d0fc864be8b4dd09be5a1e/java-colab.ipynb
- How to write JAVA in Google Colab: https://youtu.be/VHlSICjZRPs
- IJava Magics to work with maven: https://github.com/SpencerPark/IJava/blob/master/docs/magics.md
Visionary Imaging Services, Inc. 2022/05/11