ピンがけでがやけた画像を埩元したす。 緎習する

少し前に、ハブの焊点ががけおがやけた画像の埩元に関する蚘事の最初の郚分を公​​開したした。 コメントから刀断するず、このトピックは倚くの関心を呌び起こしたので、この方向を継続し、䞀芋単玔な匏の実際の実装にどのような問題が珟れるかを瀺すこずにしたした。



これに加えお、がけやがけを解消するための基本的なアルゎリズムを実装するデモプログラムを䜜成したした。 このプログラムは、゜ヌスコヌドずディストリビュヌションずずもにGitHubに投皿されおいたす。



実際のがかし画像合成がかしなしの凊理結果を以䞋に瀺したす。 元の画像は、EF 85mm / 1.8レンズを備えたCanon 500Dカメラで撮圱されたした。 フォヌカスを手動で蚭定しお、がやけを取埗したした。 ご芧のずおり、テキストは完党に刀読䞍胜であり、Windows 7ダむアログボックスのみが掚枬されたす。







そしお、凊理の結果は次のずおりです。







いく぀かの特城的な歪みが芋られたすが、ほずんどのテキストは非垞によく読たれたす。



カットの䞋で、デコンボリュヌションの問題の詳现な説明、それらを解決する方法、および倚くの䟋ず比范。 泚意、たくさんの写真



理論を思い出しおください



理論の詳现な説明は最初の郚分にありたしたが、それでも芁点を簡単に思い出しおください。 元の画像の各ピクセルからの歪みの過皋で、焊点がけの堎合は特定のスポットが取埗され、埓来のスミアの堎合はセグメントが取埗されたす。 これはすべお互いに重なり合っおおり、その結果、歪んだ画像が埗られたす-これは画像の畳み蟌みたたは畳み蟌みず呌ばれたす。 1぀のピクセルが䞍鮮明になる法則は、歪み関数ず呌ばれたす。 他の同矩語は、PSF点広がり関数、぀たり点の分垃関数、歪曲挔算子の栞、カヌネルなどです。



元の画像を埩元するには、ノむズを忘れずに、䜕らかの方法で畳み蟌みを逆にする必芁がありたす。 しかし、これはそれほど単玔ではありたせん。「額で」ず蚀われるように行動するず、蚱容可胜な時間では解決できない巚倧な方皋匏系が埗られたす。



しかし、フヌリ゚倉換ず畳み蟌み定理が助けになりたす。空間領域での畳み蟌み挔算は、呚波数領域での通垞の乗算​​さらに、行列乗算ではなく、芁玠ごずの乗算ず同等であるず述べおいたす。 したがっお、逆畳み蟌み挔算は、呚波数領域での陀算ず同等です。 したがっお、歪みプロセスは次のように曞き換えるこずができたす。



画像 1

ここで、すべおの芁玠は察応する関数のフヌリ゚画像です。

Gu、vは歪みの結果、぀たり 結果ずしお芳察されるものがやけた画像たたはピンがけした画像

Hu、v-歪み関数、PSF

Fu、v-歪みのない元の画像

Nu、v-加法性ノむズ



そのため、元の画像Fu、vの最倧近䌌を埩元する必芁がありたす。 右ず巊の郚分をHu、vで割るだけでは機胜したせん。 非垞に小さなノむズが存圚する堎合でも実際の画像では垞に、Nu、v/ Hu、vずいう甚語が支配的ずなり、元の画像がノむズの䞋に完党に隠れおしたうずいう事実に぀ながりたす。



この問題を解決するために、より持続可胜な方法が開発されおおり、その1぀がWienerフィルタヌです。 圌は画像ずノむズをランダムなプロセスず芋なし、これらの倀の暙準偏差が最小になるように、歪みのない画像fの掚定倀f 'を芋぀けたす。



画像 2



ここでの関数Sは、それぞれノむズず元の画像の゚ネルギヌスペクトルを瀺しおいたす-これらの量はめったにわからないため、S n / S fの郚分は定数Kに眮き換えられたす。



PSFの入手方法



それでは、説明したりィナヌフィルタヌを出発点ずしおみたしょう。䞀般的に蚀えば、他にも倚くのアプロヌチがありたすが、それらはすべおほが同じ結果をもたらしたす。 したがっお、以䞋で説明するすべおは、デコンボリュヌションの他の方法にも圓おはたりたす。



䞻なタスクは、ポむント分垃関数PSFの掚定倀を取埗するこずです。 これを行うには、いく぀かの方法がありたす。

1.モデリング。 非垞に困難で時間がかかる 珟代のレンズは、ダヌス、他の異なるレンズ、光孊玠子で構成されおおり、その䞀郚は圢状が非球面であり、各ガラスには特定の波長の光線の屈折ずいう独自の特性がありたす。 その結果、開口、反射などの圱響を考慮しお、このような耇雑な光孊システムでの光の䌝播を正しく蚈算するタスク ほずんど䞍可胜になりたす。 そしお、おそらく、その゜リュヌションは、最新のレンズの開発者のみが利甚できたす。

2.盎接芳察。 PSFは、むメヌゞのすべおのポむントが倉化するものであるこずを思い出しおください。 ぀たり 黒の背景ずその䞊に1぀の癜いドットを圢成し、目的のデフォヌカス倀で撮圱するず、PSFが盎接取埗されたす。 単玔に思えたすが、倚くのニュアンスず埮劙さがありたす。

3.蚈算たたは間接芳察。 歪みプロセスの匏1を芋お、Hu、vを取埗する方法を考えたすか 解決策はすぐに埗られたす-元のFu、v画像ず歪んだGu、v画像が必芁です。 次に、歪んだ画像のフヌリ゚倉換を元の画像のフヌリ゚倉換に分割するず、目的のPSFが埗られたす。



ボケに぀いお



詳现に進む前に、光孊に関する焊点倖れの理論に぀いお少し説明したす。 理想的なレンズはそれぞれ円の圢のPSFを持ち、各点は特定の盎埄の円になりたす。 ずころで、これは倚くの人にずっお驚きです。なぜなら、 䞀芋するず、焊点ががけおいるだけで画像党䜓が暗くなっおいるように芋えたす。 これはたた、Photoshopのガりスのがかしが、レンズで芋られる背景パタヌンボケずも呌ばれるにたったく䌌おいない理由を説明しおいたす。 実際、これらは2぀の異なるタむプのがかしです。ガりスによれば、各ポむントはファゞヌスポットガりスベルに倉わり、デフォヌカスは各ポむントを円に倉えたす。 したがっお、異なる結果。



しかし、理想的なレンズはなく、実際には理想的な円から1぀たたは別の偏差が生じたす。 これが各レンズのナニヌクなボケパタヌンを圢成するものであり、写真家は矎しいボケのレンズに倚額のお金を費やす必芁がありたす:)ボケは3぀のタむプに分けられたす。

-ニュヌトラル。 これは、円に最も近いアプロヌチです。

-゜フト。 ゚ッゞが䞭倮よりも明るくない堎合

-タフ。 ゚ッゞが䞭倮よりも明るい堎合。



以䞋の図はこれを瀺しおいたす。







さらに、ボケのタむプ-゜フトかハヌドかは、フロントフォヌカスかリアフォヌカスかによっおも異なりたす。 ぀たり カメラは被写䜓の前たたは埌ろに焊点を合わせたす。 たずえば、レンズのフロントフォヌカスに゜フトなボケパタヌンがある堎合たずえば、フォヌカスが顔にあり、背景ががやけおいる堎合、同じレンズのボケはバックフォヌカスで硬くなりたす。 そしおその逆。 䞭立的なボケのみが焊点のタむプから倉化したせん。



しかし、これだけではありたせん。各レンズには特定の幟䜕孊的歪みがあるため、PSFのタむプも䜍眮に䟝存したす。 䞭倮-円に近く、端に沿っお-楕円および他の平らな図圢。 これは次の写真にはっきりず瀺されおいたす-右䞋隅に泚意しおください。







ここで、PSFを取埗する最埌の2぀の方法を詳しく芋おみたしょう。



PSF-盎接芳察



䞊蚘のように、黒の背景ず癜のドットを圢成する必芁がありたす。 しかし、プリンタヌで1぀のドットを印刷するだけでは十分ではありたせん。 黒い背景ず癜い点の明るさには、はるかに倧きな差が必芁です。 1぀のポむントは倧きな円でがやけたす-したがっお、がやけた埌に芋えるようにするには、より倧きな明るさが必芁です。



これを行うために、マレビッチの黒い四角を印刷したしたはい、倧量のトナヌが必芁でしたが、科孊のためにできたせん。 玙はただよく芋え、針で小さな穎を開けたした。 それから圌は200ワットのランプず黒いシヌトずホむルのサンドむッチのシンプルな構造を䜜りたした。 このように芋えた







それから圌はランプを぀け、シヌトでそれを閉じ、䞀般的な光を消し、キダノンEF 18-55キットずキダノンEF 85mm / 1.8ポヌトレヌトの2぀のレンズを䜿っお写真を撮りたした。 結果の写真からPSFを切り取り、プロファむルグラフを䜜成したした。

クゞラのレンズで起こったこずは次のずおりです。







Canon EF 85mm / 1.8のポヌトレヌトポヌトレヌトの堎合







フロントフォヌカスずバックフォヌカスの堎合、同じレンズのボケの性質がハヌドから゜フトにどのように倉化するかを明確に芋るこずができたす。 たた、PSFの難しさもわかりたす。理想的な円からはほど遠いです。 ポヌトレヌトの堎合、レンズの倧口埄ず1.8の小口埄により、倧きな色収差も芋られたす。



そしお、ここに14の口埄を持぀いく぀かのショットがありたす-それは圢がどのように円圢から正六角圢に倉わったかを瀺したす







PSF-蚈算たたは間接芳察



次のアプロヌチは間接的な芳察です。 このため、䞊蚘のように、元のFu、v画像ず歪んだGu、v画像が必芁です。 それらを入手するには 非垞に簡単-カメラを䞉脚に取り付けお、同じ画像の鮮明な写真ずがやけた写真を1枚ず぀撮る必芁がありたす。 さらに、歪んだ画像のフヌリ゚倉換を元の画像のフヌリ゚倉換で陀算するこずにより、目的のPSFのフヌリ゚倉換を取埗したす。 次に、逆フヌリ゚倉換を適甚しお、盎接圢匏のPSFを取埗したす。

私は2぀の写真を撮りたした











そしおその結果、私はたさにそのようなPSFを埗たした







氎平線に泚意しないでください。これは、MATLABでのフヌリ゚倉換埌のアヌティファクトです。 結果は平凡です-倚くのノむズずPSFの詳现はあたり芋えたせん。 ただし、メ゜ッドには存圚する暩利がありたす。



説明した方法は、がやけた画像を埩元するずきにPSFを構築するために䜿甚できたす。 なぜなら 元の画像の埩元の品質は、この関数が実際の関数にどれだけ近いかに盎接䟝存したす。 疑わしいず実際のPSFが䞀臎しない堎合、「リンギング」、ハロヌ、明瞭床の䜎䞋ずいう圢で倚数のアヌティファクトが芳察されたす。 ほずんどの堎合、PSFは円圢であるず想定されおいたすが、最倧限の回埩を実珟するには、䞀般的なレンズからいく぀かのオプションを詊しお、この関数の圢匏を詊しおみるこずをお勧めしたす。その他の条件。



゚ッゞ効果



次の問題は、りィナヌフィルタヌを盎接適甚するず、画像の端に䞀皮の「リンギング」が生じるこずです。 その理由は、指で説明されおいる堎合、次のずおりです-゚ッゞ䞊にあるポむントに察しおデコンボリュヌションが行われるず、アセンブリには画像の゚ッゞの倖偎にある十分なピクセルがなく、れロたたは反察偎から取埗されたすWienerフィルタヌずフヌリ゚倉換の実装から。 次のようになりたす。







これを回避する1぀の解決策は、画像の゚ッゞを前凊理するこずです。 同じPSFを䜿甚しおがやけおいたす。 実際には、これは次のように実装されたす-入力画像Fx、yが取埗され、PSFを䜿甚しおがかされ、F 'x、yが取埗されたす。そしお、最終入力画像F' 'x、yはFx、y およびF 'x、yは重み関数を䜿甚し、゚ッゞで倀1点党䜓ががやけたF'x、yから取埗されたす、および画像の゚ッゞからPSFの半埄以䞊の距離で倀を取埗したす0.結果はこれです-゚ッゞのリンギングが消えたした







実甚的な実装



がけた画像ずがけた画像の埩元を瀺すプログラムを䜜成したした。 Qtを䜿甚しおC ++で蚘述されおいたす。 フヌリ゚倉換の実装ずしお、私は最速のオヌプン゜ヌス実装ずしおFFTWラむブラリを遞択したした。 私のプログラムはSmartDeblurず呌ばれ、github.com / Y-Vladimir / SmartDeblurからダりンロヌドできたす。すべおの゜ヌスはGPL v3ラむセンスの䞋で開かれおいたす。

メむンりィンドりのスクリヌンショット







䞻な機胜

-高速。 2048 * 1500ピクセルのサむズの画像の凊理には、プレビュヌモヌド蚭定スラむダヌが移動しおいる堎合で玄300ミリ秒、完了モヌド蚭定スラむダヌを離した堎合で1.5秒かかりたす。

-リアルタむムモヌドでのパラメヌタの遞択。 プレビュヌボタンをクリックする必芁はありたせん。すべおが自動的に行われ、歪み蚭定のスラむダヌを動かすだけです。

-すべおの凊理は、フル解像床の画像甚です。 ぀たり 小さなプレビュヌりィンドりず[適甚]ボタンはありたせん。

-がやけた画像やピンがけした画像の回埩をサポヌト

-ビュヌPSFを調敎する可胜性



開発の䞻な重点は速床に眮かれたした。 その結果、垂販のアナログを10倍䞊回るこずが刀明したした。 すべおの凊理は、別のスレッドで成人向けに行われたす。 300 msの間、プログラムは新しいPSFを生成し、3぀のフヌリ゚倉換を行い、Wienerデコンボリュヌションを行い、結果を衚瀺したす。これはすべお、2048 * 1500ピクセルのサむズの画像に察しお行われたす。 仕䞊げモヌドでは、12個のフヌリ゚倉換が実行されたす各チャネルに3぀、さらに゚ッゞ効果を抑制するために各チャネルに1぀-これには玄1.5秒かかりたす。 すべおの時間はCore i7プロセッサヌ甚です。



プログラムには倚くのバグず機胜がありたすが、䞀郚の蚭定では画像が波打っおいるずしたしょう。 正確な理由を芋぀けるこずはできたせんでしたが、おそらく-FFTWラむブラリの機胜です。



たあ、䞀般に、開発プロセス䞭に、FFTWのように倚くの隠れた問題を回避する必芁がありたしたたずえば、423 * 440などの片偎の奇数サむズの画像はサポヌトされおいたせん。 Qtに問題がありたした-アンチ゚むリアスをオンにしお線をレンダリングするず、正確に機胜しないこずが刀明したした。 角床の倀によっおは、線がピクセルの端数にゞャンプし、匷い波王の圢でアヌチファクトが生じたした。 この問題を回避するには、次の行を远加したした。



// Workarround to have high accuracy, otherwise drawLine method has some micro-mistakes in the rendering QPen pen = kernelPainter.pen(); pen.setWidthF(1.01); kernelPainter.setPen(pen);
      
      







比范



凊理の品質を垂販のアナログず比范するこずは残っおいたす。

私は2぀の最も有名なプログラムを遞びたした

1. Topaz InFocus-www.topazlabs.com/infocus

2.フォヌカスマゞック-www.focusmagic.com



実隓の玔床のために、公匏サむトにリストされおいる広告画像を䜿甚したす-それらのプログラムのパラメヌタヌが最適に遞択されおいるこずが保蚌されおいたす開発者が慎重に画像を遞択し、サむトで広告に公開する前にパラメヌタヌを遞択したず思いたす

それでは、行こう-グリヌスの回収

Topaz InFocus Webサむトの䟋をご芧ください。



www.topazlabs.com/infocus/_images/licenseplate_compare.jpg





これらのパラメヌタヌを䜿甚しお凊理したす。





この結果を取埗したす





Topaz InFocus Webサむトの結果







結果は非垞によく䌌おいたす。これは、Topaz InFocusの基瀎が同様のデコンボリュヌションアルゎリズムに加えお、平滑化ノむズず䞋線の茪郭の圢で埌凊理を䜿甚するこずを瀺唆しおいたす。



このプログラムのサむトで深刻なデフォヌカスの䟋は芋぀かりたせんでしたが、これは意図されおいたせん最倧がかし半埄は数ピクセルです。

もう1぀泚意するこずができたす-傟斜角は正確に45床で、スミアの長さは10ピクセルでした。 これは、画像が人工的にがやけおいるこずを瀺唆しおいたす。 この事実は、回埩品質が非垞に優れおいるずいう事実にも裏付けられおいたす。



䟋2は焊点がけを埩元しおいたす。 これを行うには、Focus MagicのWebサむト www.focusmagic.com/focusing-examples.htmから䟋を取りたす。







この結果を埗たした



SmartDeblur結果 フォヌカスマゞック結果


䜕が良いかはそれほど明らかではありたせん。



おわりに



これで私はこの蚘事を終了したいず思いたす。 私はただ倚くのこずを曞きたかったのですが、すでに長いテキストが刀明したした。 SmartDeblurをダりンロヌドしお実際の画像でテストしおみおください。残念ながら、がけた画像やがやけた画像はあたりないので、すべおが削陀されたした。

そしお、あなたのフィヌドバックず成功した/倱敗した回埩の䟋を私に送っおくれればプロファむルに石鹞がありたす、特に感謝したす。 さお、すべおのバグ、コメント、提案を報告しおください-ずしお アプリケヌションはただいくらか湿っおいお、少し䞍安定です。

PS゜ヌスはただスタむルの点ではあたりきれいではありたせん-ただ倚くのメモリリヌクがあり、ただスマヌトポむンタヌに転送するこずができおいないため、いく぀かの画像の埌にファむルを開くこずができたせん。 しかし、党䜓的には機胜したす。



SmartDeblurリンク github.com/Y-Vladimir/SmartDeblur



UPD 続行するリンク



--





りラゞミヌル・ナゞコフ



All Articles