色空間変換クラス

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

Syntax

C#
[SerializableAttribute]
public class CFviColorConvert : CFviConversion
Visual Basic
<SerializableAttribute>
Public Class CFviColorConvert
	Inherits CFviConversion

Remarks

指定された色空間変換を行うクラスです。

本クラスでは RGB 色空間を基準色空間と定義しています。 RGB からその他色空間、その他色空間から RGB への変換が可能です。 同一色空間同士の変換を除いて、その他色空間からその他色空間への変換はできません。 各色空間の詳細については、画像情報(ImageInfo)の説明か FIE 説明書の fnFIE_color_convert の説明をご参照ください。
対応する色空間変換を下図に示します。 緑色の枠が RGB 色空間、橙色の枠がその他の色空間を示します。 枠内の文字(UC8,D64)は 画像種別(ImageType)を示します。



色空間の指定は、画像オブジェクト(CFviImage)の画像情報を使用します。 画像情報の設定は CFviImageImageInfo プロパティを使用してください。 例えば、RGB から HSV への色空間変換を行う場合は、以下のように記述します。

C# Copy imageCopy
FVIL.Data.CFviImage  src = new FVIL.Data.CFviImage( 640, 480, FVIL.ImageType.UC8, 3 );
FVIL.Data.CFviImage  dst = new FVIL.Data.CFviImage( 640, 480, FVIL.ImageType.UC8, 3 );

// ※) ここで src に何らかのデータを取り込んだものと仮定します.

// 色空間の指定.
src.ImageInfo = FVIL.ImageInfo.RGB;
dst.ImageInfo = FVIL.ImageInfo.HSV;

// 色空間変換の実行.
FVIL.Conversion.CFviColorConvert  parser = new FVIL.Conversion.CFviColorConvert();
parser.SrcImages[0] = src;  // 入力画像 (RGB)
parser.DstImages[0] = dst;  // 出力画像 (HSV)
parser.Execute();


スケーリングとオフセット:

対応する画素種別間の変換とスケーリング、オフセットの有無を下図に示します。
スケーリング、オフセット処理は 0~255 となるように正規化するものです。 処理を行わない場合は、変換式にて求められた値が、そのまま出力画像に保持されます。 値の範囲については、FIE 説明書の fnFIE_color_convert の説明をご参照ください。

入力画像の色空間が RGB で、出力画像の画素種別が UC8 の場合、スケーリングとオフセットがなされる色空間があります。 また、入力画像がその他色空間で、入力画像の画素種別が UC8 の場合も同様に、スケーリングとオフセットがなされる色空間があります。 対応する色空間については、FIE 説明書の fnFIE_color_convert の説明をご参照ください。

入力画像の色空間が RGB かその他色空間か否かにより、スケーリング、オフセットに対応する画素種別が異なるため注意が必要です。 これは、基準色空間が RGB と定義したことに起因しています。 スケーリングとオフセット値は、入力・出力共に画素値の範囲が 0~255 の範囲であると定義して決定されます。 入力画像が RGB の場合、 0≦R,G,B≦255 で、出力画像も 0~255 の範囲に収まります。 但し、入力画像が RGB 以外の色空間である場合は注意が必要です。 この色空間は、0~255 の範囲の RGB から変換されたことを前提にしています。 その為、スケーリングとオフセット値は、この前提があることを考慮して決定されています。

変換されたその他色空間では、必ずしも 0~255 のすべての組合せが存在するとは限りません。 例えば、 I1I2I3 色空間では、0~255 の範囲である RGB 色空間から変換されている限りは、 (I1,I2,I3)=(255,255,255) という値になる事はありません。 その為、この前提を無視した組合せの値の入力画像からの変換では、 出力画像では 0≦R,G,B≦255 とならない事があります。 その場合は、0~255 の範囲でサチュレーション処理がなされます。 入力画像の色空間が RGB でも、0~255 の範囲外を指定した場合は、出力画像ではサチュレーション処理がなされます。 尚、サチュレーション処理が実行されるのは、出力画像オブジェクトの画素種別が UC8 の場合です。


演算精度:

本ライブラリでは、処理速度の向上の為、入力画像と出力画像の画素種別が共に UC8 の場合、 32ビットの整数演算で処理を行っています。 それ以外の場合は、64ビット浮動小数点演算で処理を行います。 その為、一部色空間では、浮動小数点演算と比較して、変換精度が落ちることがあります。 各画素種別の演算精度を下図に示します。


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

処理対象画像の条件:

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

  • 入力画像と出力画像の処理範囲の幅と高さが等しい事 -
  • 入力画像と出力画像のチャネル数が 1 または 3 (注:下記の対応表をご参照ください) -
  • 入力画像と出力画像の画像種別(ImageType) -
  • 入力画像と出力画像の画像情報(ImageInfo) [チャネル数が 1 の時] -
  • 入力画像と出力画像の画像情報(ImageInfo) [チャネル数が 3 の時] -


変換方向と画像のチャネル数の対応:

変換方向入力画像
チャネル数 (色空間)
出力画像
チャネル数 (色空間)
グレイ→グレイ1 (GRAY)1 (GRAY)
グレイ→カラー1 (GRAY)3 (GRAY)
カラー→グレイ3 (GRAY)1 (GRAY)
カラー→カラー3 (RGB)3 (GRAY 以外の色空間)
カラー→カラー3 (GRAY 以外の色空間)3 (RGB)
カラー→カラー3 (GRAY 以外の色空間)3 (入力と同一色空間)


チャネル番号と色成分の対応:

色空間CH0CH1CH2
FVIL.ImageInfo.RGBRGB
FVIL.ImageInfo.XYZXYZ
FVIL.ImageInfo.YUVYUV
FVIL.ImageInfo.YIQYIQ
FVIL.ImageInfo.I1I2I3I1I2I3
FVIL.ImageInfo.HSVHSV
FVIL.ImageInfo.HSV_JOBLOVEHSV
FVIL.ImageInfo.LABL*a*b*
FVIL.ImageInfo.HSV_FASTHSV
FVIL.ImageInfo.LAB_FASTL*a*b*

Examples

【入力画像】


【出力画像】
チャネル0 (H)チャネル1 (S)チャネル2 (V)

ソースコード:
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 Conversion
    {
        // ============================================================
        /// <summary>
        /// 色空間変換クラス.
        /// </summary>
        [FvPluginExecute]
        public void ColorConvert()
        {
            // 1) インスタンスの準備.
            FVIL.Conversion.CFviColorConvert parser = new FVIL.Conversion.CFviColorConvert();
            FVIL.Data.CFviImage src = new FVIL.Data.CFviImage();
            FVIL.Data.CFviImage dst = new FVIL.Data.CFviImage();

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

            // 4) 画像処理準備 (共通)
            parser.SrcImages[0] = src;
            parser.DstImages[0] = dst;

            parser.Validate(0);    // 有効化.

            // 5) パラメータ設定 (固有)
            src.ImageInfo = FVIL.ImageInfo.RGB;
            dst.ImageInfo = FVIL.ImageInfo.HSV;

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

            // E) 処理結果画像の保存.
            FVIL.Data.CFviImage dst_chan = new FVIL.Data.CFviImage();

            dst_chan.Attach(dst.GetPixelScanner(0));
            FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Conversion.ColorConvert-H.png", dst_chan);

            dst_chan.Attach(dst.GetPixelScanner(1));
            FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Conversion.ColorConvert-S.png", dst_chan);

            dst_chan.Attach(dst.GetPixelScanner(2));
            FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Conversion.ColorConvert-V.png", dst_chan);
        }
    }
}


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 Conversion
        ' ============================================================
        ''' <summary>
        ''' 色空間変換クラス.
        ''' </summary>
        <FvPluginExecute> _
        Public Sub ColorConvert()
            ' 1) インスタンスの準備.
            Dim parser As New FVIL.Conversion.CFviColorConvert()
            Dim src As New FVIL.Data.CFviImage()
            Dim dst As New FVIL.Data.CFviImage()

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

            ' 4) 画像処理準備 (共通)
            parser.SrcImages(0) = src
            parser.DstImages(0) = dst

            parser.Validate(0)
            ' 有効化.
            ' 5) パラメータ設定 (固有)
            src.ImageInfo = FVIL.ImageInfo.RGB
            dst.ImageInfo = FVIL.ImageInfo.HSV

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

            ' E) 処理結果画像の保存.
            Dim dst_chan As New FVIL.Data.CFviImage()

            dst_chan.Attach(dst.GetPixelScanner(0))
            FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Conversion.ColorConvert-H.png", dst_chan)

            dst_chan.Attach(dst.GetPixelScanner(1))
            FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Conversion.ColorConvert-S.png", dst_chan)

            dst_chan.Attach(dst.GetPixelScanner(2))
            FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Conversion.ColorConvert-V.png", dst_chan)
        End Sub
    End Class
End Namespace

Inheritance Hierarchy

System..::..Object
FVIL..::..CFviObject
FVIL..::..CFviImageParser
FVIL.Conversion..::..CFviConversion
FVIL.Conversion..::..CFviColorConvert

See Also