26
FAST Vision Library シリーズ FAST Vision Library カラー画像処理基本ソフトウェア for WindowsNT/2000 ☆第4版☆ (株)ファースト

FAST Vision Library カラー画像処理基本ソフトウェア for …€¦ · ④ pHist3 は色空間チャネル3のヒストグラムを返します。 DWORD型256配列のポインタを指定して下さい。

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • FAST Vision Library シリーズ

    FAST Vision Library カラー画像処理基本ソフトウェア

    for WindowsNT/2000

    ☆第4版☆

    (株)ファースト

  • 御注意

    ◎本書の内容の一部または全部を無断で転載することは固くお断りします。

    ◎本書の内容について、将来改良を目的に予告なしに変更することがあります。

    ◎Visual C++TMは、Microsoft Corporationの商標です。

  • はしがき

    この説明書は、FAST Vision Library カラー画像処理基本ソフトウェア Ver.3.00 に対応しています。

    本書は、「FAST Vision Library カラー画像処理基本ソフトウェア」について、記載したものです。

    なお、この他に FAST Vision Library としては、下記のようなものがあります。

    ◎FAST Vision Library 基本ソフトウェア 基本編

    ◎FAST Vision Library 基本ソフトウェア 濃淡画像編

    ◎FAST Vision Library 基本ソフトウェア 2値画像編

    ◎FAST Vision Library 基本ソフトウェア キャリパー編

    ◎FAST Vision Library 基本ソフトウェア ビジョン・ツール編

    ◎FAST Vision Library 基本ソフトウェア RS232C編

    ◎FAST Vision Library 基本ソフトウェア I/O拡張編

    ◎FAST Vision Library 応用ソフトウェア

    ◎FAST Vision Library 高機能サーチソフトウェア

    ◎FAST Vision Library 高分解能センサーソフトウェア

    ◎FAST Vision Library アナログカラー画像入力ソフトウェア

    本ライブラリ(FAST Vision Library)の適用コンパイラはMicrosoft® VisualC++TM Ver6.0 以後です。

  • 目 次

    [1]

    1 .概 要 ·············································· 1

    2 .色空間変換及び処理ツールライブラリ····················· 5 カラー画像色空間変換(Lib_ color_convert)--------------------------------------------- 9 色空間変換行列作成(Lib_ create_color_converter)------------------------------------- 11 カラーメモリ各チャネルへのルックアップテーブル適用(Lib_ color_lut)------------------ 12 カラーメモリ各チャネルのヒストグラム取得(Lib_ color_histogram)---------------------- 13 色抽出(Lib_ color_extract)---------------------------------------------------------- 14 カラー画像色空間距離変換(Lib_color_distance)---------------------------------------- 16

  • -1-

    1.概 要

  • -2-

  • -3-

    「FAST Vision Library カラーセンサーソフトウェア開発キット for WindowsNT/2000」とは、

    WindowsNT/2000プラットフォーム上で画像処理を利用するアプリケーションを構築する際の

    支援ライブラリです。

    本ライブラリは「FAST Vision Library 基本ソフトウェア開発キット for WindowsNT/2000」を

    インストールしてから、ご使用ください。

    本ライブラリを使用して画像処理システムを構築するには、Microsoft WindowsNT/2000 に関する知識、

    Windowsプログラミングに関する知識、C/C++言語、画像処理に関する知識を必要とします。

    本ライブラリ(FAST Vision Library)の適用コンパイラはMicrosoft® VisualC++TM Ver6.0 以後です。

  • -4-

  • -5-

    2.色空間変換及び処理ツールライブラリ

  • -6-

  • -7-

    本ライブラリは、カラー画像の各色空間変換を支援するもの及び各色空間の特徴を利用して、カラー処理

    を支援するツールです。現在,対応する色空間はRGB、HSV、XYZ、LAB、YIQ、YUVがあり

    ます。各色空間の定義及び説明は以下の通りです。

    RGB 空間

    図1(等色試験)に示すように、「任意の色は 3種類の色の混色で等色できる」という視覚の三

    色性に基づいて、R(赤)G(緑)B(青)の三種類色でカラー画像を表す空間です。

    XYZ 空間

    RGB 空間では、色を正しく表すために、一つが負値になる場合があります。(図 2「RGB 空間等色

    関数」をご参照ください)これを避けるための XYZ 空間が数学的変換により、求められます。(図

    3「XYZ 空間等色関数」をご参照ください)

    LAB 空間

    XYZ 空間では同じ距離があっても、緑の部分は人間には余り差を感じられず、青の部分は差を感

    じるという性質があります。この現象は図4に示すように、MacAdam 楕円と呼ばれるものが表すこ

    とが出来ます。これを解消するため、均等色空間の概念が提案され、その一つ LAB 空間が国際照明

    委員会にて標準化されています。(図 5「LAB 空間マンセルグリッド」に示したのはある Lの状態下

    の AB 分布状況です)

    HSV 空間

    HSV 空間はマンセル表色系の一種です。マンセル表色系はアメリカの画家マンセルが考案したも

    のです。Hは色相、青が 0°、マゼンタが 60°,続いて 60°ごとに赤、黄、緑、シアンに対応しま

    す。Sは彩度、Vは明度です。HSI 空間はマンセル表色系の一種で、基本的に HSV 空間と同じですが、

    HIS 空間の明度は HSV 空間明度の 2倍となっています。

    YIQ 空間

    テレビジョンにおいて、NTSC 方式が採用している色空間です。

    YUV 空間

    テレビジョンにおいて、PAL 方式が採用している色空間です。DVの圧縮CODEC等にも

    使用されています。Yは輝度信号、Uは色差信号(B-Y)、V は色差信号(R-Y)、です。

    参照文献 1.カラー画像工学(ISBN 4-274-03490-9)

    編者 社団法人 映像情報メディア学会

    出版社 オーム社

    2.色彩科学ハンドブック(ISBN 4-13-061000-7)

    編者 日本色彩学会

    出版社 東京大学出版会

  • 図-1 等色試験

    図-2 RGB 空間の等色関数 図-3 XYZ 空間の等色関数

    図-4 MacAdam 楕円 図-5 LAB 空間マンセルグリッド

    -8-

  • -9-

    Lib_color_convert

    機 能 カラー画像色空間変換

    形 式 #include "w_color.h" int WINAPI Lib_color_convert( int level, char *srcColorSpace, int srcMemNo,

    char *dstColorSpace, int dstMemNo );

    ※インポートライブラリは[ FVLColor.lib ]です。

    解 説 カラー画像を色空間変換します。

    ① level は色空間変換演算スイッチです。 値 意 味

    0 32bit幅16bit固定小数点演算。

    1 64bit浮動小数点演算

    ② srcColorSpace は変換元色空間です。

    ③ srcMemNo は変換元カラーメモリ番号です。

    ④ dstColorSpace は変換先色空間です。

    ⑤ dstMemNo は変換先カラーメモリ番号です。

    戻り値 処理結果 値 定 数 意 味

    0 NORMAL_RETURN 正常終了しました。

    -1 ERROR_RETURN 異常終了しました。

    例 RGB空間画像をHSV空間画像に変換します。

    #include “w_color.h”

    bool RGBtoHSV( int iRGB , int iHSV )

    {

    return NORMAL_RETURN == Lib_color_convert( 0, “RGB”, iRGB, “HSV”, iHSV ); }

  • -10-

    留意事項 ○色空間は以下の物が定義されています。(version2.40) 定義 意 味

    “RGB” RGB色空間 “XYZ” XYZ色空間 “YIQ” YIQ色空間 “YUV” YUV色空間 “HSV” HSV色空間 “LAB” LAB色空間

    ”RGB” ←→ ( ”XYZ” / ”YIQ” / ”YUV” / ”HSV” / ”LAB” ) の色空間変換をサポートしています。

    ○変換元・変換先で同じ色空間を指定すると、エラーになります。

    ○変換元・変換先で同じメモリ番号を指定しても、正しく変換されます。

  • -11-

    Lib_create_color_converter

    機 能 色空間変換行列作成

    形 式 #include "w_color.h" int WINAPI Lib_create_color_converter( char *srcColorSpace, char *dstColorSpace,

    double matrix33[][3] );

    ※インポートライブラリは[ FVLColor.lib ]です。

    解 説 色空間変換行列を作成します。 作成された色空間変換行列は Lib_color_convert 関数で指定出来ます。

    ① srcColorSpace は変換元色空間です。 16文字まで指定出来ます。

    ② dstColorSpace は変換先色空間です。 16文字まで指定出来ます。

    ③ matrix33[][3] は変換行列です。

    戻り値 処理結果 値 定 数 意 味

    0 NORMAL_RETURN 正常終了しました。

    -1 ERROR_RETURN 異常終了しました。

    例 RGB→CMY変換行列を作成し逆変換します。

    #include “w_color.h”

    bool CMYtoRGB( int iCMY , int iRGB )

    {

    double matrix[3][3] = {{-1, 0, 0},

    { 0,-1, 0},

    { 0, 0,-1}};

    if( NORMAL_RETURN != Lib_create_color_converter( “RGB” , ”CMY” ,matrix ) ) return false;

    return NORMAL_RETURN == Lib_color_convert( 0, “CMY”, iCMY, “RGB”, iRGB ); }

    留意事項 ○変換結果は0~255にスケーリングされます。

    ○変換行列を作成すると、自動的に逆変換行列を作成します。 例) “A” → ”B” 変換行列を作成すると、“B” → ”A” も作成されます。

    ○定義済みの色空間は作成できません。指定すると異常終了を返します。

  • -12-

    Lib_color_lut

    機 能 カラーメモリ各チャネルへのルックアップテーブル適用

    形 式 #include "w_color.h" int WINAPI Lib_color_lut( LPBYTE plut1, LPBYTE plut2, LPBYTE plut3,

    int srcMemNo, int dstMemNo );

    ※インポートライブラリは[ FVLColor.lib ]です。

    解 説 カラーメモリの各チャネルに各々ルックアップテーブルを適用します。

    ① plut1 は色空間チャネル1のルックアップテーブルです。 ② plut2 は色空間チャネル2のルックアップテーブルです。 ③ plut3 は色空間チャネル3のルックアップテーブルです。 ルックアップテーブルは BYTE 型 256 配列で指定します。

    配列のインデックスが変換前、配列の値が変換後の値になります。

    また、以下の定数も指定出来ます。

    値 定 数 意 味

    0x00000000 NULL_LUT 指定チャネルは処理を行いません。

    0xFFFFFFFF LINEAR_LUT 指定チャネルは値をコピーします。

    ④ srcMemNo は変換元カラーメモリ番号です。(0~)

    ⑤ dstMemNo は変換先カラーメモリ番号です。(0~)

    戻り値 処理結果 値 定 数 意 味

    0 NORMAL_RETURN 正常終了しました。

    -1 ERROR_RETURN 異常終了しました。

    例 カラー画像の色空間チャネル2のみ明るさを半分にします。

    #include “w_color.h”

    bool ReduceGreen( int iRGB )

    {

    LPBYTE greenLut = new BYTE[256];

    int i,ret;

    if( !greenLut ) return false;

    for( i = 0 ; i < 256 ; i++ ) greenLut[i] = i / 2;

    ret = Lib_color_lut( NULL_LUT, greenLut, NULL_LUT, iRGB, iRGB );

    delete [] greenLut;

    return NORMAL_RETURN == ret;

    }

    留意事項 ○変換元・変換先で同じメモリ番号を指定しても、正しく変換されます。

  • -13-

    Lib_color_histogram

    機 能 カラーメモリ各チャネルのヒストグラム取得

    形 式 #include "w_color.h" int WINAPI Lib_color_histogram( int srcMemNo,

    LPDWORD pHist1, LPDWORD pHist2, LPDWORD pHist3 );

    ※インポートライブラリは[ FVLColor.lib ]です。

    解 説 カラーメモリの各チャネルの度数分布を取得します。

    ① srcMemNo はヒストグラム取得対象カラーメモリ番号を指定します。

    ② pHist1 は色空間チャネル1のヒストグラムを返します。 ③ pHist2 は色空間チャネル2のヒストグラムを返します。 ④ pHist3 は色空間チャネル3のヒストグラムを返します。 DWORD 型 256 配列のポインタを指定して下さい。

    配列のインデックスが濃度値、値が度数になります。

    必要ないチャネルは NULL を指定して下さい。

    戻り値 処理結果 値 定 数 意 味

    0 NORMAL_RETURN 正常終了しました。

    -1 ERROR_RETURN 異常終了しました。

    例 RGB画像の緑チャネルのみヒストグラムを取得します。

    #include “w_color.h”

    bool GetGreenHistogram( int iRGB )

    {

    LPDWORD greenHist = new DWORD[256];

    int ret;

    ret = Lib_color_histogram( iRGB, NULL, greenHist, NULL );

    delete [] greenHist;

    return NORMAL_RETURN == ret;

    }

    留意事項 ○ありません。

  • -14-

    Lib_color_extract

    機 能 色抽出

    形 式 #include "w_color.h" int WINAPI Lib_color_extract( RGBQUAD extractMin, RGBQUAD extractMax,

    int srcMemNo, int dstMemNo );

    ※インポートライブラリは[ FVLColor.lib ]です。

    解 説 カラーメモリより指定範囲内色の画素座標を2値画像にプロットします。

    ① extractMin は最小抽出色です。抽出は最小抽出色を含みます。

    ② extractMax は最大抽出色です。抽出は最大抽出色を含みます。

    ③ srcMemNo は抽出対象のカラーメモリ番号です。

    ④ dstMemNo は抽出結果を格納する2値画像メモリ番号です。

    戻り値 処理結果 値 定 数 意 味

    0 NORMAL_RETURN 正常終了しました。

    -1 ERROR_RETURN 異常終了しました。

    例 RGBカラー画像で、指定色範囲領域を抽出します。

    #include “w_color.h”

    bool PaintRegion( int iRGB , RGBQUAD col , int Tolerance , int iBin )

    {

    RGBQUAD minCol = { BYTE( col.rgbBlue -Tolerance ),

    BYTE( col.rgbGreen-Tolerance ),

    BYTE( col.rgbRed -Tolerance ) };

    RGBQUAD maxCol = { BYTE( col.rgbBlue +Tolerance ),

    BYTE( col.rgbGreen+Tolerance ),

    BYTE( col.rgbRed +Tolerance ) };

    return NORMAL_RETURN == Lib_color_extract( minCol, maxCol, iRGB, iBin );

    }

  • -15-

    留意事項 ○出力メモリは2値メモリですので、ご注意ください。

    ○色範囲内座標に白点を書き込みますが、色範囲外座標は処理しません。 必要ならば予めクリアして下さい。

    ○抽出色指定方法は、最小抽出色と最大抽出色の比較で各チャネル毎に設定されます。

    ・最小抽出色<最大抽出色の場合 ・最小抽出色>最大抽出色の場合

    抽出色

    抽出色

    抽出色255 255

    最大抽出色 最小抽出色

    最小抽出色 最大抽出色

    0 0

    ・抽出条件 ・抽出条件

    最小抽出色≦対象画素色 最小抽出色≧対象画素色

    AND OR

    最大抽出色≧対象画素色 最大抽出色≦対象画素色

    ○最小抽出色と最大抽出色が同じ場合は、その色のみ抽出します。

  • -16-

    Lib_color_distance

    機 能 カラー画像色空間距離変換

    形 式 #include "w_color.h" int WINAPI Lib_color_distance( RGBQUAD color,

    int src_color ,int dst_gray ,void* option );

    ※インポートライブラリは[ FVLColor.lib ]です。

    解 説 カラー画像を指定色からの色空間距離で濃淡画像に変換します。 gray[y][x] = 255 - √( ( color[y][x].ch0 - reference.ch0 )2 +

    ( color[y][x].ch1 - reference.ch1 )2 +

    ( color[y][x].ch2 - reference.ch2 )2 );

    距離が 255 以上の場合は 255 に飽和されます。

    ① color は基準色です。 ② src_color は変換元カラー画像メモリ番号です。

    CURRENT_MEMORY(-1)が指定出来ます。

    ③ dst_gray は変換先濃淡画像メモリ番号です。 CURRENT_MEMORY(-1)が指定出来ます。

    ④ option は機能拡張用です。通常は NULL を設定して下さい。 ・HSV 色空間距離変換の時は "colorspace:HSV"文字列を設定して下さい。

    Lib_color_distance(color,CURRENT_MEMORY,CURRENT_MEMORY, (void*)"colorspace:HSV");

    戻り値 処理結果 値 定 数 意 味

    0 NORMAL_RETURN 正常終了しました。

    -1 ERROR_RETURN 異常終了しました。

    例 カレントカラーメモリを、指定座標画素色からの色空間距離に変換して カレント濃淡メモリに書き込みます。

    bool grayimage_from_colorimage_by_anypointcolor(DWORD x,DWORD y)

    {

    DWORD w = Lib_get_fx_size();

    LPRGBQUAD p = Lib_adrs_color_memory(CURRENT_MEMORY);

    if( !p ) return false;

    int conv = Lib_color_distance(p[y*w+x],

    CURRENT_MEMORY,

    CURRENT_MEMORY,

    NULL);

    return conv==NORMAL_RETURN;

    }

    留意事項 ○ありません。

  • 索 引

    Lib_ color_convert.............................................9 Lib_color_distance ...........................................16 Lib_ color_extract ...........................................14 Lib_ color_histogram ......................................13 Lib_ color_lut ..................................................12 Lib_ create_color_converter ...........................11

  • FAST Vision Library カラー画像処理基本ソフトウェア for WindowsNT/2000

    2006年2月第4版第1刷発行

    発行所 株式会社ファースト

    本 社 〒242-0001 神奈川県大和市下鶴間2791-5

    ユーザー・サポート FAX 046-272-8692 TEL 046-272-8691

    E-mail : [email protected]

  • B-001127

    はしがき目 次1.概  要2.色空間変換及び処理ツールライブラリカラー画像色空間変換 (Lib_color_convert)色空間変換行列作成(Lib_create_color_converter)カラーメモリ各チャネルへのルックアップテーブル適用(Lib_color_lut)カラーメモリ各チャネルのヒストグラム取得(Lib_color_histogram)色抽出(Lib_color_extract)カラー画像色空間距離変換 (Lib_color_distance)