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

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

北関東で活躍した EF12 1 (蔵出し画像)

 EF10 の出力強化型後継機として、1941年に登場した機関車です。本車はそのトップナンバーです。戦前の貨物機関車の到達点と言われますが、製造輌数はやや少なく、17輌にとどまりました。また戦時中の資材不足で、最後の車輛が出場したのは、1944年でした。

 撮影当時は高崎第二機関区に集中配備され、山手貨物線以北、北関東を中心に活躍していました。そのため個人的にはなかなか出会う機会のない機関車でした。

 この年の3月改正で高崎地区の急形国電が引退し、解体を待つ間留置されている姿を撮るために出かけた際に出会って撮影したものです。北関東配置のためスノープロウをつけたいかめしい姿をしています。

EF12 1 (高二) 1978.3 新前橋

EF12 1 (高二) 1978.3 新前橋

 なお、こちらのページの記述によると、EF12 1 の車歴は下記のようです。筆者の方に感謝いたします。

1941.03 日立製造 → 使用開始 1941.03 沼津 → 1946.3現在 国府津 → 1955.3現在 → 高崎二 → 1975.3現在 高崎二 → 1982.05.11 廃車 (高二)

 本形式は、戦災で廃車になることなく、17輌全機が後年まで活躍しました。戦後は、多くが高崎第二機関区に配置され、主に上越高崎線系等で使われましたが、一部新鶴見機関区に配置され、EF10などとともに東海道線などでも活躍しました。しかし、そのうちの大半が 1976年から77年にかけて廃車され、軸重の関係で吾妻線用に残された 5 輌のみ、1982年まで残りました。それも吾妻線の貨物廃止で、最後の 5 輌も廃車となったようです。今考えるともうちょっと長く活躍しても良かったように思われますが...

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

 ImageJ における Python は厳密に言うと、Jython と言って、Python のインターフェースから Java を操作する言語を使っています。

 元々 Python は、インタープリターとして C言語で書かれたコードを実行する、言わば C 言語の複雑さをオブラートで包むような言語 (CPython) として考えられていたようで、その Java 版として Jython が考えられていたようです。ただ、今日では Python (= CPython) から Java の機能を呼び出すライブラリもできていますので、今は Jython を使う意味が薄れています。そのため、Jython も 2015 年以降あまり進化していないようです。おそらく今日 Jython を使う意味は、ほぼ ImageJ を Python で操作するためと言って良いでしょう。ただ、開発が完全に終了したのではなく、メンテナンスリリースは続いているようです*1

www.jython.org

 従って、Jython は、ちょっと古い Python 2.7 準拠になっていますが、それ以外にも通常の Python とは異なります。それで今回ちょっと躓きました。

 今回つまづいたのは、imageProcessor にある applyTable メソッドです。このメソッドは、imageProcessor に LUT を適用するメソッドです。このメソッドは LUT を引数として取りますが、その LUT は整数の 256 (8bit 画像の場合) もしくは 65536 (16bit 画像の場合) の要素を持つ配列である必要があります。

 ところが Jython 上で正しく整数の配列を読ませているはずなのに、以下のエラーが出ます。

TypeError: applyTable(): 1st arg can't be coerced to int[]

 余談ですが、Chat GPT にどうして間違っているのですか、と聞いてみたところ、「コードは正しい様です。他のところが間違っているかもしれません」と答えます。ちなみに Chat GPT はプログラミングのアルゴリズムに関して、メジャーな言語、皆がよく使うようなアルゴリズムに関しては、かなりよく答えてくれますが、マイナーでニッチな言語のアルゴリズムに関してはあまり当てになりません。その原理を考えれば当然です。つまり、学習するための元ネタが少ないので、答えも怪しくなる、ということです (もちろん元ネタがいっぱいあっても、皆が間違っていれば間違った答えが出ます)。Jython でプログラミングをするなんてその最たるものでしょう。GIMP 用のスクリプトPython で書くのも、Chat GPT に正しい答えを期待できません。「本当にそれで合っていますか?」と問いかけると「すみません。間違いがありました」と言って、別のコードを提案してきます。さらに、「本当にこれで大丈夫ですか?」と追加で問いかけるとまた「すみません。間違いがありました」という具合です。Chat GPT が提案してきたコードが正しいかどうかを判断するには、自分がその言語に対してちゃんと知識が必要で、うっかりそのまま鵜呑みにできません。特にマイナーであればあるほど怪しいです。

 まぁ、Chat GPT はネット上の多数決によって決まった回答を出してくれるサービスだと思えば良いのではないでしょうか。ただ、多数決によって決まった回答が常に正しいとは限りません。プーチンだってロシア国民の圧倒的多数から支持されているのですから。

 それはともかく、その理由を探るために、Java 関連の情報を探っていると、Python では配列=リスト変数ですが、Java ではそうではなく、配列 (arrey) とリスト変数は別だということが分かりました。配列は要素数が固定されているのに対し、リスト変数は Python と同じく、要素を増やしたり減らしたりできるというのです。つまり Python のリスト変数で LUT を作ると、それを Java の配列として認識してくれないため、型がおかしいと文句を言ってくるのではないかと推測しました。

 では、Jython 上で、Java の配列が扱えないかと調べてみると、以下のような情報が見つかりました。

docs.oracle.com

 結局、この移行ガイドにあるように、

import jarray

を頭につけ、その後、

lut = jarray.array([0]*256, 'i')

で lut を作成すると、その lut を引数として取った applyTable メソッドがちゃんと動くことが分かりました。

 なお、試していませんが、以下のようなコードでも良いようです。

import java
java.type("int[]")(10)

 これ以外にも、PythonJava の型の違いから、漫然とコードを書くとうまく ImageJ の API が動いてくれないということが色々ありそうです。ImageJ の API は基本 Java 準拠ですので、この点は要注意かと思われます。

*1:なお、Java を操作する Python 3.x 準拠の Python インタープリターとして、GraalPy というのも開発されているようです。

medium.com ただ、この記事は2020年以降、Jython はメンテナンスされていないと書かれていますが、2022年にメンテナンスリリースが出ています。おそらく ImageJ で使われている限り、2年に一度程度メンテナンスが入るのではないでしょうか。

ART 1.21.3 がリリース

f:id:yasuo_ssi:20210904211415j:plain

 ART Ver. 1.21.3 が昨日リリースされました。アップデート内容としては、Libraw のアップデートに対応して、最新カメラに対応、および一部カメラでクロップ設定が正しく解釈されないものに対するバグフィックスです。ダウンロードは下記より。

 

bitbucket.org

モノクロ画像のカラー化を行う業者: Adjust Photo Service

 X を見ていたら、Adjust Photo Service という横浜にある業者さんのモノクロ画像をカラー化したケースを紹介した記事が流れてきました。その業者さんのホームページはこちらです。三木秀記さんという方が個人でやっている会社のようです。

www.adjust.co.jp このページの紹介によると、複数のソフトウェアを使った AI によるカラー化画像を組み合わせて編集し、さらに、必要に応じて手作業によって着色を行い最終的に仕上げているようです。AI のカラー化に掛ける前に一旦画像の高精細化や汚れ、傷などの修復も加えているとのことです。おそらく画像の高精細化 (補間) にも AI ソフトを使っているものと思われます。元々はグラフィックデザインを手掛ける事務所だったようですが、2016年から個人向けの写真修復サービスを手掛けはじめ、おそらく AI を使い始めたのは サンプルファイルから推測する限り、2020年頃からのようで、北國新聞の昔の写真のカラー化プロジェクトを2021年から手掛けておられるようです。

 補正例を見るとかなりナチュラルな結果が得られています。このページにいくつかのサンプルが掲載されていますが、多少出来に、出来不出来はありますが、おおむねかなりナチュラルな結果が得られており、いかにも AI 加工したという感じも、逆に着色したという感じも少ないです。

 このサイトには、Ai による着色のみでは十分な結果が得られないと書かれておられますが、その通りだと思います。現状 Ai による着色は、写ったものの形状から色を推測していますので、特に人間が任意に、恣意的に色を決めているもの、例えば、着物の色や柄、看板の色、鉄道車両の塗装といったものに関しては、原理的に不正確な結果しか得られません。たくさんの学習データを読ませても正確度が上がるとは限りません。結局、指摘されている通り、資料を読み込んだり、当時を目撃した人の証言などをもとに、色を推測して手作業で着色するしかないのです。

 また、同じ Ai に掛けるにしても、元画像の解像度が高い方が、Ai の色の推測精度も上がるという指摘は、参考になりました。おそらく bit 深度も深いほうが良いと思います。

 因みに料金ですが、ホームページを拝見すると、最も難易度の低いものは 8800円 難易度が最も高いものだと、44000円 という価格設定です。仮に 1時間当たりの作業工賃が 2000 円と仮定すると、1枚当たり最低 4 時間ぐらいから、難易度が高いものだと、22時間ぐらいの時間をかけている計算になりますが、おそらくそんなものでしょう。おそらく AI で出力したものを編集する、あるいはそれにちょっと手をかける程度が、8800円、それに対し、フルに手作業が要求される画像が 44000 円というあたりでしょうか。それでも補修難易度を考えると安いぐらいかもしれません。この辺りは自分で写真補正をやってみないとどんなに大変か分からないので、高すぎると思われる方もいらっしゃるかもしれません。

 逆に最高 44000 円という料金から考えると、フルに手作業で着色作業をやっても、24時間近くかければ何とかなる、ということなのかもしれません。とはいえ、素人だと、難易度の非常に高い画像をフルに手作業着色作業を行った場合、丸々24時間かけても到底完成するとも思えませんので、この辺りは熟練の技かと思われます。

 

凍てつく冬の辰野駅に佇む飯田線クモハ54127

 下の写真は、凍てつく厳冬の辰野駅に進入するクモハ54127 です。茅野発平岡行き238Mとして6 輛編成でやってきました。以前掲げたことのある写真ですが再編集しました。

クモハ54127 (静トヨ) 1978.1 辰野

 この日クモハ54127は豊橋機関区53運用についていました。伊那松島機関区 71, 86 運用を従えてやってきました。この時の編成をメモから再現しますと、茅野発平岡行238Mで、[53運用]54127+68042 + [77]47011+54106 + [79]51027+68402という編成でした。ここ辰野で[79]を切り離し、伊那松島で[77]を分離し、[53]運用単独で平岡へ向かう予定でした。編成の後ろには辰野駅のテルハが見えます。かつては主要駅のどこにでもありましたが、これも荷物・郵便輸送がなくなって、消えてしまった駅の風景です。

 関西でHゴム化が進行する前に、関西から飯田線に転入してきたため、運転台や戸袋窓にHゴムはなく綺麗な姿です。またパンタグラフも原形の PS-11 でした。ただし、運転台助士席側窓は隙間風対策で2段から1段に改修されています。

クモハ54127 (静トヨ) 1978.1 辰野

 なお、2-4位側の写真が撮れていませんが、他の方の写真を見ると客用扉の形状は、1-3位側と同じだったようです。

本車の車歴です。

1943.7.17 汽車会社東京支店製造 (モハ60095) → 1943.9.20 使用開始 大ミハ → 1944.5.31 座席撤去 → 1948.9.3 大ヨト → 1948.12.19 座席整備 → 1950.11.14  大ミハ → 1953.6.1. 改番 (モハ54127) → 1954.3.21 大アカ → 1955.10.13 更新修繕I 吹田工 → 1965.7.13 静トヨ → 1978.12.20 廃車 (静トヨ)

 本車は元々関西向けモハ60として汽車会社東京支店で製造されました。因みにモハ60のうち関西向けとして製造されたのは、60026 - 60042, 60090 - 60111 で、このうち、60026 - 28 の3輌は1次形ノーシルノーヘッダー、他はシルヘッダー付きで、1943年に投入された 60093以降は、110 を除いて番号にかかわらず奇数向だったようです。なお、クハ55の末期に関西に投入された、55097以降も奇数車だったようで、なぜ奇数車ばかり関西に投入されたのかよく分かりません。あるいは、最初に城東・片町線に投入されたモハ40 (偶数側にパンタグラフ) の片運化計画などを配慮してのことだったのかもしれませんが。なお、関西向きのモハ60は、戦災や事故廃車、もしくは戦後早い時期に関東に転出した車輛を除くと大半が後にセミクロスシート化され、クモハ54に改造されました。本車もその1輌です。その理由は、モハ60の内一定数が宮原区に配置されたのということと、モハ43, 42 のかなりの数が4扉化され、城東・片町線に去って行ったのとの引き換えだったと思われます。

 ロングシートでしたが、製造後初配置は宮原区です。あるいはガソリンカー事故後急いで1941年に電化された西成線用として配置されたのかもしれません。当時西成線の担当は宮原区でした。しかし京阪神緩行線用に、列車種別表示用サボが設置されています。その後、戦後一時的に淀川区に転出しますが、基本的には京阪神緩行線用として使われます。そして京阪神緩行線セミクロスシート復活の方針で、セミクロスシートに改造され、1953年の形式称号改正でクモハ54に編入されます。しかし、1965年に17m車淘汰のため飯田線に転出、その後は継続して豊橋区で使用されました。しかし、1978年の豊橋区80系化で、伊那松島に転出することなく廃車となりました。

古典的アルゴリズムが実行可能な ImageJ 用ヒストグラム平坦化プラグイン

[このプログラムの改訂版が以下にあります]

yasuo-ssi.hatenablog.com

-------------

 ImageJ 用のヒストグラム平坦化プラグインスクリプトを作成してみました。と言っても、ImageJ には既にメニューからヒストグラム平坦化が実行できます。[Process] → [Enhance Contrast] を起動すると、次のようなダイアログが出て、Histgram Equalization にチェックを入れるとヒストグラム平坦化を実行してくれます。

Enhance Contrast のダイアログ

 ただ、これで実行されるヒストグラム平坦化は、色相の移動がなるべく起こらないようにする改良版です。本来のヒストグラム平坦化の目的には適切ですが、褪色フィルムや写真の修復には不都合です。そこで、古典的アルゴリズムヒストグラム平坦化を実行できるプラグインを作成してみました。

 ダウンロード元はこちらです。

 インストールの方法については以下の記事を参考にしてください。

yasuo-ssi.hatenablog.com

 このプラグインを起動すると、最初に読み込むファイルを選択するダイアログが出ますので、そこでファイルを指定します。ファイルを読み込んだところで、以下のようなメッセージが出ます。

メッセージダイアログ

 古典版のヒストグラム平坦化を実行するには ALT キーを押せ、という指示です。そこで、この指示に従って ALT キーを実行している間押しっぱなしにしてください。すると、古典版のヒストグラム平坦化が実行され結果が表示されます。ALT キーを押さないと、改良版のヒストグラム平坦化が実行されます。最後に、元のファイル名に、"_equalized.tif" をつけた名前で実行結果を保存します。オリジナルファイルを上書きすることはありません。

 終了すると "Process finished" と表示が出ます。実行結果は GIMP 2.10 で平滑化コマンドを実行したものとほぼ同じになります。なお、終了時はオリジナルファイルと結果ファイルが表示されたままになりますので、不必要でしたら閉じてください。

 なお、ImageJ で作成したカラーの TIFF ファイルを GIMP に読み込むには、下記にある、拙作の専用 GIMP マクロをご利用ください。使わない場合は、3ページのモノクロ TIFF ファイルとして読み込まれてしまうので、その場合、マニュアルで RGB 合成を実行する必要があります。

yasuo-ssi.hatenablog.com

----------------

[最近の関連記事]

yasuo-ssi.hatenablog.com

yasuo-ssi.hatenablog.com

Program Files にプログラムがないとメニューに現れない (Windows 10)

 Windows 10 では、プログラムメニューの位置がデフォルトで以下にあります。

C:\ProgramData\Microsoft\Windows\Start Menu\Programs

従ってインストーラーのないプログラムを手動でインストールした場合は、ここにプログラムへのショートカットを作成すればメニューに現れるのですが、先日それをやったにもかかわらず、ショートカットがメニューに現れないという現象に遭遇しました。

 結局その原因を調べたところ、こうでした。まず、手動でインストールしたプログラムは、C:\bin 以下にフォルダを作って入れ、さらにショートカットを作成し、そのショートカットを上記のメニューフォルダに入れました。ところがメニューに現れません。

 そこで別のプログラムをやはり手動でインストールしましたが、今度は C:\Program Files 以下にフォルダを作って入れました。同様にショートカットを作成し、メニューフォルダに入れると、今度はメニューに現れます。

 つまり、C:\Program Files 以下にフォルダを作って入れないと、メニューに現れないという訳でした。なお、同じ Windows10 でも以前はそんなことはありませんでした。どうやら、どこかのリビジョンアップで仕様が変わったようです。あるいはバグかもしれません。どこかレジストリをいじれば認識するようになるかもしれませんが、未調査です。手動インストールする場合は、ちょっとご注意を。