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)の画像情報を使用します。 画像情報の設定は CFviImage の ImageInfo プロパティを使用してください。 例えば、RGB から HSV への色空間変換を行う場合は、以下のように記述します。
C# | Copy |
---|---|
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ビット浮動小数点演算で処理を行います。
その為、一部色空間では、浮動小数点演算と比較して、変換精度が落ちることがあります。
各画素種別の演算精度を下図に示します。
要求する入出力画像数:
項目 | 数 | 定数 |
---|---|---|
入力画像 | 1 | SrcImageCount フィールド |
出力画像 | 1 | DstImageCount フィールド |
処理対象画像の条件:
処理対象の画像は下記の条件を満たしている必要が有ります。
- 入力画像と出力画像の処理範囲の幅と高さが等しい事 -
- 入力画像と出力画像のチャネル数が 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 (入力と同一色空間) |
チャネル番号と色成分の対応:
色空間 | CH0 | CH1 | CH2 |
FVIL.ImageInfo.RGB | R | G | B |
FVIL.ImageInfo.XYZ | X | Y | Z |
FVIL.ImageInfo.YUV | Y | U | V |
FVIL.ImageInfo.YIQ | Y | I | Q |
FVIL.ImageInfo.I1I2I3 | I1 | I2 | I3 |
FVIL.ImageInfo.HSV | H | S | V |
FVIL.ImageInfo.HSV_JOBLOVE | H | S | V |
FVIL.ImageInfo.LAB | L* | a* | b* |
FVIL.ImageInfo.HSV_FAST | H | S | V |
FVIL.ImageInfo.LAB_FAST | L* | a* | b* |
Examples
【出力画像】
チャネル0 (H) | チャネル1 (S) | チャネル2 (V) |
ソースコード:
C# | Copy |
---|---|
// $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 |
---|---|
' $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
FVIL..::..CFviObject
FVIL..::..CFviImageParser
FVIL.Conversion..::..CFviConversion
FVIL.Conversion..::..CFviColorConvert