• 検索結果がありません。

デジタルホログラフィによる表面形状計測

N/A
N/A
Protected

Academic year: 2021

シェア "デジタルホログラフィによる表面形状計測"

Copied!
67
0
0

読み込み中.... (全文を見る)

全文

(1)

目次

第1章 序論 ... 1 1.1 研究背景 ... 1 1.2 研究目的 ... 2 第2章 原理 ... 3 2.1 ホログラフィ... 3 2.1-1 従来のホログラフィ ... 3 2.1-2 デジタルホログラフィ ... 4 2.2 位相シフトデジタルホログラフィ ... 5 2.3 CCD カメラ ... 7 2.4 フレネル回折計算... 8 2.5 GPU コンピューティング ... 10

2.5-1 CPU( Central Processing Unit) ... 10

2.5-2 GPU(Graphics Processing Unit) ... 10

2.5-3 NVIDIA CUDA ... 12 2.6 撮 像 距 離 ... 13 2.7 表面形状計測 ... 14 2.7-1 2 入射法 ... 14 2.7-2 アンラッピング ... 15 2.7-3 4 方向アンラッピング ... 18 第3章 実験方法 ... 19 3.1 構成 ... 19 3.2 実験手順 ... 21 第4章 実験結果 ... 39 4.1 3 次元画像の再生 ... 39 4.1-1 再生像の出力 ... 39 4.1-2 撮像距離と再生距離の関係 ... 41 4.1-3 再生像の不安定性の改善 ... 42 4.1-4 GPU を利用した計算時間の短縮 ... 44 4.2 表面形状計測 ... 45

(2)

第5章 総括 ... 60

謝辞 ... 62

参考文献 ... 63

(3)

第1章

序論

1.1 研究背景

ホログラフィは写真乾板を用いて二次元平面に三次元情報を記録する技術として 1947 年に発明された。光源から放たれた光を 2 方向に分け、一方を測定対象に当てる 物体光、一方をそのまま写真乾板に当てる参照光とする。この物体光と参照光の干渉に よって生じる干渉縞を写真乾板に記録し、干渉縞に対して参照光と同一波長の光を当て ることで、光の回折によって物体があたかもそこにあるように見える。この技術をホロ グラフィ、これによって得られる像をホログラムと呼ぶ。 現在、画像の撮影及び再生法としては、コンピュータの発達により従来の写真乾板の 代わりに CCD 素子を用いるデジタルホログラフィが主に利用されている。しかし、 CCD 素子は画素数が低いため物体光と参照光の角度を数度以下にする必要があり、ま た、0 次と±1 次の回折像が重なり、それらを分離することは非常に困難であった。こ の問題を解決したのが、位相シフトデジタルホログラフィである。 位相シフトデジタルホログラフィでは、参照光の位相をずらし、少なくとも3 枚以上 のホログラムを取り込み、複素振幅を直接求め、それらを回折積分することで像の再生 をするものである。 デジタルホログラフィでは、位相差を利用して物体の形状を測定することが可能であ る。物体光の波長や物体光の角度を変え、その位相差を取る。その位相差画像に対し後 述するアンラッピング処理を施し、位相接続を行うことで形状が測定できる。本研究で は、物体光の角度を変化させて2 回分のデジタルホログラムを取得後に位相差をとる2 入射法で、物体の非接触な計測を目指す。また、アンラッピング処理において生じるエ ラーを取り除く手法として、光ディスク基板の欠陥検出に用いられた4 方向アンラッピ ング[1,2]に新たに処理を付け加えた手法を提案する。さらに本研究では、デジタルホロ グラフィの画像処理において、処理時間を短縮するため、CPU のみでなく、並列演算 に特化し、コンピュータ上のグラフィック描画などに用いられるGPU も利用すること で効率化を図っている。

(4)

1.2 研究目的

近年、電子部品などの製品の微細化、高精度化に伴い、部品の表面に触らずに測定す る方法が注目されている。本研究では、非接触光学測定法であるデジタルホログラフィ を利用し、物体光の角度を変化させ、2 通りのデジタルホログラムを取得後、その位相 差を取ることで物体の形状計測を行う 2 入射法[3]を用いて、物体の形状を得ることを 目指す。さらに、形状計測の際に問題となるアンラッピングエラーに対する対策として、 4 方向アンラッピングをベースとした新たなアンラッピング手法を提案する。 また、デジタルホログラフィで用いるCCD 素子が使われ始めた当時は CCD 素子の 画素数が低かったため、CPU のみで画像処理を行ってもさほど時間はかからなかった が、近年ではCCD 素子の画素数が大幅に向上してきているため CPU のみでの画像処 理では多くの時間がかかってしまう。特にこの差は計算量が多くなるほどに顕著になっ ていき、本研究の目的である物体の形状計測においても問題となる。そのため、並列処 理に特化しており、画像処理においては処理時間の大幅な短縮が可能となる GPU を CPU とともに用いて画像取得の効率化を図る。

(5)

第2章 原理

2.1 ホログラフィ

2.1-1 従来のホログラフィ

ホログラフィは1947 年にハンガリーの物理学者である Dennis Gabor によって発明 された、物体から反射された光波、ここでは物体光と呼ぶ光と、物体光と同一の光源 から発生させている参照光を干渉させ、その干渉像を記録する技術である。 ホログラフィ技術によって得られた画像情報をホログラムと呼び、通常の写真は光 強度(単位面積あたりの光のエネルギー)が記録された点の集まりであることに対し て、ホログラムでは光の電場の振幅、位相情報についても記録されている。そのた め、像が再生されるときの放射光は三次元像となる。 ホログラフィにおける画像再生の仕組みは以下の通りである。まず、同一光源から放 たれた光を2 方向へ分け、一方を物体に当たり、散乱光として写真乾板などの記録媒体 に当たる物体光、一方をそのまま記録媒体に当たる参照光とする。記録媒体上では物体 光と参照光が干渉し、干渉縞が記録される。その後、干渉縞に対して記録した際と同一 の参照光を当てることで光の回折が起こり、光強度と位相が再現され、画像が3次元的 に再生される。 Fig.2-1 ホログラフィの仕組み (a) 記録時 (b) 再生時 (b) (a)

(6)

2.1-2 デジタルホログラフィ

従来のホログラフィでは記録媒体には写真乾板を用いてホログラムの取得をしてい たが、現在では写真乾板の代わりにCCD 素子を用いてコンピュータに情報を記録 し、画像再生にはコンピュータ内で実際のホログラフィと同様の演算処理を行うこと で三次元画像を出力する、デジタルホログラフィが主に利用されている。 デジタルホログラフィを用いることで、従来のホログラフィには不可欠であった現 像処理が不要となるため、より容易にホログラムからの画像再生処理を行うことがで きる。得られたホログラムに対して柔軟な画像処理を行えるといった点でも、従来の ホログラフィと比べて利点となっている。 しかしながら、CCD 素子の画素数の少なさから回折像の重なりが起こってしまい、 再生像の質は従来のものより劣ったものとなってしまっていた。これを解決するため に開発されたのが位相シフトデジタルホログラフィ[4]という技術である。この技術 は、コンピュータ制御されたPZT ミラーなどを利用し、参照光の位相を変えて撮影し た複数枚のホログラムを用いて三次元画像を再生することで、再生像の質の向上を達 成するというものである。 位相シフトデジタルホログラフィにおいては、撮影した複数枚の画像からホログラ ム面での複素振幅を求めてホログラムを作製、その後従来のホログラフィにおける光 の回折を、コンピュータ上で後述のフレネル回折計算を行うことで再現し、従来のホ ログラフィと同様に光強度と位相を再現している。 ホログラフィによる形状計測は、対象に触れることなく、非破壊的に物体の形状や 歪みなどの計測ができ、高い精度を持っており、一度に広範囲の計測が可能といった 点から、工業計測などの広い分野で応用が期待されている。

(7)

2.2 位相シフトデジタルホログラフィ

位相シフトデジタルホログラフィでは、ハーフミラーによってレーザ光を物体光と 参照光に分け、参照光をハーフミラーを介してCCD素子の正面同軸方向から入射させ る。この時、ピエゾ素子を取り付けたミラーを利用して参照光の位相をシフトさせ、複 数枚のホログラムを取り込む。物体面を(x’,y’)、ホログラム面(CCD素子面)を(x,y)、 再生面を(X,Y)とする。z0,zR,Zは物体面とホログラム面、参照光の光源とホログラム面、 ホログラム面と再生面とのそれぞれ距離を示す。特にホログラム面と再生面との距離を 再生距離という。 物体光と参照光の複素振幅をそれぞれU0(x,y),UR(x,y)とすると次式で表される。

𝑈

0

(𝑥, 𝑦) = 𝐴

0

exp[𝑖∅

0

(𝑥, 𝑦)]

(2.2-1)

𝑈

𝑅

(𝑥, 𝑦) = 𝐴

𝑅

exp[𝑖∅

𝑅

(𝑥, 𝑦)]

(2.2-2) ここで位相シフトの量をδとすると、CCD に記録される干渉強度Iは次式のようにな る。

𝐼(𝑥, 𝑦, 𝛿) = |𝑈

𝑅

(𝑥, 𝑦)exp(𝑖𝛿) + 𝑈

0

(𝑥, 𝑦)|

2

|𝑈

𝑅

(𝑥, 𝑦)|

2

+ |𝑈

0

(𝑥, 𝑦)|

2

+ 𝑈

0

𝑈

𝑅

exp(−𝑖𝛿) + 𝑈

0

𝑈

𝑅

exp(𝑖𝛿)

(2.2-3)

(8)

𝜋 2ずつ位相シフトさせた4枚の複素振幅パターンを利用すると、ホログラム面における 物体光の複素振幅は次式によって表される。

𝑈(𝑥, 𝑦) =

1

4𝑈

𝑅

{𝐼(𝑥, 𝑦, 0) − 𝐼(𝑥, 𝑦, 𝜋)

+ 𝑖 [𝐼 (𝑥, 𝑦,

𝜋2

) − 𝐼 (𝑥, 𝑦,

3𝜋2

)]}

(2.2-4) これに次のフレネル変換を施すとホログラム面からZの距離にある再生面上の複素振幅 を求めることができる。

𝑈

𝐼

(𝑋, 𝑌, 𝑍) = ∬ 𝑈(𝑥, 𝑦)𝑒𝑥𝑝 [𝑖𝑘

(𝑋−𝑥)22𝑍+(𝑌−𝑦)2

] 𝑑𝑥 𝑑𝑦

(2.2-5) また、再生像の位相は次式で求めることができる。

𝜙(𝑋, 𝑌, 𝑍) = tan

−1 Im[𝑈𝐼(𝑋,𝑌,𝑍)] Re[𝑈𝐼(𝑋,𝑌,𝑍)]

(2.2-6) 参照光が平行光で物体が(x, y, z)の位置にある点光源の場合、像の強度は (𝑋, 𝑌, 𝑍) = (𝑥, 𝑦, −𝑧)で最大となり、そこが点像の中心となる。

(9)

2.3 CCD カメラ

CCD カメラはセンサーの中のフォトダイオードが光を電荷に変換し、各画素ごと の電荷を取り出して画像情報として送り出している。 センサーには、1画素に応じた受光部が2次元に配列されており、各画素にそれぞれ 受光部としてフォトダイオードが配置されている。また、このフォトダイオード上に はマイクロレンズがあり、受ける光を集光してフォトダイオードに効率よく伝えてい る。 フォトダイオードでは光電効果を利用することによって光を電荷に変換している。 この電荷を外部に出力しているのが、CCD と呼ばれる電荷結合素子を備えた、電荷 転送素子である。電荷転送素子は、半導体の上に絶縁体を介して電極を多数配列させ たものである。電極に、あるパターンの駆動電圧を印加すると、半導体に蓄電された 電荷を移動させることができる。 CCD カメラの特徴としては、光に対して非常に感度が良いため画像のブレが発生 しにくい。そのため、本研究におけるデジタルホログラフィ等の精密な撮影が必要と なる研究に適している。本研究で用いているCCD カメラはモノクロの CCD カメラ であるが、カラーのCCD カメラも存在する。カラーの CCD カメラはモノクロ CCD の各画素の上にR、G、B のフィルタを通すことによりカラー画像として出力され る。本研究において実際に使用したCCD カメラを Fig.2-2に示す。CCD カメラの仕 様については、第3章3.1節にて説明する。 Fig.2-2 実際に用いたモノクロ CCD カメラ(ARTCAM625-KY)

(10)

2.4 フレネル回折計算

位相シフト干渉計を用いたホログラム撮影装置で撮られた4枚の画像は、前述の計算 によってホログラム面の複素振幅を得た後、フレネル回折処理を施すことで3次元画像 として出力される。 本研究ではフレネル回折計算を2通りの計算法で行って処理を施している。それぞれ のフレネル回折計算方法をここでは畳み込み型計算法、フーリエ変換型計算法と呼び、 その手法を解説する。 (1)畳み込み型計算法 フレネル回折計算の畳み込み型計算法は次のように表される。

𝑢

2

(𝑥

2

, 𝑦

2

) =

𝑒 −𝑗2𝜋𝜆 𝑧 𝑗𝜆𝑧

𝑢

1

(𝑥

1

, 𝑦

1

) × 𝑒

𝑗𝜆𝑧𝜋((𝑥2−𝑥1)2+(𝑦2−𝑦1)2)

𝑑𝑥

1

𝑑𝑦

1 +∞ −∞ (2.6-1) 畳み込み理論より、上式は次のように表される。

𝑢

2

(𝑥

2

, 𝑦

2

) =

𝑒 −𝑗2𝜋𝜆 𝑧 𝑗𝜆𝑧

𝐹

−1

[𝐹[𝑢

1

(𝑥

1

, 𝑦

1

)]𝐹[ℎ

𝐹

(𝑥

1

, 𝑦

1

)]]

(2.6-2) ここで、𝐹及び𝐹−1はそれぞれフーリエ変換、逆フーリエ変換を表す演算子とする。 また、ここでℎ𝐹(𝑥1, 𝑦1)はフレネル核とも呼ばれ、次のように表される。

𝐹

(𝑥

1

, 𝑦

1

) = 𝑒

𝑗𝜆𝑧𝜋(𝑥12+𝑦12) (2.6-3) 計算実行時、離散化空間変数が必要となり、次のようにする。

(𝑥

1

, 𝑦

1

) = (𝑚

1

∆𝑥

1

, 𝑛

1

∆𝑦

1

)

ここで、∆𝑥1及び∆𝑦1は物体面でのサンプリング間隔を表し、𝑚1及び𝑛1は整数とす る。 同様に、ホログラム面での離散化空間変数は、

(𝑥

2

, 𝑦

2

) = (𝑚

2

∆𝑥

2

, 𝑛

2

∆𝑦

2

)

となる。 また、𝑚1, 𝑚2, 𝑛1, 𝑛2は次のような範囲をとるとする。

𝑁

𝑥

2

≤ 𝑚

1

, 𝑚

2

<

𝑁

𝑥

2

𝑁𝑦 2

≤ 𝑛

1

, 𝑛

2

<

𝑁𝑦 2 (2.6-4) ここで、𝑁𝑥及び𝑁𝑦は物体面、ホログラム面での垂直及び水平方向のピクセル数で ある。

(11)

したがって、畳み込み型の離散フレネル回折は次のように表される。

𝑢

2

(𝑚

2

, 𝑛

2

) =

𝑒 −𝑗2𝜋𝜆 𝑧 𝑗𝜆𝑧

𝐹

−1

[𝐹[𝑢

1

(𝑚

1

, 𝑛

1

)] × 𝐹[ℎ

𝐹

(𝑚

1

, 𝑛

1

)]]

(2.6-5)

𝐹

(𝑚

1

, 𝑛

1

) = 𝑒

𝑗𝜆𝑧𝜋((𝑚1∆𝑥1)2+(𝑛1∆𝑦1)2) (2.6-6) 以上より、∆𝑥2= ∆𝑥1, ∆𝑦2= ∆𝑦1であるため、物体面と観測面でのサンプリング間 隔は回折計算後でも変化していないことがわかる。したがって、畳み込み型のフ レネル回折計算では再生像のサンプリング間隔が変化せず、再生像の大きさはカ メラの記録面と試料の大きさの等比となる。 (2)フーリエ変換型計算法 まず、式(1)の二次の項を展開し、次のようなフーリエ変換型フレネル回折が得ら れる。

𝑢

2

(𝑥

2

, 𝑦

2

) =

𝑒−𝑗 2𝜋 𝜆 𝑧 𝑗𝜆𝑧

𝑒

𝑗𝜆𝑧𝜋(𝑥22+𝑦22)

𝑢

1 ′

(𝑥

1

, 𝑦

1

) × 𝑒

−𝑗 2𝜋 𝜆𝑧(𝑥2𝑥1+𝑦2𝑦1)

𝑑𝑥

1

𝑑𝑦

1 +∞ −∞ (2.7-7) ここで、𝑢1(𝑥 1, 𝑦1)は次のように表される。

𝑢

1

(𝑥

1

, 𝑦

1

) = 𝑢

1

(𝑥

1

, 𝑦

1

)𝑒

𝑗𝜋 (𝑥12+𝑦12) 𝜆𝑧 (2.6-8) 式(7)はフーリエ変換を用いて書き直すことができ、畳み込み型のように離散空 間変数を用いて表すと次のようになる。

𝑢

2

(𝑚

2

, 𝑛

2

) =

𝑒𝑗 2𝜋 𝜆 𝑧 𝑗𝜆𝑧

𝑒

𝑗𝜆𝑧𝜋((𝑚2∆𝑥2)2+(𝑛2∆𝑦2)2)

× 𝐹𝐹𝑇[𝑢

1′

(𝑚

1

, 𝑛

1

)]

(2.6-9) 以上より、

∆𝑥

2

=

∆𝑥1 𝜆𝑧

, ∆𝑦

2

= ∆

∆𝑦1 𝜆𝑧であるため、物体面と観測面でのサンプリン グ間隔は異なっていることがわかる。したがって、フーリエ変換型のフレネル 回折計算では物体面からホログラム面までの距離zの値が大きくなるほど、再生 像のサンプリング間隔は小さくなり、再生像の大きさは小さくなる。 本研究においてはCCDカメラの記録面と試料の大きさが等比で表される畳み込み型 計算法では相性が悪く、再生像が再生面に収まりきらなかったため、基本的にフーリ エ変換型計算法を用いて実験を行った。

(12)

2.5 GPU コンピューティング

2.5-1 CPU(Central Processing Unit)

コンピュータを構成する部品の一つで、各装置の制御やデータの計算・下行を行うプ ロセッサである。メモリに記憶されたプログラムを実行する装置で、入力装置や記録装 置からデータを受け取り、演算・下行したうえで、出力装置や記憶装置に出力する。 1回の命令で同時に処理できるデータの量によって8ビット、16ビット、32ビットな どの種類があり、値が大きいものほど性能が高い。また、同じビット数でも1秒間に実 行できる命令の回数(「Hz」で表される)や、バスと呼ばれる周辺装置とのデータ伝送路 が一度に運べるデータの量(「ビット」で表される)、バスが1秒間に行える転送の回数 (「Hz」で表される)などに違いがあり、これらの値が大きいものほど性能が高い。厳密 には、1命令を行うのにかかるクロック数や同時に実行できる命令数などの違いにも影 響される。

2.5-2 GPU(Graphics Processing Unit)

グラフィックスの表示に必要な計算処理を行う半導体のチップ。従来3Dグラフィッ クスアクセラレータと呼ばれていたチップの発展形であり、3Dグラフィックスアクセ ラレータと比べて担当する処理が多くなっている。 3Dグラフィックスアクセラレータはテクスチャの張り込みなど、最終的なレンダリ ング処理のみを担当していたが、GPUはレンダリングの前処理にあたる3D座標から2D 座標への座標変換なども担当し、CPUの処理量を減らすことができる。 本研究では、GPUのこれらの特性に着目し、画像処理において利用することで、計算 処理の高速化をはかっている。

(13)

本研究で使用したCPUおよびGPUの仕様について、それぞれTable 2-1、Table 2-2に 記載する。 Table 2-1 CPUの仕様 Table 2-2 GPUの仕様 GeForce GTX 560 Ti グ ラ フ ィ ッ ク ク ロ ッ ク ( 最 大 ) 822 MHz プ ロ セ ッ サ ー ク ロ ッ ク ( 最 大 ) 1645 MHz メ モ リ ク ロ ッ ク ( 最 大 ) 4008 Gbps テ ク ス チ ャ フ ィ ル レ ー ト 52.7 GTexel/s 標 準 メ モ リ 設 定 1024 MB GDDR5 メ モ リ バ ス 256 bit メ モ リ 帯 域 128 GB/s

GT/s:(Giga Transfers per second) デ ー タ を デ ジ タ ル イ ン タ フ ェ ー ス で 伝 送 さ れ る デ ー タ 量 を 指 す 。

DMI:(Direct Media Interface)の略で、CPUとマザーボードを接続するバスの仕様であ る。

TDP: (Thermal Design Power)の略で、設計上想定されている最大放熱量。熱設計電力 とも訳される。

Intel Core i7-2600K CPUク ロ ッ ク ( 最 大 ) 3.2 GHz GPUク ロ ッ ク ( 最 大 ) 1350 MHz

メ モ リ 帯 域 21.3 GB/s

DMI 5.0 GT/s

(14)

2.5-3 NVIDIA CUDA

CUDA(Compute Unified Device Architecture)とはNVIDIA社が提供するGPU向 けのC言語の統合開発環境であり、コンパイラやライブラリなどから構成されている。 本研究においては通常、画像の描画に用いているGPUをこのCUDAを使用することに よってCPUが行う処理作業をGPUに行わせることを可能にしている。また、CUDAラ イブラリを利用することにより、より簡易にコンピューティングすることが可能となる。 CPUとGPUの違いとしては、CPUは汎用性が高くどのような計算もそれなりの時間 で処理することができる。GPUは並列処理に特化しているため、画像処理のような一部 分の計算が全体の結果に影響しない場合、高速に演算を行うことが出来る。しかし、そ うでない場合はCPU以下の処理能力になる。

(15)

2.6 撮像距離

Fig.2-3 撮像距離と再生距離 ホログラム作成時におけるCCD カメラと試料との距離、また CCD カメラと再生面 との距離との関係について記述する。CCD カメラと試料との距離を𝑍とした時、CCD カメラと再生面との距離を𝑍′とすると𝑍 = 𝑍の時に再生画像が最も鮮明に再生され る。 デジタルホログラフィにおいて、CCD カメラと再生面との距離は存在し得ないの で、プログラム上で設定する必要がある。また、数値はフレネル計算処理を行う際に 使用される。

試料

𝑍

𝑍

(16)

2.7 表面形状計測

2.7-1 2 入射法

デジタルホログラフィにおいては、物体光の角度を変えて測定物を照射し、取得し た2回分のデジタルホログラムより、入射角の変化による物体上の位相変化から形状計 測が可能となる。これを2入射法と呼ぶ。 2.2節において、物体光の複素振幅は(2.2-4)のようになることが説明された。物体光 の角度を変化させる前と変化させた後の再生像の位相はそれぞれ次のようになる。

𝜑

1

(𝑥, −𝑧

0

) = 𝑎𝑟𝑔𝑈

𝐼1

(𝑥, −𝑧

0

)

= 𝑘[𝑥 sin 𝜃 + ℎ(𝑥) cos 𝜃]

(2.9-1)

𝜑

2

(𝑥, −𝑧

0

) = 𝑎𝑟𝑔𝑈

𝐼2

(𝑥, −𝑧

0

)

= 𝑘[𝑥 sin(𝜃 + ∆𝜃) + ℎ(𝑥) cos(𝜃 + ∆𝜃)]

(2.9-2) ここで、ℎ(𝑥)は測定対象の高さであり、したがって、これらの位相差をとると、

∆φ(𝑥, −𝑧

0

) ≡ 𝜑

2

(𝑥, −𝑧

0

) − 𝜑

1

(𝑥, −𝑧

0

)

= arg[𝑈

𝐼1

(𝑥, −𝑧

0

)𝑈

𝐼2

(𝑥, −𝑧

0

)]

= 2𝑘 sin

∆𝜃

2

[𝑥 cos (𝜃 +

∆𝜃

2

) − ℎ(𝑥) sin (𝜃 +

∆𝜃

2

)]

(2.9-3) このとき、この計算によって得られる画像は測定対象の高さ成分ごとに明暗の分かれ た等高線のような縞の画像となる。 縞の間隔Δhは次の通りである。

(17)

2.7-2 アンラッピング

(2.9-3)式によって得られた位相差∆φは-π~πまで、2nπ(n:整数)の任意性を持つ。測定 対象の位相差がπよりも大きくなる場合、コンピュータによる計算処理時に位相の跳び が生じていることとなる。この位相の跳びは実際の形状を知る上で問題になってくる ので、位相の変化が滑らかであると想定し、位相接続(アンラッピング)を行う必要が ある。 Fig.2-4 位相接続イメージ図 位相接続の基本的な考えは位相の跳びが起こる位置の位相を検知し、2πを足してい くものである。 今回用いたベースとなるアンラッピングプログラムのアルゴリズムを以下に示す。 Fig.2-5 アンラッピングアルゴリズム

(18)

Fig.2-6の黒点を画素としX、Y方向を与え、それぞれの画素に座標を与える。(i,j)=(1,1) を基準として、まずi=1をX方向に沿ってアンラッピングを行う。 この時隣同士の画素間の位相差をj回総和したものが、その画素における位相値とな る。

𝜑

𝑖,𝑗

= ∑

(

𝑑𝜑 𝑑𝑥

)

𝑖,𝑗 𝑗 𝑙=0 (2.9-5) X方向の画素間の位相差マップを作成しておき後に再び利用する。画素間のマップは 位相差の算出によるものなので、サンプル数は本来の画素数よりもそれぞれの方向に1 ずつ小さくなる。位相の跳びが起こっている場合画素間の位相差がπに限りなく近い値 となるため、それを判定し、その位置の位相に+2πあるいは-2πを加算し位相接続を行 う。このときの正負は判定式により決定される。 Fig.2-6 アンラッピングアルゴリズム2 続いてj=1列目を同様に補正する。

𝜑

𝑖,𝑗

= ∑

(

𝑑𝜑𝑑𝑦

)

𝑖,𝑗 𝑖 𝑙=0 (2.9-6)

(19)

そして(i,1)を基準として先ほどのX方向位相差データを利用し、X方向に向かって全 体のアンラッピングを行う。 Fig.2-7 アンラッピングアルゴリズム3 ここまでの処理がアンラッピングにおける大きな流れであるが、デジタルホログラフ ィで得られた画像にはスペックルノイズなどのノイズが混ざっている場合が多い。その ため、画像中の接続すべき光強度にずれが生じていることになるため、アンラッピング 処理時にエラーが生じてしまうことが問題となる。デジタルホログラフィによる表面形 状計測においては、それらの問題を取り除きつつ位相接続を行うことが課題となってい る。

(20)

2.7-3 4 方向アンラッピング

2.9-2節において説明した位相接続処理において、しばしば生じるアンラッピングエ ラーの問題に対して、当研究室で光ディスク基板の欠陥検出の際に開発した手法が4方 向アンラッピング[1,2]である。先ほど説明したアンラッピング手法においては、画像の 左から右へ向かってアンラッピング処理を行っていく。しかし、その場合、アンラッピ ングエラーが出てしまうことも多く、正しい画像が得られない。そのため、アンラッピ ング処理を行っていく方向を左から右へのみでなく、上から下、右から左、下から上へ 行う、合計4つの処理をそれぞれ別々に行い、得られた4枚の画像でエラー補正を行うこ とにより、アンラッピングエラーを減らす手法である。 Fig.2-8 4方向アンラッピング このアンラッピング手法における利点としては、シンプルであるがゆえにプログラム 開発が容易である点や、発展させやすい点が挙げられる。

(21)

第3章

実験方法

3.1 構成

今回の実験で用いた実験装置はマッハツェンダ干渉計を基にした位相シフト干渉計 である。Fig.3-1に本研究を行った実験系を示す。 Fig.3-1 実験系 光源として直線偏光、波長632.8 nm、出力21 mWのHe-Neレーザを用いる。光源か ら出射された光を倍率40倍の対物レンズによりビーム径が拡大される。拡大する際にビ ーム整形のためスペイシャルフィルタを通している。拡大されたビームを直径60 mm、 焦点距離100 mmの平凸レンズによりコリメート光とする。コリメートされたビームを 無偏光キューブビームスプリッタにより二分し、一方を参照光、もう一方を物体光とす る。参照光はPZTステージに固定された大口径アルミニウムミラーにより反射されビー ムスプリッタに、物体光は電動ステージに取り付けられたミラーにより反射され、試料 に当たる。反射された光は先程と同じビームスプリッタにより参照光と合波・干渉させ、 CCDカメラによって記録する。記録したのち、PZTステージを動かし、位相シフトさせ た状態での記録を続け、3回のシフト、すなわち計4回の撮影をする。なお、形状計測を する際、電動ステージを動かすことで物体光の角度を変化させることができる。 He-Ne レーザ ビームスプリッタ 測定対象 PZT+ミラー 電動ステージ+ミラー 参照光 物体光 CCD カメラ 3.45 µm/pixel

(22)

Fig.3-2 実際に用いた実験系 干渉した光は分解能3.5 µm/pixelのCCDカメラで受光し、USBによりPCに取り込ん でいる。受光する際、そのままでは強度が強く飽和してしまうので、光量調節のためND フィルタを用いる。撮像範囲はCCDカメラの向きや高さを動かすことで調節する。 本研究で用いたHe-NeレーザとCCDカメラの仕様を、それぞれTable3-1、Table3-2に 記載する。 Table 3-1 He-Neレーザの仕様 THORLABS:HNL-210L 入 力 電 圧 100±10 % VAC 入 力 周 波 数 50/60 Hz 変 換 効 率 >95 % 出 力 電 圧 3800 VDC 出 力 電 流 6.5 mA Table 3-2 CCDカメラの仕様 ARTRAY:ARTCAM-625KY 有 効 画 素 数 500 万 画 素 (2456×2058) 有 効 撮 像 面 積 8.47(H)×7.10(V) mm 画 素 サ イ ズ 3.45 µm×3.45 µm 感 度 0.31 V/Lux-sec

(23)

3.2 実験手順

以下の手順で測定を行った。 以上の一連の処理を画像再生についてはVisual C++ 2010 Express で作成されたプ ログラム、アンラッピング処理についてはMATLABで処理を行った。 C++は1990年以降、最もよく利用される商用のプログラミング言語である。C++はデ ータとそれを操作する手続きをオブジェクトと呼ばれる単位として一体化し、そのオブ ジェクトの組合せとしてプログラムを記述するプログラミング技法であるオブジェク ト指向プログラミングをサポートするために、C言語に改良を加えたものであると言え、 C言語に対して上位互換性を持っている。[5] 本研究においてはフレネル回折計算など、 オブジェクト指向プログラミングが有用となる場面が多い。

CCD カメラを用いて物体光、参照光の干渉像を撮影後、コンピュータ制御さ

れた

PZT ステージを動かして計 4 枚の干渉画像を撮影後、表面形状計測の

ために用いる位相差像を得るため、物体光の角度を変化させて同様に

4 枚の

干渉画像を撮影する。デジタルホログラフィは実験系周りの振動や空気の乱

れによって結果が乱れてしまうことが多いため、基本的には一度の実験でこ

の過程を

2~3 セット行う。

撮影した画像にそれぞれ

C++で再生処理を施し、ホログラム再生像を BMP

形式で保存し、確認する。同時に、物体光の角度変化前、変化後の再生像の

位相差を取り、同様に

BMP 形式で保存し、確認する。

得られた位相差像に

MATLAB を用いて従来のプログラム及び新しいプログ

ラムでのアンラッピング結果を確認し、比較する。

(24)

次項に記載するプログラムでは、参考文献[6]にて紹介されている CWO++ライブラリ を用いてデジタルホログラムの再生を行っている。記載されているものは改変した部分の みであるので、回折計算オブジェクトの詳細などは省略してある。CWO ライブラリは回折 計算を行うことを主な目的として作成された C++のライブラリであり、それを呼び出すた めにCWO クラス、GWO クラスといったクラスが作られている。本研究でのデジタルホロ グラムの再生においては、このクラスを用いることで画像の読み込みから再生像、位相差像 の保存まで、全ての処理を行っている。 また、GPU を利用した再生プログラムでは、2 のべき乗 pixel の画像でしか再生処理 を施すことができない。本研究において CCD カメラによって記録された画像は 2456×2058 pixel であるため、画像をトリミングして pixel 数を下げなければならない。 そのため、本研究では撮影されたホログラムの右上部2048×2048 pixel を切り抜き、実 験を行っている。 しかしながら、撮影された4枚の画像を一枚ずつトリミングしていくと、一回の撮影 から再生までの一連の流れに多くの時間がかかってしまう。したがって、本研究におい てはPikTrim*というトリミングのツールを用いてトリミングを行っている。PikTrim では読み込んだ任意の枚数の画像に対して事前に設定した位置、及びpixel数だけのト リミングを行うことができ、4枚の画像を一括変換することが可能であるため、本研究 においてはトリミングに要する時間を大幅に短縮することが可能となっている。 PikTrimはVisual C++によって作成されており、ホームページでプログラムのソースコ ードが公開されているため、ここでは省略する。 *) http://www.geocities.co.jp/Milano/8000/cbuilder/index.html

(25)

//cpuとgpuを用いた再生処理 void DHreconstx2() { //定義 CWO c1,c2,c3,c4,c5,c6,c7,c8; GWO g1,g2,g3,g4,g5,g6,g7,g8; double a,b; //2回分の干渉画像をロード c1.Load("a1.bmp"); c2.Load("a2.bmp"); c3.Load("a3.bmp"); c4.Load("a4.bmp"); c5.Load("b (1).bmp"); c6.Load("b (2).bmp"); c7.Load("b (3).bmp"); c8.Load("b (4).bmp"); //GPUでの処理へ g1.Send(c1); g2.Send(c2); g3.Send(c3); g4.Send(c4); g5.Send(c5); g6.Send(c6); g7.Send(c7); g8.Send(c8); //位相シフト計算 g1-=g3; //振幅情報 ReU(X,Y,Z) g2-=g4; //位相情報 ImU(X,Y,Z)

(26)

g5-=g7; g6-=g8; //複素振幅を計算 g3.Clear(); g3.Complex(g1,g2); g7.Clear(); g7.Complex(g5,g6); //CCDカメラの画素サイズを設定 g3.SetPitch(3.45e-6, 3.45e-6); g7.SetPitch(3.45e-6, 3.45e-6); //再生面での複素振幅を計算 Z'=205 mm g3.Diffract(-0.205,CWO_FRESNEL_FOURIER); g7.Diffract(-0.205,CWO_FRESNEL_FOURIER); //再生像とは別に、位相差を取るために数値を複製 g1.Clear(); g5.Clear(); g1=g3; g5=g7; //再生像のため、強度場へ変換 g3.Intensity(); g7.Intensity(); //位相差像のため、位相場へ変換 g1.Phase(); g5.Phase();

(27)

//bmp保存用に、256段階でスケーリング g3.Scale(255); g7.Scale(255); g1.Scale(255); g5.Scale(255); //位相差をとる g5-=g1; //CPUでの処理へ g3.Recv(c3); g7.Recv(c7); g5.Recv(c5); //再生像の保存 c3.Save("DHrecA.bmp"); c7.Save("DHrecB.bmp"); //位相差像の保存 c5.Save("DHsurf.bmp"); } //オブジェクトの実行 void main() { printf("holoreconstx2\n"); DHreconstx2(); printf("Finish\n"); getch(); }

(28)

次に、実験に用いたMATLABプログラムを記載する。MATLABによる処理は基本的 な数学データがあらかじめ用意されており、データ化、配列の宣言が不要であり、行列 計算、ベクトル演算、グラフ化や3次元化などの豊富なライブラリ、様々なデータ形式 を扱えるなど、C言語などに比べ、より簡単に豊富な処理を行うことができる。[7] また、次項のプログラムによって処理する前に、先のプログラムによって得られた画 像をImageJ*を用いて8ビットグレイスケール化、トリミング、メディアンフィルタ処 理を行っている。メディアンフィルタは処理するピクセルの周辺画素の輝度値の大きさ を順に並べ、その中央値を注目画素に置き換えることでノイズを除去している。したが って、周辺画素の輝度値よりも大きく異なるノイズを除去することに大いに役立つ。 ImageJではトリミング及びメディアンフィルタ処理をプレビューしながら行えるので、 本研究において重要な細かな調整が可能となっている。 *) http://imagej.nih.gov/ij/

clc; close all; clear all;%%変数と画面の全クリア

a = 100; %横の画素数 b = 100; %縦の画素数 %%%%%%%%%%%%%%%%%%%% フィルタ %%%%%%%%%%%%%%%%%%%% h1 = 1/81*[1 1 1 1 1 1 1 1 1;1 1 1 1 1 1 1 1 1;1 1 1 1 1 1 1 1 1; 1 1 1 1 1 1 1 1 1;1 1 1 1 1 1 1 1 1;1 1 1 1 1 1 1 1 1; 1 1 1 1 1 1 1 1 1;1 1 1 1 1 1 1 1 1;1 1 1 1 1 1 1 1 1]; %%%%%%%%%%%%%%%%%%%% 光強度画像読み込み %%%%%%%%%%%%%%%%%%%% im1=double(imread('12-0,205_100med.bmp')); P=im1; %%%%%%%%%% 各行列の定義 %%%%%%% in1=zeros(b,a);% in2=zeros(b,a);%縦方向差分データ in3=zeros(b,a);%位相接続のみ

(29)

%%%%% 1 %%%%%%%%%%%%%%%%%%%%%%%% in1(1,1) = P(1,1); %%%%% 2 %%%%%%%%%%%%%%%%%%%%%%%% for i=2:b; in1(i,1)=P(i,1)-P(i-1,1); %前画素との位相(強度)差 縦版 end %%%%% 3 %%%%%%%%%%%%%%%%%%%%%%%% th=80; s=230; th0=20; for i=2:b; if in1(i,1)>th; in2(i,1)=in1(i,1)-s; elseif in1(i,1)<-th; in2(i,1)=in1(i,1)+s; else in2(i,1)=in1(i,1); end end %%%%% 4 %%%%%%%%%%%%%%%%%%%%%%%% sum=0;

for i=1:b; %iが1からb(縦の画素数)まで sum=sum+in2(i,1); %sumはひとつ前のsum+in2 in3(i,1)=sum; %in3にsumを入れる

end

%%%%% 5 %%%%%%%%%%%%%%%%%%%%%%%%

for i=1:b; %iが1からbまで for j=2:a; %jが2からaまで

in1(i,j)=P(i,j)-P(i,j-1); %in1は現在のP-横画素でひとつ前のP end

(30)

%%%%% 6 %%%%%%%%%%%%%%%%%%%%%%%%

for i=1:b; %iが1からbまで for j=2:a; %jが2からaまで if in1(i,j)>th; in2(i,j)=in1(i,j)-s; elseif in1(i,j)<-th; in2(i,j)=in1(i,j)+s; else in2(i,j)=in1(i,j); end end end %%%%% 7 %%%%%%%%%%%%%%%%%%%%%%%% sum=in3(1,1); for j=2:a; sum=sum+in2(1,j); in3(1,j)=sum; end %%%% アンラッピングエラーを検知後、移動平均より補正%%%% th00=50; for i=2:b; sum=in3(i,1); for j=2:a; sum=sum+in2(i,j); in3(i,j)=sum; if abs(in3(i,j)-in3(i,j-1))>th00; in3(i,j)=in3(i-1,j)+(in3(i-1,j)-in3(1,j))/(i-1); end end end

(31)

%%%%%%%%%% 時計回りに90°回転 %%%%%%%%%%%%%%%%%% data1 = rot90(P,3); %%%%% 位相接続(各行列の大きさを定義) %%%%%%% in11=zeros(a,b); in12=zeros(a,b);%縦方向差分データ in13=zeros(a,b);%位相接続のみ %%%%% ↓位相接続の部分↓ %%%%%%%%%%%%%%%%%% %%%%% 1 %%%%%%%%%%%%%%%%%%%%%%%% in11(1,1) = data1(1,1); %%%%% 2 %%%%%%%%%%%%%%%%%%%%%%%% for i=2:a; in11(i,1)=data1(i,1)-data1(i-1,1); end %%%%% 3 %%%%%%%%%%%%%%%%%%%%%%%% for i=2:a; if in11(i,1)>th; in12(i,1)=in11(i,1)-s; elseif in11(i,1)<-th; in12(i,1)=in11(i,1)+s; else in12(i,1)=in11(i,1); end end %%%%% 4 %%%%%%%%%%%%%%%%%%%%%%%% sum=0; for i=1:a; sum=sum+in12(i,1); in13(i,1)=sum; end

(32)

%%%%% 5 %%%%%%%%%%%%%%%%%%%%%%%% for i=1:a; for j=2:b; in11(i,j)=data1(i,j)-data1(i,j-1); end end %%%%% 6 %%%%%%%%%%%%%%%%%%%%%%%% for i=1:a; for j=2:b; if in11(i,j)>th; in12(i,j)=in11(i,j)-s; elseif in11(i,j)<-th; in12(i,j)=in11(i,j)+s; else in12(i,j)=in11(i,j); end end end %%%%% 7 %%%%%%%%%%%%%%%%%%%%%%%% sum=in13(1,1); for j=2;a; sum=sum+in12(1,j); in13(1,j)=sum; end for i=2:a; sum=in13(i,1); for j=2:b; sum=sum+in12(i,j); in13(i,j)=sum; if abs(in13(i,j)-in13(i,j-1))>th00; in13(i,j)=in13(i-1,j)+(in13(i-1,j)-in13(1,j))/(i-1); end end end

(33)

%%%%% 反時計回りに90°回転 %%%%%%% result1 = rot90(in13,1);

clear in1; clear in2; figure(29);

imshow(result1,[]);axis on; axis image;

%%%%%%%%%% 時計回りに180°回転 %%%%%%%%%%%%%%%%% data2 = rot90(P,2); %%%%% 位相接続(各行列の大きさを定義) %%%%%%% in21=zeros(b,a);% in22=zeros(b,a);%縦方向差分データ in23=zeros(b,a);%位相接続のみ %%%%%% ↓位相接続の部分↓ %%%%%%%%%%%%%%%%% %%%%%% 1 %%%%%%%%%%%%%%%%%%%%%%% in21(1,1) = data2(1,1); %%%%%% 2 %%%%%%%%%%%%%%%%%%%%%%% for i=2:b; in21(i,1)=data2(i,1)-data2(i-1,1); end %%%%%% 3 %%%%%%%%%%%%%%%%%%%%%%% %th= 240; %判定関数 アンラップ閾値 for i=2:b; if in21(i,1)>th; in22(i,1)=in21(i,1)-s; elseif in21(i,1)<-th; in22(i,1)=in21(i,1)+s; else in22(i,1)=in21(i,1); end end

(34)

%%%%%% 4 %%%%%%%%%%%%%%%%%%%%%%% sum=0; for i=1:b; sum=sum+in22(i,1); in23(i,1)=sum; end %%%%%% 5 %%%%%%%%%%%%%%%%%%%%%%% for i=1:b; for j=2:a; in21(i,j)=data2(i,j)-data2(i,j-1); end end %%%% 6 %%%%%%%%%%%%%%%%%%%%%%%%% for i=1:b; for j=2:a; if in21(i,j)>th; in22(i,j)=in21(i,j)-s; elseif in21(i,j)<-th; in22(i,j)=in21(i,j)+s; else in22(i,j)=in21(i,j); end end end %%%%% 7 %%%%%%%%%%%%%%%%%%%%%%%% sum=in23(1,1); for j=2;a; sum=sum+in22(1,j); in23(1,j)=sum; end

(35)

for i=2:b; sum=in23(i,1); for j=2:a; sum=sum+in22(i,j); in23(i,j)=sum; if abs(in23(i,j)-in23(i,j-1))>th00; in23(i,j)=in23(i-1,j)+(in23(i-1,j)-in23(1,j))/(i-1); end end end %%%%% 反時計回りに180°回転 %%%%%% result2 = rot90(in23,2); clear in21; clear in22; figure(30)

imshow(result2,[]);axis on; axis image;

%%%%%%%%%% 時計回りに270°回転 %%%%%%%%%%%%%%%%% data3 = rot90(P,1); %%%%% 位相接続(各行列の大きさを定義) %%%%% in31=zeros(a,b);% in32=zeros(a,b);%縦方向差分データ in33=zeros(a,b);%位相接続のみ %%%%% 1 %%%%%%%%%%%%%%%%%%%%%%%% in31(1,1) = data3(1,1); %%%%% 2 %%%%%%%%%%%%%%%%%%%%%%%% for i=2:a; in31(i,1)=data3(i,1)-data3(i-1,1); end

(36)

%%%%% 3 %%%%%%%%%%%%%%%%%%%%%%%% for i=2:a; if in31(i,1)>th; in32(i,1)=in31(i,1)-s; elseif in31(i,1)<-th; in32(i,1)=in31(i,1)+s; else in32(i,1)=in31(i,1); end end %%%%% 4 %%%%%%%%%%%%%%%%%%%%%%%% sum=0; for i=1:a; sum=sum+in32(i,1); in33(i,1)=sum; end %%%%% 5 %%%%%%%%%%%%%%%%%%%%%%%% for i=1:a; for j=2:b; in31(i,j)=data3(i,j)-data3(i,j-1); end end %%%%% 6 %%%%%%%%%%%%%%%%%%%%%%%% for i=1:a; for j=2:b; if in31(i,j)>th; in32(i,j)=in31(i,j)-s; elseif in31(i,j)<-th; in32(i,j)=in31(i,j)+s; else in32(i,j)=in31(i,j); end end end

(37)

%%%%% 7 %%%%%%%%%%%%%%%%%%%%%%%% sum=in33(1,1); for j=2;a; sum=sum+in32(1,j); in33(1,j)=sum; end for i=2:b; sum=in33(i,1); for j=2:a; sum=sum+in32(i,j); in33(i,j)=sum; if abs(in33(i,j)-in33(i,j-1))>th00; %in33(i,j)=in33(i-1,j); in33(i,j)=in33(i-1,j)+(in33(i-1,j)-in33(1,j))/(i-1); end end end %%%%% 反時計回りに270°回転 %%%%%% result3 = rot90(in33,3); clear in31; clear in32; figure(31)

imshow(result3,[]);axis on; axis image;

%%%%%%%%%%% 画像表示1 %%%%%%%%%%%%%%%%%%%%%%%%% figure(2);

subplot(2,2,1);

imshow(in3,[]);axis on; axis image; title('位相接続');

(38)

subplot(2,2,2);

imshow(result1,[]);axis on; axis image; title('時計回りに90°回転後に位相接続');

subplot(2,2,3);

imshow(result2,[]);axis on; axis image; title('時計回りに180°回転後に位相接続');

subplot(2,2,4);

imshow(result3,[]);axis on; axis image; title('時計回りに270°回転後に位相接続'); %%%%%%%%%% エラー補正 %%%%%%%%%%%%%%%%%%%%%%%%%% rot_0 = in3; rot_90 = result1; rot_180 = result2; rot_270 = result3; ME = medfilt2(rot_0,[3 3]); %%%%%% rot_0に近づける %%%%%%%%%%%%%%% data1 = rot_0(1,1)-rot_90(1,1); data2 = rot_0(1,1)-rot_180(1,1); data3 = rot_0(1,1)-rot_270(1,1); sum0 = rot_0; sum1 = rot_90+data1; sum2 = rot_180+data2; sum3 = rot_270+data3; figure(99); subplot(2,2,1);

imshow(sum0,[]);axis on; axis image; title('sum0');

(39)

subplot(2,2,2);

imshow(sum1,[]);axis on; axis image; title('sum1');

subplot(2,2,3);

imshow(sum2,[]);axis on; axis image; title('sum2');

subplot(2,2,4);

imshow(sum3,[]);axis on; axis image; title('sum3'); th2=1; t1=sum0-sum1; t2=sum0-sum2; t3=sum0-sum3; t4=sum1-sum2; t5=sum1-sum3; t6=sum2-sum3; in100 = zeros(b,a); for i=1:b; for j=1:a; if abs(t1(i,j))<th2; in100(i,j) = sum0(i,j); elseif abs(t2(i,j))<th2; in100(i,j) = sum0(i,j); elseif abs(t3(i,j))<th2; in100(i,j) = sum0(i,j); elseif abs(t4(i,j))<th2; in100(i,j) = sum1(i,j); elseif abs(t5(i,j))<th2; in100(i,j) = sum1(i,j);

(40)

上記のプログラムに関して、従来のプログラムを発展させた点は2つある。 1つは、アンラッピング処理の際、エラーを検出したならば、それまでの画素強度の 増加あるいは減少平均を算出し、そのピクセルでの数値を線形的に予測して置き換える ようになっている。 もう1つはエラー補正の処理に関してである。どちらのプログラムでも4回のアンラッ ピング処理後、それぞれ引き合わせて計6つの行列を出し、その差によって補正をして いるが、条件が違う。本研究で用いたプログラムでは補正をする際、6つの行列が零行 列になっているかどうかの判別を繰り返すことで、より正確なエラー補正を可能とした。 elseif abs(t6(i,j))<th2; in100(i,j) = sum2(i,j); else in100(i,j) = ME(i,j); end end end end %%%%%%%%%% 平滑化 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% in100_H = filter2(h1,in100); %%%%%%%%%% 画像表示2 %%%%%%%%%%%%%%%%%%%%%%%%%% figure(3);

imshow(in100,[]); axis image; title(''); %エラー補正後

figure(4); mesh(in100_H);

xlabel('Pixel number'); ylabel('Pixel number'); zlabel('Pixelint'); shading interp; colormap(gray);

(41)

第4章

実験結果

4.1 3 次元画像の再生

4.1-1 再生像の出力

本研究においては試料として先端の直径が5 mm程度のFig.4-1のようなねじを用い た。ねじのヘッドには白のアクリル塗料を塗ることで表面を散乱面に加工してある。 Fig.4-1 実験試料 Fig.4-1のねじについてPZTステージを動かすことで参照光の位相をずらしながら4 回撮影を行うと、Fig.4-2のような干渉画像が得られた。なお、3.2節で述べたように、 本研究ではGPUを利用して処理を行うため、2のべき乗pixelの画像のみでしか処理され ない。したがって、Fig.4-2の画像はCCDカメラで撮影された2456×2058 pixelの画像 をトリミングし、その左上部分2048×2048 pixelを切り出した画像である。

(42)

Fig.4-2 各位相シフトでの干渉画像 Fig.4-2より、各位相での干渉画像に違いは無いように見えるが、実際には肉眼では確 認できないほど微細な干渉縞が画像には記録されているため、この画像に対して前述の 再生プログラムによる処理を施すことで3次元画像が出力される。 次に、この4枚の干渉画像に対し、前述のプログラムでフレネル回折計算処理を施し、 BMP形式で保存することでFig.4-3のような再生像が得られた。 0 /2  3/2

(43)

Fig.4-3 出力された再生像

4.1-2 撮像距離と再生距離の関係

2.8節 撮像距離にて述べたように、実験試料とCCDカメラとの距離をZ、CCDカメラ と再生面との距離をZ’とする。Z=20.5 cmとしてCCDカメラで試料を撮影し、前述の再 生プログラムにおいてZ’の数値を設定することで再生像の変化を記録した。Fig.4-4はZ’ の値を2 cm刻みで変化させてある。 Fig.4-4 再生距離の変化における再生像の変化 Z’=16.5 cm Z=18.5 cm Z’=20.5 cm Z’=22.5 cm

(44)

Fig.4-4より、𝑍′=20.5 cmの時に最も鮮明な再生像が得られた。したがって、デジタル ホログラム再生の際には試料~CCDカメラ間の距離に合わせて再生距離を設定するこ とで、正確な再生像を得ることができた。

4.1-3 再生像の不安定性の改善

4.1-1節、4.1-2節において、試料として用いたねじの再生像を示したが、デジタルホ ログラフィは空気の乱れや振動、位相シフト誤差などによって大きく結果が異なってし まうことが多い。したがって、同条件で撮影し、同じプログラムで再生した画像でも結 果が異なってしまうことが大半である。その場合、再生像において、Fig.4-5のように試 料であるねじの上に円形に広がった像が被さってしまうことが多かった。 Fig.4-5 ねじに円形の像が重なっている再生像 この原因としてCCDカメラの物体光、参照光以外の余分な光の取り込みを考え、検証 した。 これまでは実験系全体を覆うように、内面を黒く塗った段ボールのカバーを被せるこ とで、実験系に対する熱や空気の乱れの影響を減らし、不安定性の改善を試みていたが、 Fig.4-6のように、物体光が試料にあたり、そこから漏れた光がカバーへとあたり散乱光 としてCCDカメラに取り込まれているのではないかと考えた。

(45)

Fig.4-6 カバーからの散乱光 検証のため、カバーを外す前と外した後でそれぞれ干渉像を3セットずつ撮影し、そ れぞれ3次元像を取得した。その結果がFig.4-6である。 Fig.4-7 カバーを外す前(a)と外した後(b)の3枚ずつの再生像 この結果のみでは判断がつかなかったので、この検証を繰り返した結果、偶然の可能 性もあるが、カバーを外した場合の再生像のほうが比較的綺麗な像が得られることが多 かったように感じた。したがって、少なくともカバーをつけることによるメリットは薄 いと判断したため、本研究ではカバーを外した状態で全ての実験を行っている。 (a) (b)

(46)

4.1-4 GPU を利用した計算時間の短縮

Table 4-1 は CPU のみを用いた場合と CPU と GPU を用いた場合での回折計算時間 を記録したものである。前述の再生プログラムを用いている。 画 素 数 pixel CPU Intel Core i7 2600K [s] CPU+GPU GeForceGTX 560Ti [s] 512×512 1.6 1.2 1024×1024 4.2 2.9 2048×2048 14.9 8.6 Table 4-1 の数値は、回折計算に必要とした時間を秒単位で表したものである。画素 サイズが小さい場合には処理すべき情報量が多くないため、CPU のみの場合と GPU を 利用した場合とでは計算時間に大きな違いは確認できないが、画素サイズが大きい場合 になるとCPU のみの場合と GPU を利用した場合とでは計算時間に大きな違いがある ことが確認できた。この理由として、画素サイズが大きくなることでデータの処理量が 増えたことが原因であると考えられる。したがって、画像再生プログラムがより複雑化 し、データの処理量が多くなればなるほどGPU を利用することによる恩恵が得られる ことが予測できる。 Table 4-1 GPU を用いた場合の計算時間の比較

(47)

4.2 表面形状計測

2.9-1節で述べた2入射法より、電動ステージを動かして物体光の角度を0.02 度変化 させることで、Fig.4-8のような2セットの干渉画像を得た。 Fig.4-8 物体光の角度変化前後の干渉画像(a:角度変化前 b:角度変化後) Fig.4-8の干渉画像に対し、それぞれフレネル回折計算処理後、その位相差を取ること で、Fig.4-9のような等高線の画像が得られた。 Fig.4-9 物体光を0.02 度変化させることで得られた位相差像 (a) (b)

(48)

Fig.4-9の位相差像のままでは、画像の節々に細かいノイズがかかっており、アンラッ ピングが困難である。そのため、元画像から多少離れてしまうが、この位相差像に対し、 メディアンフィルタをかけることで、Fig.4-10のような画像を得た。 Fig.4-10 メディアンフィルタ処理後の位相差像 位相差像に対しアンラッピング処理を施すことで形状計測を行うのだが、通常、縞の 数だけアンラッピング処理が入ることとなるため、縞が多ければ多いほどエラーが出や すい。現段階のプログラムでは、この量の縞をアンラッピングエラーを出さずに一度に 処理することは不可能と判断し、この画像をトリミングし、それに対してアンラッピン グ処理を施すことにより、本手法の妥当性を調べた。 Fig.4-10をトリミングし、一部を抜き出した画像がFig.4-11である。

(49)

Fig.4-11に対し、まず参考文献[1]の従来の4方向アンラッピングプログラムを用いて アンラッピング処理を施した。Fig.4-12はそれぞれの方向からアンラッピング処理を行 った結果である。 Fig.4-12 従来のプログラムでの各方向からのアンラッピング処理後の画像 この結果より、アンラッピングエラー補正を行った結果がFig.4-13である。 Fig.4-13 従来のプログラムでのアンラッピングエラー補正後の画像 Fig.4-12のアンラッピングエラーが多く、Fig.4-13ではエラー補正を行っても多少の アンラッピングエラーが残ってしまっていた。

(50)

Fig.4-13のエラー補正像において、Fig.4-14(a)の破線部のラインプロファイルを取る と、Fig.4-14(b)のようになった。 Fig.4-14 従来のプログラムによる破線部(a)のラインプロファイル(b) 補正しきれていないアンラッピングエラーが影響し、特定の位置で画素強度に大きな 乱れが生じていることがわかる。 (a) (b)

(51)

次に、Fig.4-13の画素強度より3次元的に分布し、立体像をとると、Fig.4-15が得られ た。 Fig.4-15 従来のプログラムによる3次元分布 ねじの表面を計測しているので、滑らかな面が計測できていることが好ましいが、と ころどころに凹凸が見られる。アクリル塗料を塗布する際、手動で行ったので、塗りに むらがあることも凹凸の一つの要因となっていると考えられるが、Fig.4-13のアンラッ ピングエラー部のみでなく、その他の細かな点でも画素強度に乱れが生じており、この ような結果になったのではないかと考える。この問題を改善するためには、メディアン フィルタを強くかけるか、より質の高いデジタルホログラム撮影を行う必要があると考 えられる。

(52)

次に、新しく製作したプログラムを用いてアンラッピング処理を施した。Fig.4-16は Fig.4-12と同様に、各方向からのアンラッピング処理を行った結果である。 Fig.4-16 改良したプログラムでの各方向からのアンラッピング処理後の画像 この結果より、アンラッピングエラー補正を行った結果がFig.4-17である。 Fig.4-17 改良したプログラムでのアンラッピングエラー補正後の画像 上部にまとまったアンラッピングエラーが残ってはいるものの、従来のプログラムと 比べてアンラッピングエラーが少ないことが確認できる。

(53)

Fig.4-17のエラー補正像において、Fig.4-18(a)の破線部のラインプロファイルを取る と、Fig.4-18(b)のようになった。 Fig.4-18 改良したプログラムによる破線部(a)のラインプロファイル(b) 上部のまとまったアンラッピングエラー及び中心付近一か所のアンラッピングエラ ーの影響を受けていることがわかる。その他の点においてはプロットの関係上乱れて見 えるが、従来のプログラムとほぼ同等である。 (a) (b)

(54)

次に、Fig.4-14の画素強度より3次元的に分布し、立体像をとるとFig.4-16が得られた。 Fig.4-19 改良したプログラムによる3次元分布 Fig.4-15と比較すると、新しいプログラムで処理を行ったほうがなだらかな形状が計 測できていることがわかる。アンラッピングエラーを従来のプログラムよりも低減でき ていることが最も大きな原因であると考えられる。 しかしながら、細かな凹凸は新しいプログラムでも確認できる。このことからも、こ の細かな凹凸の原因はデジタルホログラフィ再生像自体の乱れ、もしくはアクリル塗料 の塗りのむらであると判断する。

(55)

次に、傾斜の急な部分のサンプルとして、Fig.4-10のねじのヘッドの中央部に関して 新旧のプログラムを用いて同様の処理を行った。Fig.4-20は100×100 pixelで抜き出し た中央部である。

Fig.4-20 Fig.4-10の中央部を100×100 pixelで抜き出した画像

この画像に対して従来のプログラムを用いて処理を行い、得られた各方向からのアン ラッピング結果がFig.4-21である。

(56)

そして、Fig.4-21からエラー補正をすることで得られた画像がFig.4-22である。 Fig.4-22 従来のプログラムでのアンラッピングエラー補正後の画像(中央部) 表面の一部をアンラッピング処理したFig.4-13と比べ、非常に多くのアンラッピング エラーが補正しきれずに残った。これは、アンラッピング処理をするべきではないヘッ ドの中央部の急な傾斜を画素強度の跳びとプログラムが判断し、アンラッピング処理を 施すことで結果として画素強度に跳びが生じ、エラーとして現れたことが原因だと考え られる。

(57)

Fig.4-22のエラー補正像において、Fig.4-23(a)の破線部のラインプロファイルを取る と、Fig.4-23(b)のようになった。 Fig.4-23 従来のプログラムによる破線部(a)のラインプロファイル(b) (中央部) Fig.4-23より、一か所のみ際立ってアンラッピングエラーの影響を強く受けているこ とがわかる。そのため、他のアンラッピングエラー部での影響はプロット上では目立っ ていないが、数値的には影響を受けていることがわかる。 (a) (b)

(58)

次に、Fig.4-22の画素強度より3次元的に分布し、立体像をとるとFig.4-24が得られた。 Fig.4-24 従来のプログラムによる3次元分布 (中央部) アンラッピングエラーが多く出ていたことから、形状は大きく乱れてしまっているこ とがわかる。 これらのことより、従来のプログラムはねじのヘッド中央部のような急な傾斜に対応 できないと判断する。

(59)

同様に、Fig.4-20に新しいプログラムを用いて処理することで得られた各方向からの アンラッピング結果がFig.4-25である。 Fig.4-25 改良したプログラムでの各方向からのアンラッピング処理後の画像(中央部) そしてFig.4-25の結果からエラー補正をすることで得られた画像がFig.4-23である。 Fig.4-26 改良したプログラムでのアンラッピングエラー補正後の画像(中央部) 補正が強すぎて歪んでしまっている点はあるが、アンラッピングエラーはほとんど補 正されていることがわかる。

(60)

Fig.4-26のエラー補正像において、Fig.4-27(a)の破線部のラインプロファイルを取る と、Fig.4-27(b)のようになった。 Fig.4-27 改良したプログラムによる破線部(a)のラインプロファイル(b) (中央部) 目立ったアンラッピングエラーが無いことからも、細かな乱れはあるものの、全体的 に形状に沿った形にプロットされていることがわかる。 (a) (b)

(61)

次に、Fig.4-26の画素強度より3次元的に分布し、立体像をとると、Fig.4-28の結果が 得られた。 Fig.4-28 改良したプログラムによる3次元分布(中央部) Fig.4-24と比較すると、アンラッピングエラーが少なく、立体像もねじ穴の形状にほ ぼ沿った形となっていることがわかる。このことからも、新しいプログラムはねじのヘ ッド中央部などの急な傾斜にも対応できると言える。プログラム中でアンラッピングエ ラーを検出後、さらに画素強度の増加、あるいは減少平均からエラー箇所の本来の数値 を線形的に予測し、補正をかけるといった二重の補正を行っていることが、この結果の 最も大きな要因であると考えられる。しかしながら、強い補正をかけているために、本 来の形状と厳密には異なってしまっている問題も考えられる。

(62)

第5章

総括

本研究では、位相シフトデジタルホログラフィによる形状計測を行うために、マッハ ツェンダ干渉計を基とした実験系を用いて実験を行った。デジタルホログラフィは実験 系周りの熱や空気の乱れ、振動といった細かな要因で大きく結果が変わったり、あるい は再現性が低くなったりすることがある。そのため、本研究においては物体光の角度を 変化させるためや、参照光の位相をシフトさせるためのステージは極力電気的に制御が 行えるように実験系を組むことで、再現性の向上を図っている。 本研究では、デジタルホログラフィの3次元像再生において、白のアクリル塗料を塗 った先端の直径2 mmほどのねじを試料として用いている。そのねじを用い、デジタル ホログラフィによる3次元像の再生を撮影距離、再生距離などを変えて行った。この際、 デジタルホログラフィの外部影響の受けやすさから、再生像の上に円形に広がった像が 重畳することが多かった。その像に対する対策として、物体光、参照光以外の余分な光 をCCDカメラが取り込んでいる可能性を考え、熱や空気の乱れによる影響を減らすた めに実験系を覆っていたカバーからの反射散乱光が取り込まれているのではないかと 考えた。そのため、カバーを外して検証を行ったものの、カバーを外す前と後とで顕著 な変化はなく、偶然の可能性もあるが、カバーを外した場合のほうが比較的綺麗な再生 像が取得できるといった程度であった。そのため、本研究においてはカバーを付けるこ とによる影響は薄いと考え、カバーを取り外して実験を行っている。いずれにせよ、本 研究におけるデジタルホログラフィの不安定性は完全に取り除かれてはいないため、本 論文における再生像は数セットに渡って撮影したもののうち、綺麗に再生できたものを 主に用いている。 また、本研究における3次元像再生においては、NVIDIA CUDAライブラリを用い、 CPUのみでなくGPUも組み合わせてコンピューティングを行うことで処理時間の短縮 を図った。結果として、画素サイズの大きい画像を読み込んで処理する量が多くなるほ ど劇的な効果が得られたため、今後再生プログラムがより複雑化していくことで、その 効果はより高まっていくと考えられる。 デジタルホログラフィによる表面形状計測においては、物体光の角度を変えて4枚の 干渉画像を2セット分撮影し、その位相差をとる2入射法を用いて行っている。得られた 位相差画像は等高線のような縞の入った不連続な画像となるため、その不連続性を正す

(63)

ためのアンラッピング手法が必要であった。そこで同研究室で光ディスク基板の欠陥検 出の際に開発された4方向アンラッピングをベースとし、エラー検出後にそれまでの画 素強度の増加、あるいは減少平均を取り、その点での画素強度を線形的に予測して当て はめることで補正するアンラッピング手法を開発し、処理を行った。この際、2048× 2048 pixelである元画像に対して直接アンラッピング処理を施すと、縞の多さからアン ラッピングエラーが多く発生し、補正しきれないことが多かった。したがって、元画像 を100×100 pixelにトリミングし、その画像に対してトリミング処理を行うことで本手 法の妥当性を調べた。なお、本論文においては、なだらかな面としてねじの表面の一部 を、傾斜の急な表面としてねじのヘッドの中央部をトリミングで切り出して処理を行っ た結果を記した。結果的に、新しく開発したプログラムでは、従来のプログラムよりも アンラッピングエラーを低減し、特に傾斜の急な表面におけるアンラッピングにおいて 効果を得ることには成功した。したがって、このプログラムによってアンラッピング処 理されたトリミング像を貼り合わせることで、試料全体の表面形状計測が達成できるこ とが期待される。 今後の課題としては、本研究におけるデジタルホログラフィ技術は、まだ再現性が低 く、表面形状計測においてもそれによる位相差像の粗さも原因して、アンラッピングエ ラーが多く出てしまっている。したがって、測定環境をより整えることで3次元像再生 の質を高めて行うことができれば、アンラッピングエラーも減り、表面形状計測をより 正確に行うことができるのではないかと考える。また、現在のアンラッピング処理にお いては、メディアンフィルタ、平滑化フィルタをかけているため、測定対象の表面形状 とは厳密には違っている可能性がある。そのため、前述の測定環境を整え、より質の高 い3次元像を得た際には、これらのフィルタを弱めてアンラッピング処理を行うことで、 より正確な表面形状が得られると予測する。

(64)

謝辞

本研究を行うにあたり、ご指導、ご教授いただきました高橋佳孝准教授に深く感謝の 意を示すと共に厚く御礼申し上げます。 本論文の作成にあたり、お忙しい中審査をしてくださった、高田和正教授、花泉修教 授に深く感謝いたします。 本研究の共同研究者である新宮正和氏をはじめ、同研究室の皆様に深く感謝いたしま す。 本研究は多くの方々のご指導をもとになされたものであり、様々な面で協力をいただ いた関係諸氏に改めて感謝し、御礼申し上げます。

Table 4-1 は CPU のみを用いた場合と CPU と GPU を用いた場合での回折計算時間

参照

関連したドキュメント

Fig. 2 X方向 (a) およびY方向 (b) のワイヤのCT値プロファイル Fig. 3 zeroing処理前のLSF (a) とzeroing後のLSF (b).

 その後、徐々に「均等範囲 (range of equivalents) 」という表現をクレーム解釈の 基準として使用する判例が現れるようになり

現実感のもてる問題場面からスタートし,問題 場面を自らの考えや表現を用いて表し,教師の

自体も新鮮だったし、そこから別の意見も生まれてきて、様々な方向に考えが

このように、このWの姿を捉えることを通して、「子どもが生き、自ら願いを形成し実現しよう

となる。こうした動向に照準をあわせ、まずは 2020

死がどうして苦しみを軽減し得るのか私には謎である。安楽死によって苦

 学年進行による差異については「全てに出席」および「出席重視派」は数ポイント以内の変動で