撮影画像のノイズ除去

Tips

スポンサーリンク

この記事で扱っていること

  • 撮影画像のノイズを除去する方法

を紹介しています。

注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。

LabVIEWのアドオンソフトウェアであるVision Acquisition Softwareを使用することでカメラからの画像を取り込むことができるようになります。

カメラはドライバ(USBカメラであればIMAQdx)さえ適合すれば、特定のメーカーのカメラでないと対応できないわけではないのですが、性能の高くないカメラだと画像のちらつきが結構ひどかったりします。

そんなノイズを、画像を平均化することで抑える処理を考えます。

NIサンプルファインダの中にあるノイズ除去のサンプルをヒントに(このサンプルは既に得られた画像ファイルに対して処理しています)、画像撮影中にも平均化処理を行うようなプログラムとしてみました。

スポンサーリンク

どんな結果になるか

フロントパネルにはカメラを選択する制御器と、何枚の画像で平均化処理をするのかを指定する数値制御器を設けています。

また、撮った画像をそのまま表示する画像表示器と、ノイズを減らした画像を表示する画像表示器を用意しています。

プログラムを実行すると、左側の画像表示器には画像がすぐに表示されますが、右側の画像表示器には少し遅れて画像が表示されます。この遅れは平均化回数の部分で指定した数の画像が集まりそれらが処理されるまでの時間ということになります。

平均化回数を多くするほど、画像の平均化処理に使用する画像数が多くなりノイズ除去しやすくなりますが、多くしすぎると右の画像表示器の更新も遅くなるので、どの程度の数で十分ノイズ除去できるかは調整が必要です。

なお、上の結果だと正直分かりづらいと思うのですが、そんなときにはサンプルファインダのサンプルを実行してみてください。サンプルで行っている処理を、画像撮影中にもやろう、というのが本記事のサンプルの意図です。

プログラムの構造

処理を行う部分は計算を伴うため、画像取得の動作に影響を与えないためにキューを用いて画像取得のループと画像処理のループとで分けた構造としています。

画像については画像リファレンスのデータタイプ(紫色のワイヤ)をそのままキューで渡すと不都合があるので、画像を一度画像データの数値配列に変換してキューで渡し、あとから再度画像に復元するようにします。

毎ループ渡すのではなく、ある程度(平均化回数分)たまったらキューで渡すために、ケースストラクチャがTRUEのときにエンキューします。

画像データの数値配列は、画像自体の大きさが固定なので、ループが始まる前にサイズを取得しておき、そのサイズ分の配列を配列初期化で用意します。画像データ配列は2次元ですが、これを平均化回数分ためるので3次元配列としています。

なお、ループ内でGrabの関数の後にIMAQ Cast Imageの関数を使用していますが、これはグレースケール画像にするために使用しました。私が使っているカメラは元々カラー(RGB)で画像を取得するのですが、Cast Imageの関数でグレースケールに変更して演算処理を行うためです。

そしてその演算処理のループの構造については、ベースはサンプルファインダのサンプルと同じで、要はサンプルでは画像ファイルに対して行っていた計算処理をその場で画像をとって行っているだけとしています。

演算処理のWhileループの中の一番最初のForループの自動指標付けで3次元配列が2次元配列になりますが、この2次元配列は個々の画像の画像データ配列なので、IMAQ ArrayToImageによって画像にすることができます。

画像の遅れを少なくする

上で紹介したプログラムでは、平均化回数で指定した数の画像が集まってから処理され、その後の処理もまた指定した数の画像がたまってから処理され、という流れを繰り返します。そのため、例えば平均化回数が10で一枚の画像をとるのに100 ミリ秒かかっていたとすると、ノイズ除去した画像が更新される頻度は10×100で1秒おきとなります。

そうではなく、一番最初は時間がかかっても、それ以降は画像を一枚ずつ更新させることでもノイズを減らすことができます。キューで渡す3次元配列中の画像データの順番は、結局みんな足して割り算されるので関係なくなるので、何も考えずにそのまま渡すので問題ないわけです。

画像にノイズが入ってしまう場合にカメラの性能を考えることもひとつかもしれませんが、プログラム的な改善案の一つとして参考にしてもらえるとうれしいです。

ここまで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました