IC Imaging Control (.NET C#/Visual Basic)

  • サンプルプログラムトップページ
  • デバイスのオープンとハンドリング
    • C# VB.NET カメラの映像を既存のアプリケーションに組み込む方法
    • C# VB.NET デバイスを開く
    • C# VB.NET デバイスの開閉
    • C# VB.NET ダイアログボックスを使用してデバイスを開く
    • C# VB.NET 複数のデバイスを開く
    • C# VB.NET デバイスのシリアル番号を読み取る
    • C# VB.NET ICImagingControlの標準プロパティダイアログの使用
    • C# VB.NET デバイスプロパティ設定の保存と復元
  • ライブ表示
    • C# VB.NET ライブ表示のリサイズ
    • C# VB.NET フルスクリーン表示
    • C# VB.NET 十字マークのオーバーレイ
    • C# VB.NET WFPでvideoWindowを使ったビデオ表示
  • フレームフィルタ
    • C# VB.NET 低輝度、高輝度ピクセルの強調 その1
    • C# VB.NET 低輝度、高輝度ピクセルの強調 その2
  • ライブ表示とマルチプロセス
    • C# VB.NET ライブ表示のみ
    • C# VB.NET 静止画保存
    • C# VB.NET 任意のタイミングで画像処理と静止画保存を同時に処理
    • C# VB.NET 録画しながら任意のタイミングで静止画保存
    • C# VB.NET 全フレームリアルタイム画像処理しながら
             NG判定を静止画保存
    • C# VB.NET 全フレームリアルタイム画像処理しながら
             NG判定を静止画保存、同時に録画
  • イメージの取得
    • C# VB.NET イメージデータの取得
    • C# VB.NET 静止画ファイル保存(BMP)
    • C# VB.NET 静止画ファイル保存(JPEG)
    • C# VB.NET 静止画ファイルの連番保存
    • C# VB.NET カメラ画像保存&FTPで任意のサーバーに転送する
    • C# VB.NET リングバッファを使用したイメージシーケンスの取得と再生
    • C# VB.NET 静止画とAVI動画保存
    • C# VB.NET メモリーレコーディング
             (高速カメラで撮影した現象をRAMメモリー領域に保存)
    • C# VB.NET ソフトウェアトリガーで画像を表示・保存
    • C# VB.NET 録画時間を指定したAVIファイル保存
    • C# VB.NET 外部トリガーで録画の開始
    • C# VB.NET 取得したイメージの輝度値をCSV形式で出力する
             (16bit対応)
  • 画像処理
    • C# VB.NET イメージデータへのアクセス
    • C# VB.NET コントラストの強調 - Part 1
    • C# VB.NET コントラストの強調 - Part 2
    • C# VB.NET コントラストの強調 - Part 3
    • C# VB.NET レーザーポインタの位置を特定する
    • C# VB.NET OpenCVの画像処理
             (アナログタコメーターのデジタル化)
    • C# VB.NET AIモデルを使ったリアルタイム処理
  • Version 3.5サンプル
    • C# VB.NET 関心領域の画像更新
      Advanced Image Processing
    • C# VB.NET 2値化
      Binarization
    • C# VB.NET 明るさの調整
      BrightnessProperty
    • C# VB.NET 動画保存(MediaStreamSink)
      Capturing a Video File
    • C# VB.NET 動画保存(AviStartCapture)
      Capturing an AVI File
    • C# VB.NET 共通ファイル
      Common
    • C# VB.NET オーバーレイの作成
      Creating an Overlay
    • C# VB.NET デモアプリ
      demoapp
    • C# VB.NET VCDプロパティ:GPIOプロパティ編
      DigitalIO
    • C# VB.NET コールバック関数を使ってバッファを表示させる
      Display Buffer
    • C# VB.NET フィルターの適用
      Filter Inspector
    • C# VB.NET 静止画をキャプチャし保存する
      Grabbing an Image
    • C# VB.NET イメージバッファの輝度値を読み込み、輝度反転処理を施す
      Image Processing
    • C# VB.NET VCDプロパティ:全プロパティ一覧を表示する編
      List VCDProperties
    • C# VB.NET デバイス設定ダイアログの作成
      Making Device Settings
    • C# VB.NET イメージバッファにアクセスする
      Pixelformat
    • C# VB.NET コーデックのプロパティを保存する
      Saving Codec Properties
    • C# VB.NET スクロールとズーム
      croll And Zoom
    • C# VB.NET VCDプロパティ:露光とゲイン編
      StandardProperties
    • C# VB.NET VCDプロパティ:ストロボアウト編
      Strobe
    • C# VB.NET VCDプロパティ:
             プロパティダイアログ画面のカスタマイズ編
      VCD Property Page
    • C# VB.NET VCDプロパティ:明るさとホワイトバランス編
      VCD Simple Property
    • C# VB.NET VCDプロパティ:オートフォーカス編
    • C# VB.NET デバイスの再接続方法とフレーム落ちの確認
  • リンク集

    ICImagingControl WEB APIリファレンスマニュアル/サンプルプログラム

    :日本語対応済み :日本語化準備中
    開発言語 APIリファレンスマニュアル サンプルプログラム
    C 4.0
    ()
    - - 4.0
    ()
    - -
    C++ 4.0
    ()
    3.5
    ()
    3.4
    ()
    4.0
    ()
    3.5 3.4
    ()
    C#/VB.NET 4.0
    ()
    3.5
    ()
    3.4
    ()
    4.0
    ()
    3.5
    ()
    3.4
    ()
    Python 4.0
    ()
    3.5 3.4
    ()
    4.0
    ()
    3.5 3.4
    ()

フィルターの適用

概要

このサンプルはライブ画像に画像処理のフィルタの適用を行っております。
ここではフレームフィルタモジュールである「stdfilters.ftf」と「Lenscorrection_32.ftf」を読み込み、それらのモジュールを適用することで画像をリアルタイムでライブ画像に適用しています。
なお、使用するフレームフィルタモジュールである「stdfilters.ftf」と「Lenscorrection_32.ftf」には下記のフィルタが含まれています。

stdfilters.ftf
DeBayer ディベイヤ処理:Raw画像データをRGBに変換します。
DeNoise ディノイズ処理:複数の画像データの平均化によるノイズ除去。
ROI 関心領域(Region of Interest)指定しての画素切り出し。
Rotate Flip 画像を回転、反転させる。
Bayer to Y800 BY8 を Y800 に変換。
Lenscorrection_32.ftf(Lenscorrection_64.ftf)
ケラレ 画像の周辺減光を補正します。
射影ゆがみ レンズ収差を補正します。

サンプルプログラム

Software IC Imaging Control 3.5, Visual Studio™ 2019
サンプル(C#) filter_inspector_cs_3.5.zip
サンプル(VB.NET) filter_inspector_vb_3.5.zip

フレームフィルタモジュール

ケラレ・射影歪み補正
モジュール
lenscorrection_ic3.5.zip

上記のzipファイルを解凍し、下記のように各ファイルをFilter Inspector.exeと同じフォルダに置いてください。
※「stdfilters.ftf」は標準でIC Imaging Control3.5にインストールされていますので新たに「stdfilters.ftf」をダウンロードする必要はありません。

実行結果

Visual Studioのプログラム上ではすでにボタンの設置や関数は定義済ですので、IC Imaging Contorl3.5をインストールされていれば、実行ボタンだけですぐにデバッグで動作確認することができます。
画面にあるそれぞれのボタンなどのコントローラの機能は下記の通りです。

[Device]ボタン デバイスダイアログの表示します。
[Properties]ボタン デバイスプロパティダイアログの表示します。
[Start Live]ボタン ライブストリームを停止します。
[Stop Live]ボタン ライブストリームを開始します。
[Frame Filter Modules]リストボックス フレームフィルタモジュール「stdfilters.ftf」を読み込みます。
[Frame Fileters]リストボックス フレームフィルタモジュール「stdfilters.ftf」内にあるフィルタを表示します。
"groupBox1"グループ内の[Dialog]ボタン [Frame Fileters]リストボックスで選択したフィルタの項目を設定する
ダイアログを呼び出します。
"groupBox1"グループ内の[Remove]ボタン [Frame Fileters]リストボックスで選択したフィルタを解除します。

初期設定時

 private void Form1_Load(object sender, EventArgs e)
{
    //デバイスの選択
    if ( !icImagingControl1.LoadShowSaveDeviceState("lastSelectedDeviceState.xml") )
    {
        MessageBox.Show("No device was selected.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
        this.Close();
        return;
    }
    // カメラの設定した解像度に合わせて表示画面を変更
    icImagingControl1.LiveDisplayDefault = false;
    icImagingControl1.LiveDisplaySize = icImagingControl1.Size;


    // すべてのオーバーレイを無効にして、画像ストリームのカラー形式に影響を与えないようにします。
    icImagingControl1.OverlayBitmapPosition = TIS.Imaging.PathPositions.None;

    // ライブストリーミング開始
    icImagingControl1.LiveStart();

    // コレクションを利用して、フレームフィルタモジュール「stdfilters.ftf」へのフルパスを保存します。
    modulePathCollection = new System.Collections.Specialized.StringCollection();

    // - フィルターのパスがモジュールパスコレクションに既に存在するかどうかを確認
    // - ない場合は、モジュール名を"Frame Filter Modules"リスト ボックスに追加
    foreach (TIS.Imaging.FrameFilterInfo ffi in TIS.Imaging.FrameFilterInfo.FrameFilterInfos)
    {
        if (modulePathCollection.IndexOf(ffi.ModulePath) < 0)
        {
            lstFrameFilterModules.Items.Add(ffi.ModuleName);
            modulePathCollection.Add(ffi.ModulePath);
        }
    }

}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    If Not IcImagingControl1.DeviceValid Then
        IcImagingControl1.ShowDeviceSettingsDialog()
        If Not IcImagingControl1.DeviceValid Then
            Close()
            Return
        End If
    End If


    'カメラの設定した解像度に合わせて表示画面を変更
    IcImagingControl1.LiveDisplayDefault = False
    IcImagingControl1.LiveDisplaySize = IcImagingControl1.Size

    ' すべてのオーバーレイを無効にして、画像ストリームのカラー形式に影響を与えないようにします。
    IcImagingControl1.OverlayBitmapPosition = TIS.Imaging.PathPositions.None

    ' ライブストリーミング開始
    IcImagingControl1.LiveStart()

    ' コレクションを利用して、フレームフィルタモジュール「stdfilters.ftf」へのフルパスを保存します。
    modulePathCollection = New System.Collections.Specialized.StringCollection


    ' - フィルターのパスがモジュールパスコレクションに既に存在するかどうかを確認
    ' - ない場合は、モジュール名を"Frame Filter Modules"リスト ボックスに追加
    For Each ffi As TIS.Imaging.FrameFilterInfo In IcImagingControl1.FrameFilterInfos
        If modulePathCollection.IndexOf(ffi.ModulePath) < 0 Then
            lstFrameFilterModules.Items.Add(ffi.ModuleName)
            modulePathCollection.Add(ffi.ModulePath)
        End If
    Next
End Sub

フォームロードするタイミングの処理内容です。
フィルタを適用するためには、ライブストリーミング開始前にカメラから送られてくる画像に影響がないようにOverlayBitmapPositionプロパティでオーバーレイを無効化する必要があります。

[Frame Filter Modules]リストボックス選択時のイベントハンドラー

private void lstFrameFilterModules_SelectedIndexChanged(object sender, EventArgs e)
{

    // ModulePaths コレクションから選択したモジュールへのフルパスを取得します。
    string selectedModulePath = modulePathCollection[lstFrameFilterModules.SelectedIndex];

    lstFrameFilters.Items.Clear();
    foreach (TIS.Imaging.FrameFilterInfo ffi in TIS.Imaging.FrameFilterInfo.FrameFilterInfos)
    {
        if (ffi.ModulePath == selectedModulePath)
        {
            lstFrameFilters.Items.Add(ffi);
        }
    }

}
Private Sub lstFrameFilterModules_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFrameFilterModules.SelectedIndexChanged
    '  ModulePaths コレクションから選択したモジュールへのフルパスを取得します。
    If lstFrameFilterModules.SelectedIndex >= 0 Then
        Dim selectedModulePath As String = modulePathCollection(lstFrameFilterModules.SelectedIndex)

        lstFrameFilters.Items.Clear()
        For Each ffi As TIS.Imaging.FrameFilterInfo In IcImagingControl1.FrameFilterInfos
            If ffi.ModulePath = selectedModulePath Then
                lstFrameFilters.Items.Add(ffi)
            End If
        Next
    End If
End Sub

リストボックスに表示されたフレームフィルタモジュール「stdfilters.ftf」を選択すると下記のロジックが実行されます。
フレームフィルタモジュール「stdfilters.ftf」内にあるフィルターが[Frame Fileters]リストボックスに表示しており、ICImagingControl.FrameFilterInfosプロパティよりFrameFilterInfoオブジェクトを含むリストを返します。これによって、FrameFilterInfoオブジェクトはフレームフィルタモジュール「stdfilters.ftf」よりロードして利用できるフレームフィルタを表示します。

[Frame Fileters]リストボックス選択時のイベントハンドラー

private void lstFrameFilters_SelectedIndexChanged(object sender, EventArgs e)
{
    try
    {

        // 選択した FrameFilterInfo オブジェクトを取得
        TIS.Imaging.FrameFilterInfo ffi = (TIS.Imaging.FrameFilterInfo)lstFrameFilters.SelectedItem;

        if (ffi != null)
        {
            // FrameFilterをインスタンス化
            TIS.Imaging.FrameFilter newFrameFilter = TIS.Imaging.FrameFilter.Create(ffi);

            // ライブストリーミング開始されていれば停止
            bool wasLive = icImagingControl1.LiveVideoRunning;
            if (wasLive)
            {
                icImagingControl1.LiveStop();
            }
            // フレームフィルターフィルタをセット

            // フレームフィルターを追加
            icImagingControl1.DeviceFrameFilters.Clear();
            icImagingControl1.DeviceFrameFilters.Add(newFrameFilter);

            // ライブストリーミングしていれば再度開始
            if (wasLive)
            {
                icImagingControl1.LiveStart();
            }
            // >>
            lblSelectedFilter.Text = newFrameFilter.Name;
            btnDialog.Enabled = newFrameFilter.HasDialog;
            btnRemove.Enabled = true;
        }

    }
    catch (Exception ex)
    {
        System.Diagnostics.Trace.WriteLine(ex.Message);
    }
}
Private Sub lstFrameFilters_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFrameFilters.SelectedIndexChanged
    ' 選択した FrameFilterInfo オブジェクトを取得
    Dim ffi As TIS.Imaging.FrameFilterInfo = CType(lstFrameFilters.SelectedItem, TIS.Imaging.FrameFilterInfo)

    If Not ffi Is Nothing Then
        ' FrameFilterをインスタンス化
        Dim newFrameFilter As TIS.Imaging.FrameFilter = IcImagingControl1.FrameFilterCreate(ffi)

        ' ライブストリーミング開始されていれば停止
        Dim wasLive As Boolean = IcImagingControl1.LiveVideoRunning
        If wasLive Then
            IcImagingControl1.LiveStop()
        End If

        ' フレームフィルターフィルタをセット
        IcImagingControl1.DeviceFrameFilters.Clear()
        IcImagingControl1.DeviceFrameFilters.Add(newFrameFilter)

        ' ライブストリーミングしていれば再度開始
        If wasLive Then
            IcImagingControl1.LiveStart()
        End If
                    lblSelectedFilter.Text = newFrameFilter.Name
        btnDialog.Enabled = newFrameFilter.HasDialog
        btnRemove.Enabled = True
    End If
End Sub

[Frame Filter Modules]リストボックスよりフィルタモジュール「stdfilters.ftf」を選択すると、下記のイベントハンドラが呼び出され、[Frame Fileters]リストボックス内にそのモジュールが持っているフィルタ名が入ります。フィルタリストよりフレームフィルタをクリックすると、ListBox.ItemDataによって選択された項目の項目データが読みだされます。すでにフィルタのインデックスをフィルタリストに格納しているので、この番号を使ってICImagingControl.FrameFilterInfosのFrameFilterInfoを選択することができます。

選択フレームフィルタをセットするためにはライブモードを停止する必要がありますので、一度ライブストリームを停止します。
その後、DeviceFrameFiltersプロパティに新しいフレームフィルタを追加したのちにダイアログを呼び出します。

下記のAPIリファレンスマニュアルにもその他関数などの説明があります。

プログラマーズガイド:フィルタインスペクタ
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

▲ このページの先頭に戻る

Copyright © ARGO Corporation. All Rights Reserved.