robinson フィルタ

Namespace: FVIL.Filter
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
[SerializableAttribute]
public class CFviRobinson : CFviFilter
Visual Basic
<SerializableAttribute>
Public Class CFviRobinson
	Inherits CFviFilter

Remarks

3x3 のロビンソン微分フィルタを入力画像に適用し、出力画像に結果を出力します。

パラメータ CalcMode の挙動については RobinsonCalcMode の説明をご参照ください。

パラメータ Denom は、 CFviFilterKernelDenom と同等の意味です。


要求する入出力画像数:
項目定数
入力画像1SrcImageCount フィールド
出力画像1DstImageCount フィールド

処理対象画像の条件:

処理対象の画像は下記の条件を満たしている必要が有ります。

  • 入出力画像の処理範囲サイズが一致している事
  • 入出力画像のチャネル数が一致している事
  • 入出力画像の画像種別が一致している事
  • 処理可能な画像種別

初期値と範囲:
プロパティ初期値範囲説明
CalcModeRobinsonCalcMode.Deg0RobinsonCalcMode に定義された定数計算モード
Denom1.00 でない値フィルタ係数分母
BorderModeBorderMode.NoneBorderMode に定義された定数ボーダー処理モード
BorderValue0(任意) ボーダー値
(BorderModeValue の場合に使用します。)

ボーダー処理について

画像の周囲1画素については、3x3 のカーネルがはみ出すため、正しくは値を求める事が出来ません。 しかし、ボーダー処理の設定を行い入力画像を拡張することで、 擬似的に周囲1画素の結果値も出力できるようになっています。
これは、 及び BorderValue により制御されます。
BorderModeNone を指定した場合は、 この拡張処理を行わず、 出力画像の周囲1画素には値を書き込みません(元の値が保持されます)。
BorderModeNone 以外を指定した場合は、 処理前に ボーダー処理を行い、入力画像を縁の分だけ拡張した後にフィルタ処理を行います。 このため、周囲1画素の値も擬似的に計算され、結果値が格納されます。
ボーダー拡張の詳細な仕様は BorderMode を参照して下さい。


処理対象画像の有効性検査と有効化:

  • 入力画像の有効性検査
    このクラスの CheckValidity(CFviImage) 関数で入力画像の有効性を検査できます。 この関数はスタティックメンバですので、このクラスのインスタンスを生成せずに直接呼び出す事ができます。
  • 入出力画像の整合性検査
    このクラスの IsValid()()()() メソッドで入出力画像の整合性を検査できます。 このメソッドが false を返す場合は、前述の処理対象画像の条件を満たしていない為、 実行できない事を意味します。
  • 出力画像の有効化
    このクラスの Validate(Int32) メソッドで出力画像を有効化する事ができます。 このメソッドを実行すると、出力画像の領域サイズ、画像種別、チャネル数を適切なものに設定します。 領域サイズは、入力画像の処理範囲サイズに合わせられます。


関連する FIE 関数:

fnFIE_robinson

Examples

ソースコード:
C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using fvalgcli;    // FvPluginXXXX attribute requires fvalgcli

namespace User.SampleCode
{
    public partial class Filter
    {
        // ============================================================
        /// <summary>
        /// robinson フィルタ.
        /// </summary>
        [FvPluginExecute]
        public void Robinson()
        {
            // 1) インスタンスの準備.
            FVIL.Filter.CFviRobinson parser = new FVIL.Filter.CFviRobinson();
            FVIL.Data.CFviImage src = new FVIL.Data.CFviImage();
            FVIL.Data.CFviImage dst = new FVIL.Data.CFviImage();

            // 2) 処理対象画像の取り込み.
            FVIL.File.Function.LoadImageFile(Defs.TestImageDir + "/book3_UC8.png", src, FVIL.PixelMode.Unpacking);

            // 3) 処理対象画像の有効性検査.
            int valid = FVIL.Filter.CFviRobinson.CheckValidity(src);
            if( valid != FVIL.ErrorCode._SUCCESS )
                throw new FVIL.CFviException(valid, "FVIL.Filter.CFviRobinson.CheckValidity");

            // 4) 画像処理準備 (共通)
            parser.SrcImages[0] = src;
            parser.DstImages[0] = dst;
            if (!parser.IsValid())    // 有効性検査.
                parser.Validate();    // 有効化.

            // 5) パラメータ設定 (固有)
            parser.CalcMode = FVIL.Filter.RobinsonCalcMode.Deg0;
            parser.Denom = 1.0;
            parser.BorderMode = FVIL.BorderMode.None;
            parser.BorderValue = 0;

            // 6) 画像処理実行.
            parser.Execute();

            // E) 処理結果画像の保存.
            FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Filter.Robinson.png", dst);
        }
    }
}


Visual Basic Copy imageCopy
Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports fvalgcli
' FvPluginXXXX attribute requires fvalgcli
Namespace SampleCode
    Public Partial Class Filter
        ' ============================================================
        ''' <summary>
        ''' robinson フィルタ.
        ''' </summary>
        <FvPluginExecute> _
        Public Sub Robinson()
            ' 1) インスタンスの準備.
            Dim parser As New FVIL.Filter.CFviRobinson()
            Dim src As New FVIL.Data.CFviImage()
            Dim dst As New FVIL.Data.CFviImage()

            ' 2) 処理対象画像の取り込み.
            FVIL.File.[Function].LoadImageFile(Defs.TestImageDir & "/book3_UC8.png", src, FVIL.PixelMode.Unpacking)

            ' 3) 処理対象画像の有効性検査.
            Dim valid As Integer = FVIL.Filter.CFviRobinson.CheckValidity(src)
            If valid <> FVIL.ErrorCode._SUCCESS Then
                Throw New FVIL.CFviException(valid, "FVIL.Filter.CFviRobinson.CheckValidity")
            End If

            ' 4) 画像処理準備 (共通)
            parser.SrcImages(0) = src
            parser.DstImages(0) = dst
            If Not parser.IsValid() Then
                ' 有効性検査.
                parser.Validate()
            End If
            ' 有効化.
            ' 5) パラメータ設定 (固有)
            parser.CalcMode = FVIL.Filter.RobinsonCalcMode.Deg0
            parser.Denom = 1.0
            parser.BorderMode = FVIL.BorderMode.None
            parser.BorderValue = 0

            ' 6) 画像処理実行.
            parser.Execute()

            ' E) 処理結果画像の保存.
            FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Filter.Robinson.png", dst)
        End Sub
    End Class
End Namespace

Inheritance Hierarchy

System..::..Object
FVIL..::..CFviObject
FVIL..::..CFviImageParser
FVIL.Filter..::..CFviFilter
FVIL.Filter..::..CFviRobinson

See Also