標準関数だけで画像の色補正

Tips

スポンサーリンク

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

  • 標準関数だけで画像のヒストグラムを測る方法

を紹介しています。

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

LabVIEWで画像を扱う場合、アドオンソフトウェアであるVision Development Moduleを使用することで様々な画像解析アルゴリズムを比較的手軽に実装することができます。

ただし、これはLabVIEWとは別に用意する必要がある有償ソフトウェアなので、ちょっとした用途だけにこれを用意するのも不便だったりします。

そこで、アドオンなしでLabVIEW単体で画像を扱うための関数を駆使して画像処理を行うことを考えます。

本記事では、画像の色味の調整を行うプログラムを組む例を紹介しています。

具体的には、画像の輝度、コントラスト、ガンマ値の編集になり、標準関数で扱える画像データタイプである、jpeg、png、bmpの三種類に対して適用できます。

なお、ピクチャの扱い方について以下の記事の内容を知っていると本記事の内容をより理解できると思いますので、適宜参考にしてみてください。

ピクチャの扱い方
LabVIEW初心者の方向けの記事です。本記事では、LabVIEWで画像を扱うためのピクチャ関数の扱い方について紹介しています。

スポンサーリンク

どんな結果になるか

フロントパネル上には色味の調整前と後の画像を表示するための2Dピクチャ表示器と、R、G、Bそれぞれに対する輝度やコントラスト、ガンマ値修正のための制御器(クラスタでまとめている)を用意しています。

画像を選択すると、R、G、B個別、あるいは一度に全部の、輝度、コントラスト、ガンマ値のパラメタを変更できます。

プログラムの構造

ブロックダイアグラムではイベントストラクチャを採用し、更新ボタンを押したときのみ色味の調整を行うようにしました。

本来はイベントストラクチャの中身には極力処理を置かない方が良いため、もしこれ以外の処理を行わせるようなプログラムと組み合わせる場合にはキューを使用するなどしてイベントストラクチャの外に処理をおいてください。

イベントストラクチャが入ったWhileループの外側では、画像を読み取ってこれをピックスマップに変換しています。

今回例としている、カラー画像は24ビットピックスマップとして出力されるので、この2次元配列を次のWhileループに渡しています。

なお、クラスタに対するリファレンスの配列は、機械的動作としてスイッチの設定をしているAllのボタンがTrueかFalseかで、操作を受け付けなくするための仕組みのために使用しています。

イベントとしては更新ボタンの値変更がメインになります。

中で使用しているサブVIでは、輝度、コントラスト、ガンマ値の計算補正を行っています。

具体的な計算については、ピクセル値に対してコントラスト値(contrast)を掛け算しそこに明るさ値(brightness)を足しています。

ガンマ値の補正は、上記の演算の結果を255で割った値を(gamma値分の1)乗してこれに255を掛けた値としています。

今回は3つの画像補正を適用するように書いていますが、他の画像補正方法などもしあればそれを各ピクセル値に対して演算するように処理を書いてみてください。

メインのVIの方のイベントの紹介に戻りまして、ALL ?の値変更イベントについても紹介します。

このイベントでは、All ?がTrueかFalseかで、フロントパネル上のクラスタを操作できるかどうかを決めています。

Whileループの外に用意していたリファレンスの配列を使用することで、複数のクラスタに対して一つのプロパティノードでプロパティの変更ができます。

各画像ファイルに対応する場合

LabVIEWの標準関数で読み取ることができる画像ファイルはjpeg、bmp、pngの拡張子のいずれかです。

これらはそれぞれ異なる関数を使用することになりますが、ファイル拡張子を取得関数とケースストラクチャを使用することで、ユーザーがこの3つのうちどの画像形式を選んでも実行できるように工夫することができます。

実装の一例を以下に示しています。

本記事では、標準関数だけで画像の色を補正する方法を紹介しました。

輝度やコントラスト、ガンマ値を補正することで後から画像を加工することができ何かを見やすくしたり強調するのに役立つと思うので参考にしてもらえるとうれしいです。

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

コメント

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