Quantcast
Channel: 【匠のデジタル工房・玄人専科】
Viewing all articles
Browse latest Browse all 791

「バブルボケ」生成ソフトのプログラミング

$
0
0
「画像処理プログラミング」シリーズ第13回記事。

まず、「バブルボケ」または「シャボン玉ボケ」とは、
(カメラやレンズの)中級マニア層の用語(俗語)であり、
写真の背景点光源等で現れる、光源(ハイライト)の円形の
ボケに「輪郭」があり、あたかも「シャボン玉」あるいは
「バブル(泡)」のように見える状態を指している。
だいたい、以下の写真のような感じだ。
_c0032138_08190358.jpg
上写真は解像度が小さいので、後で「シャボン玉ボケ」部
を拡大して紹介しよう。

この「シャボン玉(バブル)ボケ」は、レンズの「収差」
(すなわち、光学的な欠陥)により発生するものである。
近代の一般的な(写真用)レンズは設計時に収差が出ない
ように高度な補正を行っている為、まずこうした状態には
ならず、一部のオールドレンズ(50年程度昔の物、又は
その時代の設計を踏襲して現代で製造された復刻版製品)
でないと、このような「シャボン玉(バブル)ボケ」は
発生しない。

上の写真は、東独で1960年代~1970年代頃に製造
された「Meyer Optik Goerlitz DOMIPLAN 50mm/F2.8」
(注:メーカー名の原語綴りには変母音が含まれるが、
 記載便宜上、それを省略し、代替表記を行っている)
というオールドレンズを使用して撮ったものである。
(下の機材写真参照)
_c0032138_08190320.jpg
この「DOMIPLAN 50/2.8」は3群3枚、いわゆる一般的に
「トリプレット」と呼ばれる、とても単純なレンズ構成だ。
(参考:トリプレットは、1890年代に英国にて発明)



シンプルかつ、製造上でもコストダウンが可能な為、
1960年代当時、ローコストな(標準)レンズを作りたい
理由で、こうした単純構成を採用したのだと思われる。

(参考:「東ドイツカメラの全貌」、1998年版、蔵書)

この構成は、当時の国内外のローコストな銀塩コンパクト
カメラ等の一部でも、採用されていたと思われる。
「トリプレット」構成でも、絞りを少し絞り込むと収差が
減少して比較的良い写りになるが、冒頭の写真のように絞り
を開放にして撮ると、(諸)収差が増大して、シャボン玉
ボケやら、他の要因(解像感が低下する等)が発生する。

この収差発生を嫌って、レンズ構成を1枚増やし、3群4枚
とすると、これはいわゆる「テッサー型(構成)」となり、
このテッサー型の方が、極めて多くの戦後の銀塩コンパクト
機等に採用されていたと思う。


(参考:テッサー型構成は、カール・ツァイス社の
ルドルフ技師が1902年に発明した構成だが、恐らく、
特許であるとか、戦争とか、製造上の問題点とかで、
このテッサー型レンズが世間一般の様々なカメラに搭載
されたのは、前述のように、第二次大戦後、つまり
1950年代以降の話である。


また、1950年代以降のカメラやレンズであっても、あえて
テッサー型を採用せず、レンズの少ないトリプレット型や、
逆にレンズ枚数を増やして複雑化したプラナー型(変形
ダブルガウス型)等のレンズも、勿論あった)

では、もう1枚、 トリプレット型のDOMIPLAN 50/2.8
による「シャボン玉(バブル)ボケ」の写真を掲載しておく。
_c0032138_08190319.jpg
上写真だが、シャボン玉ボケの部分を拡大して掲載しよう。
_c0032138_08190377.jpg
これが「シャボン玉(バブル)ボケ」である。

なお、一般初級層、または初級マニア層等が良く混乱して
使う、別の用語(俗語)に、「玉ボケ」(丸ボケ)がある。

「玉ボケ」は、この「シャボン玉(バブル)ボケ」を指して
言う場合と、そうではなく、ただ単に近代レンズ等で絞りを
開放にして撮影し、背景点光源ボケが円形になっているだけ
の状態(つまり、輪郭=フチ、が存在しないボケの状態)を
指す場合がある。

混乱するので、今回の記事では、以下のように定義する。
「玉ボケ」(稀に、「丸ボケ」とも)
 →単なる円形(光源)ボケ。あらゆる(近代)レンズで
  絞りを開放にする事で発生する。
  (注:画面周辺部では「口径食」の発生により、ボケ
  形状が完全な真円にはならない場合もある)

  また、一部の近代レンズでは、「円形絞り機構」等で
  ある程度絞った状態でも、「玉ボケ」に近い円形の
  ボケが得られるように、と配慮した設計の物もある。

「シャボン玉(バブル)ボケ」
 →上記の円形(光源)ボケに、輪郭(フチ)がある状態。
  一部のオールドレンズ等、収差補正が行き届いていない
  レンズを(主に絞り開放で)使うと発生する。

では、もう1枚、DOMIPLAN 50/2.8を使って、シャボン玉
(バブル)ボケを発生させた例を下写真で紹介する。
_c0032138_08190890.jpg
個人的には、「シャボン玉(バブル)ボケ」は、ちょっと
背景が「うるさく」(=ごちゃごちゃしていて、汚らしい)
感じてしまい、積極的に、これを作画に利用したいとは、
あまり思えない。

ただまあ、現代レンズでは、まず味わえないような特性で
あるから、この独特な描写を好む中上級マニア層も居る。

なので、近代では、前述の「Meyer(マイヤー) Optik」
のブランド名を用い(注:はるか昔に休眠しているブランド
であるが、再度復活させた)これが強く発生するレンズ
「TRIOPLAN 100mm/F2.8」(トリプレット構成である)
を、2010年代後半に新規に製造販売したのだが、これは
マニマ向けの少数生産品なので、新品で20万円以上、
中古でも軽く10万円以上もする高額商品であるので
未所有だ。(=高価すぎる、又はコスパが悪いという判断)

(注1:今回使用の「DOMIPLAN 50/2.8」はTRIOPLAN
の姉妹レンズであるが、新製品(復刻版)ではなく、
実際に50年程前に製造されたオールドレンズであるので、
中古購入価格は約7,000円と、適切な相場であった)

(注2:復活した「Meyer Optik」だが、2018年頃、
経営者が事故に合い、以降、活動を停止してしまって
いる。残念ながら今後の新品入手は困難な状態だ)

TRIOPLANの方がDOMIPLANよりも焦点距離が長いので
「シャボン玉(バブル)ボケ」が出易いと想像できる。
逆に言えば、DOMIPLANは「シャボン玉(バブル)ボケ」
が出難いのであるが、そのあたりは技能で回避できる。

(注:姉妹レンズには、PRIMOPLAN(58mm/F1.9)や
その復刻版もある。こちらはトリプレット型では無い。
復刻版を含め高価につき、未所有なので、玉ボケの
発生の有無や詳細に関しては不明だ)

今回使用機SONY α7はフルサイズ機であり、ボケがやや
出易く、かつ、ヘリコイドアダプターを用いて、必要と
あれば近接撮影に持ち込み、被写界深度を浅くできる。
すなわちボケ量を増やす事ができる。その際での構図の
調整はSONY機の(プレシジョン)デジタルズーム機能を
併用しても良い。まあつまり、撮影技能次第でボケ量の
コントロールは、どうとでもなる話である)

ちなみに参考だが、「シャボン玉(バブル)ボケ」は
TRIOPLANやDOMIPLANといった特定のレンズだけで
出るという話では無く、3群3枚構成の単純なレンズを持って

来れば、他のレンズでも出せるし、3群3枚ではなくても
収差の補正が行き届いていないオールドレンズであるとか、
あるいは、近年流行のLOMOGRAPHY社やLENSBABY社から
発売されている「ぐるぐるボケレンズ」では、ペッツヴァール

型の2群4枚構成での後群を分離した3群4枚構成であり、
これのボケ調整や被写体の選び方、あるいは設定次第では
「ぐるぐるボケレンズ」でも、軽い「シャボン玉(バブル)
ボケ」を出せる場合もある。(注:常に出る訳では無い、
この辺のコントロールは、かなり高度な技能を必要とする)

----
さて、ここまでが「シャボン玉(バブル)ボケ」の説明
である。

で、今回の記事は、レンズの紹介記事ではなく・・
「プログラミング・シリーズ」記事である。

つまり、現代においては「シャボン玉(バブル)ボケ」
が出るレンズは少ない訳であり、そうであれば、現代の
高性能レンズを用いて撮った写真を、「画像処理技術」
(注:ここで言う「画像処理」とは、パソコン等で
写真を自動的に解析・演算して、新しい効果を付与したり
するテクノロジーを示す。 
世間ではPhotoshop等のレタッチソフトを用いて写真等の
画像を手動(人力)で加工編集(レタッチ)する事を
”画像処理”と言う場合もあるが、ここで言う「画像処理」
は、そうした手動の作業では無く、コンピューター等により
自動的に計算処理される工学・光学的技術の事である。
Photoshop等による人力での技能は「画像編集」と呼び、
「画像処理」とは明確に区分する事が望ましい)

・・を用いて、「シャボン玉(バブル)ボケ」を付与する
ソフトをプログラミングする、という趣旨の記事だ。
(下図は、プログラミング開発環境を用いて、今回のソフト
のGUI部を開発中の様子)
_c0032138_08190889.jpg
だが、予め書いておくが、今回のソフトは「失敗作」で
ある(汗)

本シリーズ記事では、世の中に前例の無い、全く新しい
画像処理手法(アルゴリズム)を、1から自力で考えて
それを実装(プログラミング)する、という趣旨であり、
世の中に他に存在するプログラム(ソースコード)や
ライブラリ(OpenCV等)は、一切参照や使用をしない、
完全なオリジナルである事をルールとしている。

で、これはもう「研究」というレベルであり、その全てが
成功するものでは無い。 本シリーズ記事においては、
目標として、研究テーマのうち3割~5割が成功すれば
良い、という感じに考えている。

「研究」レベルの高度な事をやってはいるが、実はこれは
あくまで趣味の世界の話だ。別に、誰からも「シャボン玉
ボケソフトを作りなさい!」と言われている訳では無いし、
いつまでにそれを作るという義務も責任も無い。

また、出来たソフトは例え成功例であっても配布や販売を
行う事もしない。(=販売したら、仕事になってしまう
のだが、そういう趣旨/志向性では無い訳だ)

完全なる「趣味」の世界であるが、逆に「趣味」である
からこそ、これまで誰もやって来なかった新しい事に挑戦
できる訳だ。”仕事では無い”という事を最大限に活用した
プログラミングの研究開発の話であり、本シリーズでは、
「こういう発想で、新規のプログラムを作る」という事が
最も言いたい事である。

・・まあつまり、世間一般のプログラミングの記事では、
プログラムの書き方とか、ライブラリ関数の使い方とか、
そんな風な受動的な内容ばかりであり、「それでは、それが
上手く動いたとしても、”習い事”の世界ではないか!」
と常々思っていて、そういう風な「習い事」では、それが
「本当に”プログラミングをしている”のかどうか?」
という点が、個人的には極めて疑問に感じてしまう訳だ。
_c0032138_08190837.jpg
今回の「アルゴリズム」(画像処理の手順)は、比較的
高度である。で、こうした、他に前例の無いアルゴリズムは
「知的財産」となる。本シリーズは「プログラミングの仕方」
の記事では無いし、苦労して考え出した知的財産を、無償で
公開するつもりも、さらさら無いので、その中身については
ここに書く事は無い。

ただ、今回の処理での流れ(フローチャート)を、ごく簡単
に示しておけば・・
1)写真画像を入力する
2)写真画像を解析し、円形の背景ボケ部と思われる部分を
 抽出する(その際、抽出レベルを数段階で選べる)
3)抽出した円形ボケ部の輪郭を得る
4)輪郭部の光量(輝度等)を増し、元画像に合成する
 その際、光量増加量を数段階で選べる
5)出来上がった合成画像を表示する
6)必要に応じて、2)3)での解析中の画像も表示できる
となる。

これは、やや複雑な処理である為、GUIを作っているC#言語
だけでは実現が難しく、別途、「画像処理計算エンジン部」
をC++言語で作る事とした。

案の定、計算エンジン部のソースコード量は52KB(半角文字
で約52,000文字)と、やや大きくなったが、これを単独の
EXEとしてコンパイル(ビルド)し、GUI部から呼び出せる
ようにしてプログラム全体が完成。(注:プログラム量が
比較的大きいのは、外部ライブラリ等を一切使用しない事も
理由としてある。本シリーズのプログラミングでは、たとえ
JPEG画像を読み込む、とか、それを縮小する、とかの単純な
処理(機能)であっても、全て自分で1から記述したソース
コードを使うルールとしている=他者の真似や引用は禁止)

計算時間は、Web掲載クラスの数十万画素の写真であれば、
1秒程度で終わるが、カメラで撮ったままの数千万画素
という写真となると、数十秒以上と長い。まあでもここは
実際にも複雑な計算をさせているので、やむをえない。

ただし、この為、GUI側で何かパラメーターを変更した都度
計算を行う訳にはいかない。それをしたら、ちょっと何か
操作をするたびに、数秒から数十秒も待たなくてはならない。
計算は、あくまでパラメーター設定後に、纏めて実行する
ようにしていこう。

さて、では、背景ボケのある(入力)画像を選ぼう。
_c0032138_08190940.jpg
まずはこんなものか? 近代レンズで撮影したものなので、
この段階では「シャボン玉(バブル)ボケ」は出ていない。
_c0032138_08191250.jpg
写真を、出来上がったソフトに入力して、自動加工する。

*GUI画面の左側が入力画像。
*その下部が、上記フローチャートの2) と4)に相当する
 抽出レベルと増強レベルの調整用スライダーである。

*スライダーを設定したら、「BUBBLE」ボタンを押すと
 別途、計算エンジン(EXE)がバックグラウンドで計算を
 開始し、小画素であれば、数秒後に計算が終了して、
 結果が右側画面に自動表示される。

*計算結果画像は、必要に応じてクリップボードにコピー
 する事が出来る。→早速そうしてみよう。
_c0032138_08191502.jpg
これが計算結果。
「シャボン玉(バブル)ボケ」は、確かに付加されては
いるが、とてつもなく不自然である(汗)

まるで背景ボケの輪郭をマウスでなぞって、白っぽい
線を描いたようだ。
これでは残念ながら、成功例とは言えないだろう。

ちなみに、画像のどの部分に影響(シャボン玉(バブル)
ボケの効果)を与えたのか?は、画像処理の途中経過が、
別の合成画像として保存されるように作ってある。
そちらも確認してみよう。
_c0032138_08191952.jpg
計算エンジンは、上の画像上の水色の部分に、シャボン玉
(バブル)ボケ輪郭の効果を付与しようとした訳だ。
これは間違っていない。正しくここに輪郭効果が出れば
問題は無い、なのに何故、結果画像は不自然なのか・・(?)

他の画像で試してみよう。
あるいは、パラメーターの設定が悪いのかも知れない、
様々なパラメーターでも試してみよう。
_c0032138_08192238.jpg
別の画像での計算結果。

こちらは一応「シャボン玉(バブル)ボケ」っぽいが
効果が極めて地味だ。

そして、これ以上効果を高めるようにパラメーターを
設定すると、背景ボケ部のみならず、被写体部分にも
影響が出てしまう。なので、これ以上強く効果を出す
事が出来ない。(=破綻してしまう)

アルゴリズム(計算手法)は、間違いなく動作している
模様である。だから、一般的に言う「バグ」では無い。

一般的な「バグ」とは、「正解」がちゃんとあるのだが、
間違ってプログラミングしてしまった状態を示すと思う。
だが、このような、全く新規のアルゴリズムの場合は、
正解があるとも無いとも言えず、プログラムが正しく動作
していたとしても、目的とする効能が得られないならば
これはバグではなく、「失敗の開発結果」であろう。

アルゴリズムを改良(または作り直し)して、あまり
不自然では無い「シャボン玉(バブル)ボケ」を
生み出すようにする事が、一番まっとうな解決手段だ。

・・だが、もうこのあたりで興味が無くなって来て
しまっている(汗)

仕事等で、絶対にやらなくてはならない研究開発では無く、
趣味の作業なので、やるかやらないかは自分次第である。
これを始める前にアルゴリズムを考え、それをメモし、
「よし、これで作れば、上手くいくはず!」と考えて
いたのだが、予想が外れた、という事である。

正直、作り直す気には、もうなれない(汗)
(「作る事自体が楽しい」と言い換えれるかも知れない)
そうであれば、もうこれは失敗作として葬ってしまおう。

だが、その前に・・
あえてパラメーターを出鱈目に設定し、何か面白い
効果が出ないだろうか? つまり「想定外の偶然が、何か
得られないだろうか?」(≒音楽で言う「アドリブ」)
そんな視点で、もう少しだけ本ソフトを触ってみる。
_c0032138_08192898.jpg
上は、滅茶苦茶強い効果に設定した例。

もう、ここまでやると「シャボン玉(バブル)ボケ」
ではなく、全く別の効果である。

まあでも、それが面白いのであれば、結果オーライだ。
だが、あまり面白いとも思えない。これでは、まるで
「ドーナツボケ」である。

だが、いったい、何が「不自然」となる原因なのか?
画像特徴の抽出部か? 効果の付与部なのか?
_c0032138_08192881.jpg
上画像は、計算エンジンの途中経過で、入力された
画像の特徴を解析している状態の画像だ。
アルゴリズムの研究開発では、1発でそれが上手くいく
保証はまるで無い為、人間が後で見て様子がわかるような
途中画像(中間画像)を沢山出力しておく事が、望ましい
セオリー(研究開発のやりかた)である。

この途中経過画像は、本記事冒頭のDOMIPLAN 50/2.8
で撮った写真の解析である。

ここでの課題は、被写体部まで抽出してしまっている
事にありそうだ。この為、付与効果を強めようとすると、
背景の(円形)ボケ部のみならず、主要被写体部にまで
「シャボン玉」輪郭が付与されてしまうので、それは
もう破綻している状態であるから、あまり効果を高める
事が出来ない訳だ。

もう1つの課題だが、背景ボケが、完全に独立した円形
の状態ではなく、いくつもの円形ボケが集まって複雑な
形状になってしまっている状況が見える事だ。
これでは、輪郭部の光量を増加しても、不自然になる
ばかりである。
この課題については、撮影技能の方で対処する、つまり
円形ボケが独立しているような写真を撮る、という事だ。

・・だから、結局、このソフトの場合には、まずは
入力する写真を円形ボケとなっているものを厳選し、
そういう写真に対して、比較的地味な効果を付与する
のであれば、不自然に破綻する状態にはならない事が
推測できる。

では、そうやってみよう。
_c0032138_08192880.jpg
被写体部(前景の灯篭)に、ほとんど影響を与えず、
背景の光源ボケ部に、「シャボン玉(バブル)ボケ」が
ある程度個別に付与されている。

まあ、これで良いのだが、それにしても地味な結果だ(汗)

画素数が小さいのも仇になっているのか? あまり大きな
画素数の画像を入力すると、計算時間がかかりすぎるので
あまり好まないが、まあ、とりあえず中画素でやってみよう。
_c0032138_08192827.jpg
あまり状況に変化は無い、まあこれでも、一応効果は付与
されてはいるが、例によって、恐ろしく地味である。

はたまた、写真あるいは撮影機材が悪いのか? こういう
効能を得るには、あまり高性能のレンズではなく、むしろ
低性能(オールド)なレンズ、あるいは特殊効果のレンズを
用いた方が良いのかも知れない(?)

では、ちょっと前述した「ぐるぐるボケレンズ」を
使って撮影した写真を入力してみよう。画素数も大きくする。
_c0032138_08193393.jpg
600万画素を、数十秒も待って計算させた結果が、やはり
とても地味なものなので、ちょっとがっかりである。

まあ確かに「シャボン玉(バブル)ボケ」にはなっては
いるが、これもやはり、なんだか効能がわかりにくい。

それに、もしかすると、この写真、ソフトを通す前から
すでに「シャボン玉(バブル)ボケ」傾向が出ては
いないであろうか?
ちょっと元画像を拡大して確認してみよう。
_c0032138_08193354.jpg
こちらが元画像の拡大写真。
「ぐるぐるボケレンズ」は、3群4枚の変形ペッツヴァール
型構成であり、DOMIPLAN等の3群3枚トリプレット型構成と
類似する部分がある為、これもまた僅かながら「シャボン
玉(バブル)ボケ」傾向が出ているように見える。

もう、ここらへんで力尽きた(汗) 本ソフトは潔く
失敗作として葬る事としよう。

まあでも、今回の失敗は、次回に、また経験や今回作った
ソースコードを活かしていけば良いという話だ。

----
最後に、本シリーズ記事での研究の成否を挙げておく。
○=成功、△=不明、X=失敗

第01回:○:横浜写真の自動生成
第02回:△:擬似紅葉
第03回:○:高精度ピーキング処理
第04回:X:「ロココ調」変換
第05回:○:ボケ質解析
第06回:X:ぐるぐるボケ写真の自動生成
第07回:△:紅葉予測ソフト
第08回:○:「野獣派」変換
第09回:X:「点描画」変換
第10回:△:良質なボケの生成
第11回:X:良質なボケに補正
第12回:○:オリンパスブルーの生成
第13回:X:シャボン玉ボケの生成

総合成績=5勝5敗3分、勝率=3割8分5厘

まあ、勝率(研究の成功率)が3割を超えているので
とりあえずは、良しとするか・・
(目標値は5割、最低値が3割の成功率だ)

----
では、今回のプログラミング記事は、このあたりまで。
次回記事掲載は、例によって不定期としておくが、
次のプログラミングは、出来るだけ成功させたいものだ。


Viewing all articles
Browse latest Browse all 791

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>