画像絶対値演算クラス

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

Syntax

C#
[SerializableAttribute]
public class CFviAbsOperation : CFviOperation
Visual Basic
<SerializableAttribute>
Public Class CFviAbsOperation
	Inherits CFviOperation

Remarks

マルチコア対応:

このクラスの Execute()()()() メソッドは、 SetParallelNum(Int32) によって設定されたスレッド数に従って、 自動的に処理を並列化します。 マルチコア環境においては、処理を並列化する事によりレーテンシを短縮できる場合があります。 詳しくは、 SetParallelNum(Int32) の説明をご参照ください。


画像データの絶対値演算を行うクラスです。

各画素の濃度値の絶対値を求め、出力画像に出力します。

式は次のようになります。

出力画像 = |入力画像|


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

処理対象画像の条件:

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


下記の画像種別の場合は、入力画像の濃度値が必ず正である為、 実行結果は Copy(CFviImage, UInt32) 関数を使用した場合と同じになります。

※) 本機能はインプレース処理が可能です。入出力に同一の画像オブジェクトを指定することができます。

Examples

差分処理が行われた画像の絶対値を求める処理です。
下図右側は、画素値の符号を視覚的に確認する為に、 正の値をグレーで表示し、負の値をマゼンタで表示しています。

srcdst

ソースコード:
C# Copy imageCopy
//    $Revision: 1.3 $

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using fvalgcli;    // FvPluginXXXX attribute requires fvalgcli

namespace User.SampleCode
{
    public partial class Operation
    {
        // ============================================================
        /// <summary>
        /// 画像絶対値演算クラス.
        /// </summary>
        [FvPluginExecute]
        public void AbsOperation()
        {
            // 1) インスタンスの準備.
            FVIL.Operation.CFviAbsOperation parser = new FVIL.Operation.CFviAbsOperation();
            FVIL.Data.CFviImage src = null;
            FVIL.Data.CFviImage dst = new FVIL.Data.CFviImage();

            // 2) 処理対象画像の取り込み.
            src = make_image_s16();

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

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

            // 5) パラメータ設定 (固有)

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

            // E) 処理結果画像の保存.

            // --- 画素値の可視化 (S16 -> RGB32)
            //     −:magenta / +: gray
            FVIL.Data.CFviImage temp0 = new FVIL.Data.CFviImage(src.HorzSize, src.VertSize, FVIL.ImageType.RGB32, 1);
            src.Depth = src.CalcDepth();
            src.SignedToRGB(0, temp0, 1);
            FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Operation.AbsOperation-src.png", temp0);

            // --- 画素値のコピー (S16 -> UC8)
            FVIL.Data.CFviImage temp1 = new FVIL.Data.CFviImage(dst.HorzSize, dst.VertSize, FVIL.ImageType.UC8, 1);
            temp1.Copy( dst, 1 );
            FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Operation.AbsOperation-dst.png", temp1);
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports fvalgcli
' FvPluginXXXX attribute requires fvalgcli
Namespace SampleCode
    Public Partial Class Operation
        ' ============================================================
        ''' <summary>
        ''' 画像絶対値演算クラス.
        ''' </summary>
        <FvPluginExecute> _
        Public Sub AbsOperation()
            ' 1) インスタンスの準備.
            Dim parser As New FVIL.Operation.CFviAbsOperation()
            Dim src As FVIL.Data.CFviImage = Nothing
            Dim dst As New FVIL.Data.CFviImage()

            ' 2) 処理対象画像の取り込み.
            src = make_image_s16()

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

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

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

            ' E) 処理結果画像の保存.

            ' --- 画素値の可視化 (S16 -> RGB32)
            '     −:magenta / +: gray
            Dim temp0 As New FVIL.Data.CFviImage(src.HorzSize, src.VertSize, FVIL.ImageType.RGB32, 1)
            src.Depth = src.CalcDepth()
            src.SignedToRGB(0, temp0, 1)
            FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Operation.AbsOperation-src.png", temp0)

            ' --- 画素値のコピー (S16 -> UC8)
            Dim temp1 As New FVIL.Data.CFviImage(dst.HorzSize, dst.VertSize, FVIL.ImageType.UC8, 1)
            temp1.Copy(dst, 1)
            FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Operation.AbsOperation-dst.png", temp1)
        End Sub
    End Class
End Namespace


テスト画像の作成:
上記で使用するテスト画像を作成するコードです。
C# Copy imageCopy
//    $Revision: 1.2 $

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

namespace User.SampleCode
{
    public partial class Operation
    {
        // ============================================================
        /// <summary>
        /// 画像絶対値演算クラスのテスト画像.
        /// </summary>
        internal FVIL.Data.CFviImage make_image_s16()
        {
            // 1) ワーク画像の取り込み.
            FVIL.Data.CFviImage work0 = new FVIL.Data.CFviImage();
            FVIL.Data.CFviImage work1 = new FVIL.Data.CFviImage();
            FVIL.File.Function.LoadImageFile(Defs.TestImageDir + "/logic_UC8_3.png", work0, FVIL.PixelMode.Unpacking);
            FVIL.File.Function.LoadImageFile(Defs.TestImageDir + "/logic_UC8_1.png", work1, FVIL.PixelMode.Unpacking);

            int horz = work0.HorzSize;
            int vert = work0.VertSize;

            // 2) インスタンスの準備.
            FVIL.Data.CFviImage src1 = new FVIL.Data.CFviImage(horz, vert, FVIL.ImageType.S16, 1);
            FVIL.Data.CFviImage src2 = new FVIL.Data.CFviImage(horz, vert, FVIL.ImageType.S16, 1);

            // 3) 画素値のコピー (UC8 -> S16)
            for (int y = 0; y < vert; y++)
            {
                for (int x = 0; x < horz; x++)
                {
                    src1.SetPixel(x, y, work0.GetPixel(x, y));
                    src2.SetPixel(x, y, work1.GetPixel(x, y));
                }
            }

            // 4) 減算.
            FVIL.Operation.CFviSubOperation parser = new FVIL.Operation.CFviSubOperation();
            parser.SrcImages[0] = src1;
            parser.SrcImages[1] = src2;
            parser.DstImages[0] = new FVIL.Data.CFviImage();
            parser.Validate();
            parser.Execute();

            return parser.DstImages[0];
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing

Namespace SampleCode
    Public Partial Class Operation
        ' ============================================================
        ''' <summary>
        ''' 画像絶対値演算クラスのテスト画像.
        ''' </summary>
        Friend Function make_image_s16() As FVIL.Data.CFviImage
            ' 1) ワーク画像の取り込み.
            Dim work0 As New FVIL.Data.CFviImage()
            Dim work1 As New FVIL.Data.CFviImage()
            FVIL.File.[Function].LoadImageFile(Defs.TestImageDir & "/logic_UC8_3.png", work0, FVIL.PixelMode.Unpacking)
            FVIL.File.[Function].LoadImageFile(Defs.TestImageDir & "/logic_UC8_1.png", work1, FVIL.PixelMode.Unpacking)

            Dim horz As Integer = work0.HorzSize
            Dim vert As Integer = work0.VertSize

            ' 2) インスタンスの準備.
            Dim src1 As New FVIL.Data.CFviImage(horz, vert, FVIL.ImageType.S16, 1)
            Dim src2 As New FVIL.Data.CFviImage(horz, vert, FVIL.ImageType.S16, 1)

            ' 3) 画素値のコピー (UC8 -> S16)
            For y As Integer = 0 To vert - 1
                For x As Integer = 0 To horz - 1
                    src1.SetPixel(x, y, work0.GetPixel(x, y))
                    src2.SetPixel(x, y, work1.GetPixel(x, y))
                Next
            Next

            ' 4) 減算.
            Dim parser As New FVIL.Operation.CFviSubOperation()
            parser.SrcImages(0) = src1
            parser.SrcImages(1) = src2
            parser.DstImages(0) = New FVIL.Data.CFviImage()
            parser.Validate()
            parser.Execute()

            Return parser.DstImages(0)
        End Function
    End Class
End Namespace

Inheritance Hierarchy

System..::..Object
FVIL..::..CFviObject
FVIL..::..CFviImageParser
FVIL.Operation..::..CFviOperation
FVIL.Operation..::..CFviAbsOperation

See Also