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

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

ImageJ / Python プログラミング

ImageJ / Python プログラミング Tips: 画像の最小値、最大値等を取得する

ImageJ においてその画像の明るさ、あるいは各 RGB チャンネルの値の最大値、最小値を取得するにはどうしたら良いでしょうか? 以下の、ImageJ のImageProcessor のレファレンスを見ると... imagej.net getMax(), getMin() というメソッドがあるのが分かりま…

ImageJ / Python プログラミング Tips: ValueError: invalid literal for float

ImageJ のインターアクティブ UI を書いていて、次のようなエラーメッセージが出ました。 ValueError: invalid literal for float このエラーが出たのは以下のコードでした。 self.maskThr = float(self.nfield_maskThr.getText()) UI の numericField から…

ImageJ / Python プログラミング Tips: 画像の bit 深度によって gamma メソッドの動作が変わる

先日も報告したように トーン再現カーブ (TRC) エンコード / デコードプログラムを作成していて大はまりしましたが、ようやく原因が分かりました。結局分かったことは、画像の bit 深度によって gamma メソッドの動作の仕方が異なるということです。 以下 Ve…

Imagej / Python プログラミング Tips: ImageJ 符号なしから java 符号付 Byte データへの変換

ImageJ の明るさを示す値は、8bit ByteProcessor および 24bit (8 x 3チャンネル) ColorProcessor では 0 -255, 16bit ShortProcessor では 0 - 65535 の正負符号なしデータ、32bit の FloatProcessor では正負符号付でもなしでもよく、値の範囲制限もありま…

ImageJ / Python プログラミング Tips: Gamma 補正と setDisplayRange は必ずセットで使うべし

以前、ImageJ で、sRGB 式の TRC をエンコード、デコードするプラグインスクリプトを公開しました。その中でちょっと手抜きをしていると書きましたが、今回その手抜きを止めて真面目に取り組むことにしました。ところがその修正作業で大はまり。 まず sRGB …

ImageJ オンラインフォーラム

ImageJ の利用者同士の自助組織、オンラインフォーラムの案内が以下にあります。 imagej.net 一番活発なのは、以下の Image.sc Forum のようです。 https://forum.image.sc/ なお、日本語版の相談メーリングリストもありますが... groups.google.com 不活発…

ImageJ / Python プログラミング Tips: imagePlus, imageProcessor の duplicate メソッド

まだ ImageJ / Python プログラミングを始めて間もない 3年ほど前に書いた記事で imagePlus を複製するには、Duplicator を使わなければならないと書きました。単に、 imp2 = imp1 と書くだけでは、imp1 に imp2 というエイリアスができただけで、どちらをい…

リニアで内部画像処理を行うべきか?

先日 GIMP を使って、空などのほこりを一挙に消す方法について記事を書きました。このマスクを作る過程がちょっと面倒なので ImageJ 上のプラグインスクリプトで作ろうと思い立ち、今取り組んでいます。 本来なら GIMP 上のプラグインスクリプトとして作る方…

ヒストグラム平坦化アルゴリズムの仕組みと褪色補正

ヒストグラム平坦化は、暗部などで細部が見えにくい場合、そのような細部をはっきり見せる目的で使われるアルゴリズムです。基本的な考え方は、通常山があるピクセル分布のヒストグラムをなるべく平坦に直すことで、見えやすくするということです。 ただ、こ…

ImageJ / Python プログラミング Tips: Jython ではリスト変数と配列は異なる

ImageJ における Python は厳密に言うと、Jython と言って、Python のインターフェースから Java を操作する言語を使っています。 元々 Python は、インタープリターとして C言語で書かれたコードを実行する、言わば C 言語の複雑さをオブラートで包むような…

画像色補正や画像処理プログラミングに役立つ写真画像の一般的経験則

今まで、B チャンネル再建法補正ツール Ver. 5.5 に向けて、試作や実験を繰り返していました。この間色々と実験して気づいたことをメモっておきたいと思います。 ■一般的な写真の場合、全ての色を混ぜるとニュートラルグレーになる これは、通常の画像処理ソ…

GIMP / Python 自作プラグイン解説: ImageJ RGB ファイル読み込みプラグイン

先日公開した、ImageJ スタック形式 RGB TIFF ファイルの GIMP 読み込みプラグインに関するコード解説です。 ------------ #!/usr/bin/env python# -*- coding: utf-8 -*- # 以上2行は、GIMP上でpython プログラムを走らせる宣言と、プログラム内で UTF-8 …

ImageJ / Python プログラミング Tips: ImageJ が読み込める スクリプトコードの長さに上限行数がある

先日、不均等黄変ネガ写真の追加機能の試作を色々試していたところ、突然以下のようなメッセージが出て、実行エラーになりようになりました。 java.io.IOException: Mark invalid ネットで調べると、Java の何かデータを保存しておくバッファが足りないよう…

ImageJ / Python プログラミング Tips: 32-bit 画像で所定の閾値を超えたピクセル値をクリップする

ImageJ の 32-bit 浮動小数点画像 (FloatProcessor) は 8-bit (ByteProcessor), 16-bit 整数画像 (ShortProcessor) とは異なり、所定の値を超えてもデータがクリップすることはありませんし、負の値もとることがあります。8-bit, 16-bit 整数画像は、正負符…

ImageJ で作成した 32bit 画像を表示させると...

筆者が作成した ImageJ 用プラグインを走らせるとプレビュー用 8-bit 画像と結果として出力される 32-bit 画像の表示結果が異なることが多々あります。そこでそもそも各アプリケーションで 32-bit イメージはどう表示されるのか、確認してみました。なお、こ…

ImageJ / Python プログラミング Tips: ImageJ Ver. 1.53* → 1.54* へのバージョンアップに伴う仕様変更

先月 (2023/7) に入って ImageJ / Fiji の自動バージョンアップを適用したところ、自作のプラグインの動作が突然変わってしまい、慌てふためきました。当初はバグではないかと思いましたが、Ver. 1.54 の動作の変化を丁寧に検証してみると、バグというよりは…

ImageJ / Python プログラミング Tips: 32bit 画像のディスプレイ範囲をめぐる挙動の確認とその注意点

ImageJ の32bit 画像の処理を行う際の挙動に良く分からない点があるので引き続き追及中ですが、いくつか新たに注意すべき点を見つけましたのでメモしておきます。 まず、32bit画像を作成しようと、16bit画像を ImageJ 以外の画像処理ソフトを使って 32bit 浮…

ImageJ / Python プログラミング Tips: インターアクティブな UI 作成のポイント

ImageJ における Python (Jython) を使ったインターアクティブなダイアログボックスUIの書き方について、何となく要領が分かってきました。ここでポイントをまとめてみます。 まず説明の前提として、スライダーが一つ、数値入力ボックス (numeric field) が…

ImageJのコマンドをPythonのコードに落とす (2): bit 深度変更ほか

■ 画像の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 / Python プログラミング Tips: Channel Splitter の仕様に注意

ImageJ の ChannelSplitter ですが、ImageJ の解説書を書いておられる三浦耕太氏のサイトに、使用例が出ています。 sites.google.com この利用例を見て、Channel Splitter は、カラー画像の ImagePlus をチャンネル毎の ImagePlus に分割するのであり、てっ…

ImageJ / Python Tips: 32bit 画像を扱う時は常にディスプレイ範囲を意識せよ!

ImageJ 上で、32bit 画像を扱うプログラムを昨年末あたりから書き始めていますが、8bit, 16bit 画像とは異なり、意図した結果が得られないことが多く苦労します。そのため、その理由をいろいろ調べていましたが、結局、ImageJ 上で 32bit 画像を扱うには、8b…

ImageJ / Python プログラミング Tips: プログラミング用テンプレート update

ImageJ において Python スクリプトを作成するためのテンプレートコードを公表します。このコードは、以前公表したテンプレートのバージョンアップにあたります。ポイントとしては、8, 16, 32-bit の様々なビット深度の画像が読み込まれることを想定して、Bi…

ImageJ / Python プログラミング Tips: ImageJ グレースケール画像の構造 + 輝度画像作成計算方法

先日、ImageJ のプログラミングをしていてグレースケールの ImagePlusを Duplicator や ImegePlus の Dupulicate() メソッドを使って複写しようとすると、エラーになってしまうのに気づきました。なぜこうなってしまうのかを色々調べている過程で、ImageJ の…

ImageJ / Python プログラミング Tips: ColorProcessor 塗潰し色の指定

ネット上の ImageJ スクリプトプログラミングのサンプルプログラムでは単チャンネル・モノクロ画像における塗潰し色の指定の方法は、よく見かけますが、24bit (3 x 8bit) の ColorProcessor における、塗潰し色を指定するサンプルプログラムはほとんど見かけ…

ImageJ / Python プログラミング Tips: ImageConverter でグレースケール画像に変換する際の注意

ImageConverter を使ってRGB画像をグレースケール画像に変換する際に注意があります。それは 3 スタック形式の RGB 画像に適用することができないという点です。 例えば、いま R, G, B のチャンネルが3つのスタックに収容されている imp という ImagePlus …

ImageJ / Python プログラミング Tips: 8bitカラー画像のビット深度取得の注意点

今まで私自身も誤解していましたが、ImageJ 上で 8bit カラー画像のビット深度取得に注意が必要です。 ImagePlus にビット深度を取得する、getBitDepth() メソッドがあります。今まで、8bit カラー画像は、8bit と判断されるのかと誤解していましたが、実は …

ImageJ / Python Tips: 32bit 画像における setThreshold メソッド使用の際の注意点

ImageJにおける、32bit 浮動小数点画像の閾値の設定ではまりました。一旦、 setThreshold メソッドで閾値を指定し、それをもとに roi 設定→ roi 塗りつぶしで、二値画像を作成しようとしています。そして、8bit, 16bit 整数正負記号なし画像の場合、ImagePro…

ImageJ / Python プログラミング Tips: Slider で取得できる値に注意!

以前、ImageJ のプログラムを作っていて、GenericDaialog で設置できる Slider からは、整数値しか取得できないとこちらの記事に書いたことがありました。 しかし、API リファレンスを見ると addSlider メソッドでは、double 変数を引数として取ることができ…

ImageJ / Python Tips: ImageJに32bitフルカラーTIFF画像を読み込む

ImageJでは、8bit フルカラー画像はネイティブで対応していますが、16bit フルカラー画像は bio-format プラグイン経由で読み込むようになっています。さらに 通常のTIFF形式の32bit フルカラー画像については、bio-format プラグインも非対応のため、直接読…

ImageJ / Python プログラミング Tips: 画像 bit 深度・最大値変換サンプルプログラム

先日、ImageJ上における 32bit 画像の扱いについて記事を書きましたが、それを基に、画像の bit 深度を変換したり、32bit画像の場合、最大値を変更したりするサンプルプログラムを書いてみました。意図通りちゃんと変換してくれます。 --------------- # Con…