省型旧形国電の残影を求めて

戦前型旧形国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

ImageJ / Python プログラミング

ImageJのコマンドをPythonのコードに落とす (1)

とりあえず自分にとってよく使いそうなコードに関するメモです。 ImageCalculator (画像計算機) Process > ImageCalculator Image Calculator コード 操作対象はImagePlusです。 from ij import ImagePlus, plugin ic = plugin.ImageCalculator()imp2 = ic.r…

ImageJ / Python プログラミング Tips: イベントリスナーにおいてイベントを区分する (2)

では、次に複数の同じアイテム(部品)が並んだ場合、イベントが発生したときにそれらを区別するにはどうしたら良いのでしょうか? 例えば数値入力ボックスが複数並んだケースを考えます。この数値入力ボックスに値を入れたり、変更すると、メッセージボックス…

ImageJ / Python プログラミング Tips: イベントリスナーにおいてイベントを区分する (1)

インターアクティブなユーザインターフェースを作るにはイベントリスナーの設置が必須ですが、イベントリスナーに発生するイベントにたくさん種類があるわけではありません。 例えば、以前公開した以下のサンプルプログラムですが... yasuo-ssi.hatenablog.c…

ImageJ / Python プログラミング Tips: 開かれている画像がない場合はファイルから読み込む

以下、開かれてる画像があればその画像の情報を取得し、開かれている画像がなければ、ファイル選択ダイアログを開いてファイルを読み込む、ImageJ の Python を使ったプログラミングサンプルをお示しします。 プログラミング初心者でも、書きたいプログラム…

ImageJ / Python プログラミング Tips: 極力単純化した ROI を対話的に設定するダイアログ サンプルプログラム

以前、以下のページで、イギリスのMRC分子生物学研究所で公開している、ROIを対話的に設定するサンプルプログラムの解説を載せました。 yasuo-ssi.hatenablog.com ただ、このサンプル、結構凝っていて、初学者には分かりにくいです。そこで、このサンプルプ…

ImageJ / Python プログラミング Tips: 指定した画像をアクティブウィンドウに設定する

ImageJWM.getActiveWindow()で複数の画像を開いているときに、現在アクティブなウィンドウの画像を ImagePlus画像として取得するには、下記のように行います。 from ij import IJ, ImagePlusimp = IJ.getImage() この他 WindowManagerを使うとアクティブウィ…

画像の減算, 乗算、マスクとの関係で陥りやすい錯覚に関するメモ (1) - GIMP & ImageJ

当サイトで開発・公開している写真補正用ツールでは、画像計算をフル活用していますが、最近、陥りやすい錯覚に気づきました。 ・画像全体の値を20%下げるのと20%ポイント下げるのでは異なる まず下にサンプル画像を示します。 オリジナル画像 このオリジナ…

ImageJ / Python Tips: 高階関数を使ったピクセルの反復処理

高階関数とは、引数に関数を取る関数のことです。MRC分子生物学研究所のImageJチュートリアルで、forループを使う代わりに高階関数を使ってピクセルの反復処理を行う事例を紹介しています。高階関数の説明自体は例えば下記のサイトをご覧ください。 utokyo-i…

イベントリスナーを用いた ImageJ 双方向ユーザインターフェースサンプルプログラム

ImageJ / Python プラグイン・ユーザインターフェース作成のお勉強として、イベントリスナーを使った双方向型ダイアログのサンプルプログラムを作ってみました。下記のように、ダイアログにスライドバー、チェックボックス、数値入力ボックス、ドロップダウ…

Imagej / Python Tips: ImageProcessorのbit深度を変更する際の注意

ImageProcessorには以下の記事に書いたように、8bit、256種類の区分(0-255の整数)しかない ByteProcessor, 16bit、65536種類の区分(0-65535の整数)のある ShortProcessor、32bitフルに使う FloatProcessor、RGBを1チャンネル当たり8bit x 3で表し、24bit使う…

ImageJ スクリプトエディタでのエラーの思わぬ原因 - ImageJ / Pythonプログラミング Tips

先日、ImageJ用のPython (Jython)プラグインスクリプトの開発を、ImageJのスクリプトエディタ上で行っていたら、突然以下のようなエラーが出てちゃんと動作しません。 java.lang.IllegalArgumentException: Cannot create PyString with non-byte value 今ま…

辞書型変数を戻り値に使用しようとして失敗 - Python Tips

Pythonでは辞書型変数を関数の引数に使用することができます。 例えば、次のような関数を設定します def routine1(x, dic1): 中身 return a.... この時、dic1 は辞書型変数だとします。 これをメインでdic1の中身を定義し(例えば dic1 = {"Key1":1, "Key2":2…

A Fiji Scripting Tutorial インデックス翻訳

ImageJ / Fiji cookbook と並んで ImageJプログラミングの重要な参考サイトである、イギリス MRC分子生物学研究所サイトで公開している A Fiji Scripting Tutorial に関しても、インデックスを翻訳しておきます。 Index 始めよう スクリプト・エディタを開く…

Python - ImageJ/Fiji Cookbook サンプルへのリンクの翻訳

ImageJでPythonを使ったときにプログラミングを行う際に、非常に役立つサンプル集であり、neubias (network of european bioimage analysts) によって維持されていると思われる、Python - ImageJ/Fiji Cookbook ですが、サンプルへのリンクの翻訳を作ってお…

Imagej / Python Tips: ROIがあるときのImagePlusの複写に注意

久しぶりの ImageJ Pythonプログラミング Tipsです。最近引っかかったのですが、ImagePlusオブジェクトを Duplicateしたものに対して、各ピクセルへの反復処理を行っていたところ、どうも配列の範囲を超えてしまうようなのです。 おかしいなと思って探ってみ…

ImagePlus, ImageProcessor, ImageStackの関係 - ImageJ

いままで、ImageJにおける、ImagePlus, ImageProcessor, ImageStackの関係の理解が不十分でした(個人的に)。今回この関係を整理したいと思います。 まずImagePlusですが、これはImageJ上における、ほぼファイルに相当する概念です。GIMPで言えば、Image概念…

ImageJ / Python Tips: ImageJにおけるカラー画像の画像深度の扱いについて

ImageJの画像の型はImagePlusのgetTypeメソッドで取得できます。その種類は、 現状では、GRAY8, GRAY16, GRAY32, COLOR_RGB, 及び COLOR_256です。GRAY8はグレースケール(もしくは色チャンネル単独)で8bit (0-255の値を取る)、GRAY16はグレースケール(もしく…

Imagej / Python Tips: ImageJ APIレファレンスの構成

ImageJのAPIリファレンスはアメリカ国立衛生研究所 (National Institute of Health: NIH)のサイトにあります。なお、最近当ブログで書いたようにAPIドキュメントのURLがこの3月下旬に微妙に変わっています。 NIH ImageJトップサイト imagej.nih.govImageJ De…

ImageJ / Python Tips: 8/16bit画像と、閾値設定、二値化マスク関連まとめ

今までImageJにおけるPythonプログラミングをやってきて、Threshold(閾値)設定関連で気づいたことをまとめてみます。ImageJはまだ8bit画像を前提としているところがあって、16bit (あるいはそれ以上のbit深度) 画像を扱うには注意しなければならない点が結構…

ImageJ / Python プログラミング Tips: getMaskメソッドのバグ(?)を回避する

前回修正したものを公開した、ImageJ対応 汎用色チャンネルマスク画像作成ツールのバグですが、以下のようなものでした。 二値化マスク作成の際クリップされる範囲 要は、左端と上端に、ROIが一切かからない x または y の範囲が存在すると、その部分が二値…

ImageJ / Python Tips: ImagePlus (or ImageProcessor) 画像データからLook up tableを外す

ImageJの機能に、Look up table(略称LUT)というものがあります。これは画像データの値自体を変えなくても、表示だけを変える、いわば画像表示のためのフィルター機能のようなものです。 Look up tableは基本はグレースケール画像、または単チャンネルの画像…

ImageJ / Python: 対話型ユーザインターフェースのお勉強 (ROI設定ダイアログ)

再び、MRC分子生物学研究所で公開している、ImageJの対話的ダイアログのサンプルプログラムの紹介です。今日は、ROI (注目領域、選択範囲)を対話的に設定するダイアログです(Create a UI: open a window to edit the position and dimensions of an ROI)。画…

ImageJ / Python: 対話型インターフェースのお勉強 (バックグラウンドスレッドで動かす)

今回取り上げるのは「Managing UI-launched background tasks (ユーザインターフェースから起動するバックグラウンドタスクのマネージング)」というサンプルプログラムです。このプログラムは、前回と全く同様、プレビュー画面で画像を拡大したり縮小するこ…

ImageJ API レファレンスの URLが変わっています

最近、NIH (アメリカ国立衛生研究所) のサイトにある、ImageJのAPIリファレンスのURLが微妙に変わっています。3月下旬ごろ変更されているようです。そのため、GoogleでImageJの個々のAPIを検索を掛けると 404 File not found! エラーが出てしまいます(Google…

ImageJ / Python Tips: イベントリスナー使用の陥穽

先日解説をつけた、MRC分子生物学研究所で公開している、ImageJの対話的ダイアログのサンプルプログラムを改造して、数値入力欄からパラメータ数値を得てプレビュー画像上にROI(注目範囲、選択範囲)を表示する、対話型ダイアログボックスを作ろうと思いまし…

ImageJ / Python 対話的ユーザインターフェースのお勉強

今まで、ImageJを使った自作の画像処理のプログラムを公表してきていますが、どうもユーザインターフェース周りが苦手です。自分のためだけにプログラムを書くには、自分が一番よく分かっていますので、インターフェースに神経を使う必要はありません。しか…

ImageJ / Python Tips: 上端と下端の閾値のある二値マスクをどう書くか?

ImageJのコマンドに上端と下端に閾値のある一定範囲の明度で区切られたマスクを作成する、Thresholdコマンドがあります。 メニュー→ [Image]→ [Adjust]→ [Threshold] ImageJ Thresholdコマンド実行状態 これを Pythonのスクリプトで書くにはどうしたら良いで…

ImageJ / Pyhon Tips 画像ピクセルの輝度値の取得 / 設定・書換え

[2021.12追記: 誤りがありましたので一部記述を訂正しました] ImageJでPython (Jython) を使って画像の個々のピクセルにアクセスし、そこに記されている輝度(明るさ)の値を取得したり、設定(書換え)する方法についてのメモを記しておきます。 ■ピクセルの輝…

ImageJ / Python: Jython でunicode 文字列を printすると...

これも個人的備忘録です。 ImageJ上でJythonを使ってunicode文字列(このケースは日本語を含むファイル名)をprintで出力しようとすると... ログコンソールがUnicode文字に対応していないので次のような表記になります。 文字列の頭に「u'」が付きますが、これ…

ImageJ / Python Tips: ImageCalculatorの使用

ImageJのImageCalculatorは、2つの画像の間で演算を行う機能です。この機能も、当然ながらマクロで記録することができ、そのマクロを再生して動かすことが可能ですが、Python (Jython) を使って IJ.runでそのマクロを書き換えるとうまく動きません。おそらく…