LabVIEW 画像情報表示参考プログラム
(最終改訂 2017/11/12)
LV_sample2_update.zipの内容
2016/10/26版の画像処理参考プログラムLV_sample2.zip中の3本のプログラムを改定したもので、
(1本を除きLabVIEW2013のランタイムエンジンのインストールに問題があるPCのためランタイム
エンジンの小さい)LabVIEW7.1 版の実行ファイル(ファイル名に”_LV71”が付く)を同梱している。
ソース(LabVIEW2013)を開いて実行する場合はpixel_color.viおよびauditory_illusion.viについて は参照するサブ VI を同じフォルダに置き、実行ファイルを開く場合には同名の設定ファイル(拡張 子.ini)を同じフォルダに(auditory_illusion.exeおよびpixel_color2.exeついてはそれぞれ実行時ライ ブラリlvanlys.dll、lvsound2.dllまたはlvinput.dllが格納されたdataフォルダも同じ場所に)置く。
RGB_setting.vi
色設定プログラムRGB_setting_XXX.exe(XXXは起動OSの別。情報学実験Ⅱ課題⑦「画像情報処 理」テキストp.5参照)を改定してソースを公開するもので、変更内容は次の通りである。LabVIEW7.1 実行ファイルではフロントパネルのレイアウトを変更している。
● プロパティノードにより制御器と表示器の機能を融合させることで、RGB値入力手段(スライドと 数値ボックス)切替の垂直トグルSWとRGB入力値の表示器を削除した。一方に入力された値は 同時に他方にも反映され、例えば数値ボックスの増減ボタンをクリックすると対応する色のスライ ドが上下する。
● 保存される色画像のサイズを1680×1050(WSXGA+)以外に一般的なデスクトップサイズをリン グで選択可能とし、ファイル名をrrggbb.xxxからrrggbb_s.xxxに変更した。ここでrrggbbは各色 の16進数値を連結したもの、xxxは拡張子(pngまたはbmp)、sは選択可能なサイズ識別16進数 字(0:XGA、1:WXGA 、2:FWXGA 、3:WXGA+、4:SXGA、5:SXGA+、6:WSXGA+、
7:FHD、8:WUXGA、9:QXGA、A:WQHD)である。
● 拡張子選択の水平トグルSWを垂直トグルSWに変更した。
● xyY入力において条件x+y≦1およびX+Y+Z≦300に従いx、yのスライドで値を制限し、”x+y over”
のLEDを削除した。【2017/11/01修正】
● プロパティノードにより色域表示ウィンドウとxy入力スライドの相対位置をドット単位で合せた。
【2017/11/01修正:p.2図2参照】
pixel_color.vi
2016/10/26 版の指定画素値表示参考プログラムpixel_color.vi にスクロールと Pixel_data_XXX.exe
(テキストp.3参照)同様の指定画素を中心とする拡大表示の機能を追加し、画面下部には2値化参考 プログラムthreshold_RGB.viの機能を含めたもので、変更内容は次の通りである。
● 画像サイズを256×256に限定せずスクロール可能とし、等倍表示部分(2Dピクチャ”dot by dot”)
が全体画像(長辺を256画素に合せた2Dピクチャ”scaled”)に占める位置が分る様に、またカーソ ル指定画素を中心とする拡大表示(256×256 の 2Dピクチャ”magnified”)で指定画素の境界を示 した。
● RGB_setting.viと同様、プロパティノード用いて制御器に表示器の機能を持たせることで、等倍表
示部分の原点はスクロールバー以外に数値ボックス(表示器を兼ねる)で、またカーソル指定画素 はスライド(値は等倍表示部分内の「相対」座標)以外に数値ボックスで画像の絶対座標を指定で きる。
● カーソルと境界(”scaled”では”dot by dot”の表示部分、”magnified”では指定画素)の色はスライド、
数値ボックスではなくカラーボックスをクリックして指定する。
● 閾値処理は、ボタン SW ”threshold inclusive” で閾値超(OFF のとき)と閾値以上、ボタン SW ”two-level” で元のレベルでの足切り表示(OFFのとき)と2値化(threshold_RGB.viでの処 理)、ボタンSW ”individual” で閾値を共通とするか(OFFのときスライドと数値ボックスが1個 ずつ表示される)色毎に独立(数値ボックスが3個表示される)とするかをそれぞれ切替える。
図1(pngファイルを同梱)は、RGB_setting.viのキャプチャ画像(RGB_setting.png:同梱)を開 いて色域ウィンドウの部分を等倍表示した例で、閾値を変化させてX+Y+Z一定の色域で各色の等レベ ル線が三角形の各辺に平行であることを確認できる。
図1 pixel_color.viの実行中のフロントパネルの例
256×256 の色域ウィンドウのサイズでは必ずしも設定色と同じ値の画素が存在するとは限らないが、
図2(pngファイルを同梱)は、RGB_setting.viの設定色と色域ウィンドウ上のスライド位置の色とが
一致することを確認できた例である。
図2 RGB_setting.viのxyスライドと色域ウィンドウの相対位置精度の確認
auditory_illusion.vi【2017/11/05追加】
2016/10/26版のパタン移動参考プログラム barber_pole_rev.vi(Rissetの連続無限音階再生付)に以 下の変更を加えたもの(LabVIEW7.1 にはブロックサイズを指定したサウンド出力関数が無いため LV71 版実行ファイルは無い)である。実行ファイルを開くには信号処理、音声入出力の実行時ライブ ラリlvanlys.dll、lvsound2.dllが含まれるdataフォルダを実行ファイルと同じ場所に置く。
● 水平トグルSW ”discrete / continuous”で回転ポールのパタン上昇下降と共に再生される無限音階 を離散的なShepard 音階(左側)と連続的なRisset音階(右側)から選択可能にした。
● 回転ポールのパタン生成部分に fade-in-fade-out(離散的音階では半音遷移時クリックの防止に必 要)の係数配列生成、次項の色サイクルの配列生成を加えてサブVI ”pattern.vi” として独立させた。
● 再生と同期してトグルSWの脇に ”discrete” では音名記号(A~G#)、”continuous” では色サイク ル(上昇音階のとき長波長の赤から短波長の青に順次変化しスペクトル中にはないマゼンタを経由 して赤に戻る。下降音階ではこの逆)を表示する。
● パタンの更新レートを90rpm相当に固定し、速度調節のスライド ”frame rate” を削除した。
● 部分音の周波数エンベロープの尖鋭度と中心周波数を変更可能にし(既定の尖鋭度と中心周波数は 情報学実験Ⅱ課題②「オシロスコープと信号処理」のMATLAB_sample.zip中のShepard_tone.m と同じ:http://www.ns.kogakuin.ac.jp/~ct13050/johogaku/MATLAB_sample.zip)、既定の設定で は不要であるLPF(遮断周波数20kHz)を追加した。【p.4図4参照】
● ブロックの標本数を441(10ms)から2205(50ms)に変更し波形(50ms)、スペクトル(周波数 分解能20Hz)、スペクトログラム(表示周波数範囲はスライド ”range (Hz)” で変更可能)を表示
し、2つのWhileループの実行時間が同程度になったことでループ間のデータ受渡しをノーティフ
ィケーションからプロパティノードに改めた。
● スペクトログラム強度計算の STFT(短時間フーリエ変換)の窓 幅はスライド ”length” で
LabVIEW既定の 64(時間分解能重視)からブロック標本数 2205(周波数分解能重視)の範囲で
変更できる。起動時の既定は256。【2017/11/07修正:p.4図4、5参照】
● ボタン ”link” がON(起動時既定)のときスペクトログラムのレンジをスペクトルのレンジに連動 させ、OFFのときのスペクトルのレンジを折返し雑音がNyquist周波数で折返される様子が確認で きる22050Hzとした。【2017/11/08修正】
● スペクトログラムの右(スクロールすると現れる)にスペクトログラムと同じ周波数レンジでリニ アスケールのスペクトル(左上の ”power spectrum” とはXY軸が逆になる)を対応させて配置し
(押しボタンSW ”flip” をONにすると左右が反転する。起動時の既定はON)、その上にピーク要 素の周波数と振幅を表示した。【2017/11/10追加】
p.4図3(pngファイルを同梱)にauditory_illusion.vi(実行ファイルは停止状態で開く)の既定設 定のフロントパネルを示す。
既定の周波数エンベロープでは、オクターブ移動中に生成される音階の部分音にNyquist周波数を超 えるものを生じてもエンベロープにより十分な減衰が得られ折返し雑音は問題とならないが、エンベロ ープの設定によっては折返し雑音がLPF無しでは無視できないレベルで残る。p.4図4(pngファイル を同梱)は周波数エンベロープの尖鋭度を最低、中心周波数を最高、LPFをOFFに設定し、連続音階 で部分音と折返し雑音が標本化周波数の1/3で「衝突」して干渉する様子を示す。時間と共に瞬時周波 数が変化し折返し雑音との位相差が変化するためスペクトログラムでは衝突の瞬間の前後に時間軸方 向の縞模様を生じる。図4左は窓幅64、図4右は窓幅256(起動時の既定)の設定で、STFTの窓幅に より時間分解能が異なることが分る。
p.4 図 5(png ファイルを同梱)は、既定のエンベロープで生成した連続無限音階の部分音のパワー
が大きい1000Hz以下のスペクトログラムを比較してSTFTの窓幅による時間分解能の違いをより明確
にしたものである。窓幅64(LabVIEWのSTFT関数がこれを既定としているのは時間分解能重視の考
えと思われる)の図5左では強度が波形グラフの時間変化に対応し、一方窓幅最大(ブロック長2205)
の図5右では時間分解能悪化の代償として周波数分解能は最高となり、スペクトルの周波数変化に対応 した強度グラフを示すことが分る。窓幅最大では、時間軸の中央以外では分析対象の標本数がブロック 長に満たないため両端で弱く中央で強い表示となり、図5右の時間軸方向の強度変化は実際の時間変化 を示すものではない。
図3 auditory_illusion.viの既定設定のフロントパネル
図4 高次の部分音がそのオクターブ上の部分音(折返されている)と干渉する様子
図5 既定のエンベロープで生成した連続無限音階のスペクトログラムの窓幅による違い
pixel_color2.vi【2017/11/10追加】
画像ファイルを開いて指定した画素の値を表示する pixel_color.vi に対し、pixel_color2.vi は以下の 様にデスクトップ上で指定した画素の情報を表示するものである (LabVIEW7.1 で作成のため LabVIEW8.0以降で廃止されたVIプロパティを含むプロパティノードはLabVIEW2013ソースのブロ ックダイアグラムで赤く表示されている)。実行ファイルを開く場合は、同名の設定ファイルの他に lvinput.dllが格納されたdataフォルダ(_LV71版と共通)も同じ場所に置く。
● 画素の座標は押しボタンSW ”numeric / mouse”(起動時の既定はOFF)で数値(起動時の既定)
または、直接マウスポインタで指定する。数値入力ではRGB_setting.viの RGB値指定と同様に、
スライドまたはボックスの一方に入力した値は同時に他方に反映される。データおよびスライドス ケールの最大値は実行中のデスクトップサイズで制限される。【図6参照】
● 画素値の表示形式はpixel_color.viと同じであるが、フロントパネルは座標指定手段により変え、マ ウスポインタ指定では必要最小限のサイズで表示している。【図7参照】
● 数値入力のとき、指定座標近傍の 65×65 画素を表示した。デスクトップの端付近では指定画素は 近傍画面の中心ではなく、位置を水平・垂直進行状況バーで示す。【LabVIEW7.1が対応しない.NET Framework 2.0 以降の CopyFromScreen メソッ ドを使用 しており、LabVIEW2013 版 のみ 2017/11/12修正】
図6(pngファイルを同梱)はデスクトップサイズの異なる2台のPCでの数値入力による実行例で、
スライドのスケールがデスクトップサイズに依存している。
図6 pixel_color2.viの数値入力実行例 WXGA(ボックス入力:左)、FHD(スライド入力:右)
図7(pngファイルを同梱)は、マウスポインタ入力による実行例で押しボタンのONの既定の表示
色が単純な緑ではなくG以外にRとBの成分を含んでいること、フロントパネルの背景がRGB各179
のガンマ2.2で46%のグレーであることが分る。
図7 pixel_color2.viのマウスポインタ入力の実行例 押しボタン点灯色(左)、パネル背景色(右)