] 映画の郷 [ 電子工作部:PythonとOpenCVでスキャン画像の修復プログラムを作る

昨年10月に自作スキャナーを完成させこれまでに数十本のフィルムをデジタル化したのですが、気になったのがフィルム上の傷や埃がノイズとして入りこんでしまう点でした。

年末の休みを利用し、スキャンした画像の連続自動修復を行うプログラムを書いてみました。作業は基本パソコン上で行いプログラミング言語としてpythonを使用。画像処理ライブラリOpenCVで動かしていきます。

時系列を追った試行錯誤は別枠で詳述。本稿では現時点までの成果をご紹介していきます。

修復対象は1928年公開のジャン・ルノワール作品『城下町の決闘』。スキャンをしてみたところ、以前の映写に由来する深い傷が目立ちました。旧所有者があまり良くない映写機を使っていたと思われ、フィルムの各コマのほぼ同じ位置に大きな傷が入っています。

参考画像01

その他にも埃や繊維と思われるゴミの影が黒く映りこんでいます。それでも画像一枚ならフォトショップで何とかなるのですが、総コマ数が数千~数万となる映画フィルム修復ではあまり現実的とは言えません。或る程度のコマ数を一括処理できるプログラムを書く方が早そうです。

試行錯誤の末、以下の4ステップで修復を行う流れを考えてみました。

【ステップ1:深い傷の一括修復】複数枚の画像に繰り返し現れる傷にOpenCVの「インペイント」で一括修正をかける。

『城下町の決闘』から連続する画像10枚を選んでみました。

参考画像02参考画像03(オリジナル)
まずは各コマの右側に多く見られる斜めの傷に修正をかけていきます。黒地に手描きの白で傷を示したマスク画像を一枚用意します。
参考画像04(マスク画像01)
OpenCVの「INPAINT_TELEA」関数を使い、ファイル名の連番で自動修復を行う設定をかけながらマスク画像の白い部分を画像の周辺データから修復していきます。
参考画像05参考画像06(第一段階完了時)
白いパッチ部分をもう少し広めに取れば良かったですね。

【ステップ2:ノイズの一括除去】続いて、スキャン画像に個別で現れてくる黒い点状のノイズ(埃やゴミ)を認識させ一括で除去していきます。ステップ1同様にマスク画像と「INPAINT_TELEA」関数を使用していくのですが、先のステップではマスク画像が手描きだったのに対し、今回は画面上の一定の黒さ以上の部分を色抽出プログラムで抜き出し、各コマごとにマスク画像を自動生成、自動修復していきます。
参考画像07(マスク画像2)参考画像08参考画像09(第二段階終了時)
画面のあちこちに発生していたノイズの点々をある程度除去できました。

【ステップ3:薄い傷の個別修復】ステップ1では大きな傷、ステップ2で細かなゴミの影を除去した後、今度はコマ個別に発生している薄く細い縦線(映写機由来の傷)を消していきます。OpenCVの線描画機能(Line関数)を使用し、画面上の細かな傷をなぞった跡をマスク画像として保存、三度「INPAINT_TELEA」関数でノイズ除去を行います。細かな傷が対象ですので描線はステップ1より一段階細くしています。
参考画像10(マスク画像3)参考画像11(第三段階終了)

【ステップ4:最終調整】メイン作業はここまでで終了。最後は明度や輝度など微修正を施していきます。OpenCVでガンマ輝度を0.9に下げ、完成画像をオリジナルと比べてみます。
参考画像11(オリジナルと完成画像比較)
課題は山積みで精度もまだ上げられそう。でも今のプログラミング能力だと1週間で組めるのはこの辺まででした。

compared

もう一枚もこの程度まで回復。「綺乃九五式スキャナー」と同様、次段階ではユーザーインターフェイスを自作しモニター画面を見ながらボタンでステップ1~4の作業を行えるようしていきます。

【祝】「綺乃九五式」が本年度「みんなのラズパイコンテスト」グランプリを受賞しました

「綺乃九五式」9.5ミリ専用 フィルムスキャナー

「みんなのラズパイコンテスト」は日経BP(ラズパイマガジン/日経Linux/日経ソフトウェア)が主催する電子工作のコンテストです。第6回目を迎えた本年度、「【ラズベリーパイ × 戦前映写機】綺乃九五式 フィルムスキャナー」で初参加させていただき、栄えあるグランプリを頂戴する名誉に預かりました。大きな賞を頂き恐縮かつ光栄に思っております。プログラミングはまだまだ初心者ですので精進して参ります。

仕様詳細はこちら

【「綺乃九五式」で甦る戦前日本の風景】

c1929 「かごめかごめ」 9.5mm 個人撮影動画
「かごめかごめ」1929年頃 9.5mm 個人撮影動画
1930年 「鳩と戯れる進一」 9.5mm 個人撮影動画
「鳩と戯れる進一」 1930年5月28日大阪四天王寺にて 9.5mm 川口光羊氏撮影
1929年頃 「池の掃除」9.5mm 個人撮影動画
「池の掃除」1929年頃 9.5mm 個人撮影動画
1923年 「震災のその後」 9.5mm 仏ニュースリール
「震災のその後」1923年撮影 9.5mm 仏パテ社ニュースリール
1910年代後半~20年代初頭 「日本雪景色」 仏ドキュメンタリー短編
「日本雪景色」1910年代後半~20年代初頭 9.5mm 仏ドキュメンタリー短編

「綺乃九五式」は全くのゼロから作り出されたシステムではありません。様々なアプローチで電子工作に挑戦しソースコードや記録をGithub、Qiitaに残してくれた沢山のプログラマーさんや自作愛好家様たち、そして個人的にご支援を頂いた廣田昌義、北原ルミ御夫妻に心より感謝申し上げます。

2019年11月28日

1930年代初頭 9.5mm 個人撮影動画 『かごめかごめ』(自作スキャナー「綺乃九五式」サンプル動画)

「9.5ミリ動画 05b 個人撮影動画」より

Early 1930s 9.5mm Home Movie « Kagome Kagome »
(Kino Type 95 Film Scanner Sampler)

かごめかごめ、かごのなかの鳥は
いついつ出やる 夜明けの晩に
鶴と亀が滑った 後ろの正面だあれ?

昭和6年(1931年)頃に撮影されたと思われる動画。

自宅の中庭で遊んでいる子供4人を父親が撮影した内容です。冒頭はお手伝いさんと思われる女性を交え「かごめかごめ」をしています。その後末っ子のおちびちゃんがカメラを前にポーズを取り始めます。場面は続いて縁側へと移り、兄姉弟が仲良く戯れている様子。大きな飼い犬も登場。最後は再び中庭へと戻って映像が終了。

元々は15本組で入手したフィルムセットのひとつで同じ兄姉弟を中心とした動画が他に数本含まれています。末っ子の坊やが披露していた両手をぐるりと回す動きは学校か何かで習う踊りのようで、別フィルムでお姉さんたちが完全版を披露。他にも仕事絡みの動画があって、内容から撮影者が東京帝国大学の朝比奈教授の下で化学/薬草学を学んでいた研究者さんだったと推測できます。

20メートルフィルム/1175フレーム/再生速度11フレーム毎秒
2400×1800の解像度でスキャンを実施、YouTube版は1080×810まで解像度を下げています