ImageJ / Python プログラミング
ここのところ私が作成した GIMP のプラグインの解説で知覚的色空間とリニア色空間という用語が出てきます。詳しい話は下記の記事を見ていただきたいのですが... yasuo-ssi.hatenablog.com ここでは簡単に説明を行っておきます。 まず、人間の視覚は物理的な…
ImageJ でガウスぼかしを適用する場合は、下記のように、Sigma でぼかし量を指定するようになっています。 ガウスぼかし ガウスぼかしダイアログ 一方、GIMP の場合は標準偏差 (Standard deviation) でぼかし量を指定すると書かれています。 GIMP ガウスぼか…
ImageJ のPython スクリプトでインターアクティブな UI のプログラミングをやっていて、プレビューアーの中でプレビュー画面を作成したところ、プレビュー画面を閉じることができなくなってしまいました。 imagePlus を作成すると、グローバル変数と同じよう…
自分ではまったプログラミングの備忘録です。 mask.setValue(roiColor) # with which color ROI filled (normally L_max) ip.setThreshold(lowerV, upperV, ImageProcessor.NO_LUT_UPDATE) roi = ThresholdToSelection.run(imp) mask.setRoi(roi) mask.fill(…
ImageJ の場合、元データの値に変更を加えず、表示だけに影響を与える、Look Up Table (LUT) というデータが imagePlus に含まれています。この LUT のデータ構造についてのメモです。 この LUT は例えば ImageJ で、RGB データのチャンネル分割を行うと、R,…
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 に向けて、試作や実験を繰り返していました。この間色々と実験して気づいたことをメモっておきたいと思います。 ■一般的な写真の場合、全ての色を混ぜるとニュートラルグレーになる これは、通常の画像処理ソ…
[ご注意] 以下のプログラミング解説は、Ver. 2.10 (またはそれ以下) でのみ有効です。Ver. 3.0 以降ではあてはまりませんのでご注意ください。 ------------ 先日公開した、ImageJ スタック形式 RGB TIFF ファイルの GIMP 読み込みプラグインに関するコード…
先日、不均等黄変ネガ写真の追加機能の試作を色々試していたところ、突然以下のようなメッセージが出て、実行エラーになりようになりました。 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 …