画像タイプとファイル形式を変換する

Tips

スポンサーリンク

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

  • 画像のタイプと画像ファイル形式を変換する方法

を紹介しています。

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

画像にはいろいろなタイプがあります。LabVIEWで画像を扱う場合に、アドオンソフトとして使用するVision Development Module、画像解析のソフトウェアではグレースケールやRGBなど複数のタイプを扱うことができます。

解析処理の内容によっては「これはバイナリデータじゃないと使えない」とか、タイプに制限のついた関数があります。(粒子解析はRGBではできない、など)

これを簡易的に変換しようというのがこの記事で紹介するサンプルの目的です。

ある目的の画像解析処理を行う前に、その事前段階の処理の結果、適したタイプになることは多いのですが、すぐに解析処理の効果を確かめたいといったときに便利だったりします。

ただし、そもそも変換が無理な場合もあるのでその際はあきらめるしかありません。

またこのサンプルでは、画像のファイル形式の変換も行えます。扱えるファイル形式は、BMP、JPEG、PNG、TIFFといったものが挙げられます。

なお、以下のサンプルでは、Vision Development Moduleを必要としています。

スポンサーリンク

どんな結果になるか

フロントパネルには、変換元の画像と変換後の画像のファイルパスを置きます。変換後の画像はもちろん最初は存在しないので、保存したい場所に保存したい名前で用意します。

あとはプログラムを実行するだけで、指定した画像タイプで指定した画像形式で保存できます。もし変換できない組み合わせの場合にはエラーが出るのでそれはユーザーに通知されます。

プログラムの構造

ブロックダイアグラムは下記の図のようにいたってシンプルです。

変換前と変換後の画像リファレンスのためにIMAQ Createを二つ使用し、まず変換前の画像をファイルから読み取るのはIMAQ ReadFileで、次に指定した画像タイプに変換するのはIMAQ Cast Imageで、そして変換された画像はIMAQ Write File2の関数で行います。

なお、IMAQ WriteFile2の関数は多態性の関数になっており、どの形式にするかはブロックダイアグラムでその指定の形式に多態性タイプを合わせる必要があります。もちろん、変換後画像ファイルパスの画像ファイル拡張子を読みとって、その情報とケースストラクチャを合わせることで、複数の画像形式に対応したプログラムを作ることも可能です。

しかしこの場合、ケースストラクチャで複数のケースを準備する必要があるのでこれはこれで少し面倒です。

そんな場合には、IMAQ WriteFileの関数を使うのも手になります。この関数、関数パレットに表示されないのですが、

C:\Program Files (x86)\National Instruments\LabVIEW 20XX\vi.lib\vision

のフォルダ(20XXは使用しているLabVIEWのバージョン)にあるFiles1.llbの中にあります。

IMAQ WriteFileの関数は多態性になっておらず、画像形式を文字列として入力させます。そのため、ファイル拡張子を取得の関数と組み合わせることでより簡単に複数の画像形式に対応できます。

ただこの関数はIMAQ WriteFile2と異なり、画像形式毎の細かい設定(Image QualityやCompressionなど)ができません。

用途に応じてどの実装にするかを決める必要がありそうです。

変換後の画像パスの指定がいちいち面倒な場合

さて、いろいろな画像を変換したいとなった場合、いちいち変換後の画像ファイルの名前を指定するのは面倒です。そこで、画像ファイルのネーミング部分もプログラム的に自動でやってしまうということを考えます。

一例としては以下のようなプログラムが考えられます。このプログラムでは、変換元の画像ファイルの名前に「_converted」という文字を加えて、指定した画像形式で保存します。

LabVIEWで画像解析のプログラムを作る際、各関数によって受け付けることのできる画像タイプはヘルプを見れば載っています。ただ、それがわかったとして今度はどうその適合する画像タイプの画像を用意するかにてこずる場面も意外とあるので、そういったケースに今回の記事のようなプログラムを一つ用意しておくと何かと便利だと思います。

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

コメント

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