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

FAST Vision Library シリーズ
FAST Vision Library
カラー画像処理基本ソフトウェア
for Windows
☆第5版☆
(株)ファースト
御注意
◎本書の内容の一部または全部を無断で転載することは固くお断りします。
◎本書の内容について、将来改良を目的に予告なしに変更することがあります。
◎Windows®は、Microsoft Corporationの商標です。
◎Visual C++®は、Microsoft Corporationの商標です。
はしがき
この説明書は、FAST Vision Library カラー画像処理基本ソフトウェア Ver.3.10 に対応しています。
本書は、「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 応用ソフトウェア
◎FAST Vision Library 高機能サーチソフトウェア
◎FAST Vision Library 高分解能センサーソフトウェア
◎FAST Vision Library アナログカラー画像入力ソフトウェア
Microsoft® VisualC++® 2005 です。
本ライブラリの対応コンパイラは Microsoft® VisualC++® Ver6.0、
目
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.概
要
-1-
-2-
「FAST Vision Library カラーセンサーソフトウェア開発キット for Windows」とは、WindowsNT、Windo
ws2000およびWindowsXPプラットフォーム上で画像処理を利用するアプリケーションを構築する際の支援ラ
イブラリです。
本ライブラリは「FAST Vision Library 基本ソフトウェア開発キット for Windows」をインストールして
から、ご使用ください。
本ライブラリを使用して画像処理システムを構築するには、Microsoft WindowsNT、Windows2000および
WindowsXPに関する知識、Windowsプログラミングに関する知識、C/C++言語、画像処理に関する知識を必要
とします。
アプリケーション開発環境としては、Microsoft® VisualC++® Ver6.0 及び VisualC++® 2005 に対応してい
ます。本ライブラリの DLL はマルチバイト版のみ提供しており、Unicode 版は提供しておりません。アプリ
ケーション作成時はプロジェクトのプロパティでコードセットをマルチバイトに指定してご使用ください。
『FAST Vision Library カラーセンサーソフトウェア開発キット for Windows』は、WindowsNT 版と
Windows2000/WindowsXP 版のインストーラが用意されていますが、提供されるライブラリは全て共通となっ
ています。
-3-
-4-
2.色空間変換及び処理ツールライブラリ
-5-
-6-
本ライブラリは、カラー画像の各色空間変換を支援するもの及び各色空間の特徴を利用して、カラー処理
を支援するツールです。現在,対応する色空間は 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)
編者
日本色彩学会
出版社
東京大学出版会
-7-
図-1 等色試験
図-2 RGB 空間の等色関数
図-3 XYZ 空間の等色関数
図-4 MacAdam 楕円
図-5 LAB 空間マンセルグリッド
-8-
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
32 ビット幅 16 ビット固定小数点演算。
1
64 ビット浮動小数点演算
② srcColorSpace は変換元色空間です。
③ srcMemNo は変換元カラーメモリ番号です。
④ dstColorSpace は変換先色空間です。
⑤ dstMemNo は変換先カラーメモリ番号です。
戻り値
処理結果
値
0
-1
例
定
数
NORMAL_RETURN
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 );
}
-9-
留意事項
○色空間は以下の物が定義されています。(version2.40)
定義
“RGB”
“XYZ”
“YIQ”
“YUV”
“HSV”
“LAB”
意
RGB 色空間
XYZ 色空間
YIQ 色空間
YUV 色空間
HSV 色空間
LAB 色空間
味
“RGB” ←→ (“XYZ” / “YIQ” / “YUV” / “HSV” / “LAB” )
の色空間変換をサポートしています。
○変換元・変換先で同じ色空間を指定すると、エラーになります。
○変換元・変換先で同じメモリ番号を指定しても、正しく変換されます。
-10-
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
-1
例
定
数
NORMAL_RETURN
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” も作成されます。
○定義済みの色空間は作成できません。指定すると異常終了を返します。
-11-
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
-1
例
定
数
NORMAL_RETURN
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;
}
留意事項
○変換元・変換先で同じメモリ番号を指定しても、正しく変換されます。
-12-
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
-1
例
定
数
NORMAL_RETURN
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;
}
留意事項
ありません。
-13-
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
-1
例
定
数
NORMAL_RETURN
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 );
}
-14-
留意事項
○出力メモリは 2 値メモリですので、ご注意ください。
○色範囲内座標に白点を書き込みますが、色範囲外座標は処理しません。
必要ならば予めクリアして下さい。
○抽出色指定方法は、最小抽出色と最大抽出色の比較で各チャネル毎に設定されます。
・最小抽出色<最大抽出色の場合
255
・最小抽出色>最大抽出色の場合
255
抽出色
最大抽出色
最小抽出色
抽出色
最小抽出色
最大抽出色
抽出色
0
0
・抽出条件
最小抽出色≦対象画素色
AND
最大抽出色≧対象画素色
・抽出条件
最小抽出色≧対象画素色
OR
最大抽出色≦対象画素色
○最小抽出色と最大抽出色が同じ場合は、その色のみ抽出します。
-15-
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
-1
例
定
数
NORMAL_RETURN
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;
}
留意事項
ありません。
-16-
索
C
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 Windows
2008年8月第5版第1刷発行
発行所
本
ユーザ・サポート
社
株式会社ファースト
〒242-0001
神奈川県大和市下鶴間2791-5
FAX 046-272-8692
TEL 046-272-8691
E-mail : [email protected]
B-001127