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
    ()

コントラストの強調 - Part 3

概要

プログラムに直接コントラストの強調処理を埋め込む方法を示しています。

サンプルプログラム

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

サンプルツールの外観

Part1, Part2では、画像処理に外部のフレームフィルタをロードして使用していましたが、ここではそのフレームフィルタを直接埋め込む方法を示しています。

フレームフィルタはクラスInternalContrastEnhancementに封じ込められており、そのモジュール InternalContrastEnhancement.csです。

private bool m_bEnabled = false;
private long m_lowerBound = 50;  
private long m_upperBound = 250; 

このフレームフィルタのクラスは3つのメンバーから成ります。これらはフィルタの振る舞いを定めます。

public void setEnable( bool bEnable )
{
    m_bEnabled = bEnable;
}

プログラムはフレームフィルタクラスが提供する"get", "set"メソッドによりそのパラメータを変更する事ができます。

以下のコードではパラメータm_bEnabledを変更する方法を示しています。

public override bool Transform(IFrame src, IFrame dest)
{
    byte [] LUT = new Byte [256];
    unsafe
    {
        if( dest.Ptr == null ) return false;
        BeginParameterTransfer();
        bool enabled = m_bEnabled;
        long upperBound = m_upperBound;
        long lowerBound = m_lowerBound;
        EndParameterTransfer();

        for( int i = 0; i < 256; ++i )
        {
            if( i <= lowerBound )
            {
                LUT[i] = 0;
            }
            else if( i >= upperBound )
            {
                LUT[i] = 255;
            }
            else
            {
                LUT[i] = System.Convert.ToByte( System.Convert.ToDouble(i - lowerBound) / 
                                System.Convert.ToDouble(upperBound - lowerBound) * 256.0);
            }
        }

        byte* pIn = src.Ptr;
        byte* pOut = dest.Ptr;


        if( enabled )
        {
            int bufferSize = src.FrameType.BufferSize;
            byte* pSource = src.Ptr;
            byte* pTarget = dest.Ptr;
            byte *pEnd =  &pSource[bufferSize];

            while( pSource < pEnd )
            {
                *pTarget = LUT[*pSource];
                pSource++;
                pTarget++;
            }
        }
        else
        {
            int bufferSize = src.FrameType.BufferSize;
            while( bufferSize-- > 0 )
            {
                *pOut++ = *pIn++;
            }
        }
    }

    return true;
}

コントラストの強調はメソッドTransformにより実行されます。まず、すべてのメンバーをローカルの変数にコピーします。これにより、このメソッドが実行されている間にメンバーの値が変更されても影響しません。次に、LUT(look up table)を作成します。このLUTはコントラスト調整のための輝度値修正のマップとして使用されます。

全てのピクセルが上で作成されたLUTに従って修正された値に置き換えられます。

private void Form1_Load(object sender, System.EventArgs e)
{
    icImagingControl1.ShowDeviceSettingsDialog();
    if( !icImagingControl1.DeviceValid )
    {
        Close();
        return;
    }
    // Create an instance of the frame filter class. 
    MyInternalContrastEnhancement = new InternalContrastEnhancement();
    // Create an abstract wrapper for the frame filter class.
    TIS.Imaging.FrameFilter abstractFilter = icImagingControl1.FrameFilterCreate( MyInternalContrastEnhancement );
    // Insert the filter in the device path of the image stream.
    icImagingControl1.DeviceFrameFilters.Add( abstractFilter );
    // Enable the image processing in the filter.
    MyInternalContrastEnhancement.setEnable(true);
    InitControls();
    UpdateControls();
    icImagingControl1.LiveStart();
}

プログラムのメインクラスで、ICImagingControlのデバイスパスにフィルタを生成する必要があります。その後、画像処理が開始できるようになります。

private void tbLowerBound_Scroll(object sender, System.EventArgs e)
{
    MyInternalContrastEnhancement.setLowerBound( tbLowerBound.Value );
    UpdateControls();
}

メインフォームには2つのメソッドがあります。ユーザーインターフェースの初期化と更新です。メソッド InitControlsは2つのスクロールバーtbLowerBoundとtbUpperBoundを初期化します。メソッド UpdateControlsはフィルタ内部の設定値とフォームの設定を同期します。このサンプルではフィルタの3つのプロパティメンバーを埋め込む必要があります。ここではスクロールバーtbLowerBoundのイベントハンドラーについてだけ表記しています。

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

Copyright © ARGO Corporation. All Rights Reserved.