ImageJ / Python プログラミング
ImageJ においてその画像の明るさ、あるいは各 RGB チャンネルの値の最大値、最小値を取得するにはどうしたら良いでしょうか? 以下の、ImageJ のImageProcessor のレファレンスを見ると... imagej.net getMax(), getMin() というメソッドがあるのが分かりま…
ImageJ のインターアクティブ UI を書いていて、次のようなエラーメッセージが出ました。 ValueError: invalid literal for float このエラーが出たのは以下のコードでした。 self.maskThr = float(self.nfield_maskThr.getText()) UI の numericField から…
先日も報告したように トーン再現カーブ (TRC) エンコード / デコードプログラムを作成していて大はまりしましたが、ようやく原因が分かりました。結局分かったことは、画像の bit 深度によって gamma メソッドの動作の仕方が異なるということです。 以下 Ve…
ImageJ の明るさを示す値は、8bit ByteProcessor および 24bit (8 x 3チャンネル) ColorProcessor では 0 -255, 16bit ShortProcessor では 0 - 65535 の正負符号なしデータ、32bit の FloatProcessor では正負符号付でもなしでもよく、値の範囲制限もありま…
以前、ImageJ で、sRGB 式の TRC をエンコード、デコードするプラグインスクリプトを公開しました。その中でちょっと手抜きをしていると書きましたが、今回その手抜きを止めて真面目に取り組むことにしました。ところがその修正作業で大はまり。 まず sRGB …
ImageJ の利用者同士の自助組織、オンラインフォーラムの案内が以下にあります。 imagej.net 一番活発なのは、以下の Image.sc Forum のようです。 https://forum.image.sc/ なお、日本語版の相談メーリングリストもありますが... groups.google.com 不活発…
まだ ImageJ / Python プログラミングを始めて間もない 3年ほど前に書いた記事で imagePlus を複製するには、Duplicator を使わなければならないと書きました。単に、 imp2 = imp1 と書くだけでは、imp1 に imp2 というエイリアスができただけで、どちらをい…
先日 GIMP を使って、空などのほこりを一挙に消す方法について記事を書きました。このマスクを作る過程がちょっと面倒なので ImageJ 上のプラグインスクリプトで作ろうと思い立ち、今取り組んでいます。 本来なら GIMP 上のプラグインスクリプトとして作る方…
ヒストグラム平坦化は、暗部などで細部が見えにくい場合、そのような細部をはっきり見せる目的で使われるアルゴリズムです。基本的な考え方は、通常山があるピクセル分布のヒストグラムをなるべく平坦に直すことで、見えやすくするということです。 ただ、こ…
ImageJ における Python は厳密に言うと、Jython と言って、Python のインターフェースから Java を操作する言語を使っています。 元々 Python は、インタープリターとして C言語で書かれたコードを実行する、言わば C 言語の複雑さをオブラートで包むような…
今まで、B チャンネル再建法補正ツール Ver. 5.5 に向けて、試作や実験を繰り返していました。この間色々と実験して気づいたことをメモっておきたいと思います。 ■一般的な写真の場合、全ての色を混ぜるとニュートラルグレーになる これは、通常の画像処理ソ…
先日公開した、ImageJ スタック形式 RGB TIFF ファイルの GIMP 読み込みプラグインに関するコード解説です。 ------------ #!/usr/bin/env python# -*- coding: utf-8 -*- # 以上2行は、GIMP上でpython プログラムを走らせる宣言と、プログラム内で UTF-8 …
先日、不均等黄変ネガ写真の追加機能の試作を色々試していたところ、突然以下のようなメッセージが出て、実行エラーになりようになりました。 java.io.IOException: Mark invalid ネットで調べると、Java の何かデータを保存しておくバッファが足りないよう…
ImageJ の 32-bit 浮動小数点画像 (FloatProcessor) は 8-bit (ByteProcessor), 16-bit 整数画像 (ShortProcessor) とは異なり、所定の値を超えてもデータがクリップすることはありませんし、負の値もとることがあります。8-bit, 16-bit 整数画像は、正負符…
筆者が作成した ImageJ 用プラグインを走らせるとプレビュー用 8-bit 画像と結果として出力される 32-bit 画像の表示結果が異なることが多々あります。そこでそもそも各アプリケーションで 32-bit イメージはどう表示されるのか、確認してみました。なお、こ…
先月 (2023/7) に入って ImageJ / Fiji の自動バージョンアップを適用したところ、自作のプラグインの動作が突然変わってしまい、慌てふためきました。当初はバグではないかと思いましたが、Ver. 1.54 の動作の変化を丁寧に検証してみると、バグというよりは…
ImageJ の32bit 画像の処理を行う際の挙動に良く分からない点があるので引き続き追及中ですが、いくつか新たに注意すべき点を見つけましたのでメモしておきます。 まず、32bit画像を作成しようと、16bit画像を ImageJ 以外の画像処理ソフトを使って 32bit 浮…
ImageJ における Python (Jython) を使ったインターアクティブなダイアログボックスUIの書き方について、何となく要領が分かってきました。ここでポイントをまとめてみます。 まず説明の前提として、スライダーが一つ、数値入力ボックス (numeric field) が…
■ 画像のBit 深度、型変換 [Image] →[Type] メニュー ・8-bit へ変換 IJ.run(imp, "8-bit", "") 最後の、「 ,"" 」 が要注意です。 ・16-bit へ変換 IJ.run(imp, "16-bit", "") ・32-bit へ変換 IJ.run(imp, "32-bit", "") ・24bit (8bit x 3) RGB Color (Co…
ImageJ の ChannelSplitter ですが、ImageJ の解説書を書いておられる三浦耕太氏のサイトに、使用例が出ています。 sites.google.com この利用例を見て、Channel Splitter は、カラー画像の ImagePlus をチャンネル毎の ImagePlus に分割するのであり、てっ…
ImageJ 上で、32bit 画像を扱うプログラムを昨年末あたりから書き始めていますが、8bit, 16bit 画像とは異なり、意図した結果が得られないことが多く苦労します。そのため、その理由をいろいろ調べていましたが、結局、ImageJ 上で 32bit 画像を扱うには、8b…
ImageJ において Python スクリプトを作成するためのテンプレートコードを公表します。このコードは、以前公表したテンプレートのバージョンアップにあたります。ポイントとしては、8, 16, 32-bit の様々なビット深度の画像が読み込まれることを想定して、Bi…
先日、ImageJ のプログラミングをしていてグレースケールの ImagePlusを Duplicator や ImegePlus の Dupulicate() メソッドを使って複写しようとすると、エラーになってしまうのに気づきました。なぜこうなってしまうのかを色々調べている過程で、ImageJ の…
ネット上の ImageJ スクリプトプログラミングのサンプルプログラムでは単チャンネル・モノクロ画像における塗潰し色の指定の方法は、よく見かけますが、24bit (3 x 8bit) の ColorProcessor における、塗潰し色を指定するサンプルプログラムはほとんど見かけ…
ImageConverter を使ってRGB画像をグレースケール画像に変換する際に注意があります。それは 3 スタック形式の RGB 画像に適用することができないという点です。 例えば、いま R, G, B のチャンネルが3つのスタックに収容されている imp という ImagePlus …
今まで私自身も誤解していましたが、ImageJ 上で 8bit カラー画像のビット深度取得に注意が必要です。 ImagePlus にビット深度を取得する、getBitDepth() メソッドがあります。今まで、8bit カラー画像は、8bit と判断されるのかと誤解していましたが、実は …
ImageJにおける、32bit 浮動小数点画像の閾値の設定ではまりました。一旦、 setThreshold メソッドで閾値を指定し、それをもとに roi 設定→ roi 塗りつぶしで、二値画像を作成しようとしています。そして、8bit, 16bit 整数正負記号なし画像の場合、ImagePro…
以前、ImageJ のプログラムを作っていて、GenericDaialog で設置できる Slider からは、整数値しか取得できないとこちらの記事に書いたことがありました。 しかし、API リファレンスを見ると addSlider メソッドでは、double 変数を引数として取ることができ…
ImageJでは、8bit フルカラー画像はネイティブで対応していますが、16bit フルカラー画像は bio-format プラグイン経由で読み込むようになっています。さらに 通常のTIFF形式の32bit フルカラー画像については、bio-format プラグインも非対応のため、直接読…
先日、ImageJ上における 32bit 画像の扱いについて記事を書きましたが、それを基に、画像の bit 深度を変換したり、32bit画像の場合、最大値を変更したりするサンプルプログラムを書いてみました。意図通りちゃんと変換してくれます。 --------------- # Con…