コントラストの強調 - Part 1
ICImagingControlを使ってどのようにイメージデータにアクセスするかを示しています。
Software | IC Imaging Control 3.4, Visual Studio™ 2019 |
---|---|
サンプル(C#) | contrast_enhancement1_cs_3.4.zip |
サンプル(VB.NET) | contrast_enhancement1_vb_3.4.zip |
Frame Filter(C++ project) | contrast_enhancement_vc7_framefilter_3.4.zip |
このサンプルでは、"Contrast Enhancement"フレームフィルタを使用します。
このフィルタはここでダウンロードできるサンプルに含んでおり、そのファイル名はContrastEnhancement.FTF です。
"Contrast Enhancement"はイメージデータのヒストグラムを広げコントラストを強調する画像処理を行います。ピクセル輝度値は0~255の間で上限と下限を設定する事ができます。
これら上限・下限の設定はこのフレームフィルタのパラメータとして設定する事ができます。ここで設定した下限値よりも暗いピクセル輝度は0とされ、また上限値より明るいピクセル輝度は255とされます。また、Enabledチェックボックスにより、このフィルタのOn/Offが可能です。
ここで利用しているフレームフィルタのプロジェクトもダウンロードが可能ですが、ここで示しているサンプルはあくまでもこのフィルタを部品として使用しているため、使用者はその内容を理解する必要がありません。
まずTIS.Imaging.FrameFilter タイプの変数 filterを Form1の中で宣言する必要があります。
この変数にはフレームフィルタとその接続が含まれます。
private TIS.Imaging.FrameFilter filter;
Dim filter As TIS.Imaging.FrameFilter
プログラム開始時、icImagingControl1.ShowDeviceSettingsDialogを使用してデバイス選択ダイアログを表示します。
デバイスが正しく選択されたら、次にIcImagingControl1.FrameFilterCreateをコールして"ContrastEnhancement"をロードします。例外エラーをハンドリングするため、フレームフィルタのロードは try..catchブロックでラップしてください。
フレームフィルタがロードされたら ICImagingControlのデバイスパスに挿入して、パラメータ "Enabled"をtrueにセットします。icImagingControl1.LiveStartをコールしてライブストリームを開始します。
private void Form1_Load(object sender, System.EventArgs e)
{
icImagingControl1.ShowDeviceSettingsDialog();
if (!icImagingControl1.DeviceValid)
return;
try
{
filter = icImagingControl1.FrameFilterCreate("ContrastEnhancement", "");
// ICのデバイスパスにフレームフィルタを挿入します
icImagingControl1.DeviceFrameFilters.Add(filter);
// フィルタをEnableにします
cbEnable.Checked = true;
// Enableチェックボックスを初期化します
filter.SetBoolParameter("Enable", cbEnable.Checked);
icImagingControl1.LiveStart();
}
catch(Exception ex)
{
MessageBox.Show("Failed to load the frame filter!");
}
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
IcImagingControl1.ShowDeviceSettingsDialog()
If Not IcImagingControl1.DeviceValid Then
'Unload(Me)
Exit Sub
End If
Try
filter = IcImagingControl1.FrameFilterCreate("ContrastEnhancement", "")
' ICのデバイスパスにフレームフィルタを挿入します
IcImagingControl1.DeviceFrameFilters.Add(filter)
' フィルタをEnableにします
cbEnable.Checked = True
' Enableチェックボックスを初期化します
filter.SetBoolParameter("Enable", cbEnable.Checked)
IcImagingControl1.LiveStart()
Catch ex As System.Exception
MessageBox.Show("Failed to load the frame filter!")
End Try
End Sub
フィルタはチェックボックス cbEnable でスイッチできます。
private void cbEnable_CheckedChanged(object sender, System.EventArgs e)
{
filter.BeginParameterTransfer();
filter.SetBoolParameter("Enable", cbEnable.Checked);
filter.EndParameterTransfer();
}
Private Sub cbEnable_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnable.CheckedChanged
filter.BeginParameterTransfer()
filter.SetBoolParameter("Enable", cbEnable.Checked)
filter.EndParameterTransfer()
End Sub
メソッド filter.ShowDialogでこのフィルタがもつ設定ダイアログを表示でき、上限値、下限値の設定ができます。ダイアログが閉じられると、チェックボックス cbEnable はフィルタパラメータのEnableチェックボックスと同期されます。
private void btParameter_Click(object sender, System.EventArgs e)
{
filter.ShowDialog();
if (filter.GetBoolParameter("Enable"))
cbEnable.Checked = true;
else
cbEnable.Checked = false;
}
Private Sub btParameter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btParameter.Click
filter.ShowDialog()
If filter.GetBoolParameter("Enable") Then
cbEnable.Checked = True
Else
cbEnable.Checked = False
End If
End Sub