配列に対して,適応的な閾値処理を行います.
パラメタ: |
|
---|
この関数は,次式に従いグレースケール画像を2値画像に変換します:
CV_THRESH_BINARY
CV_THRESH_BINARY_INV
ここで, は各ピクセルに対して個別に計算される閾値です.
手法 CV_ADAPTIVE_THRESH_MEAN_C の場合は, ピクセルの近傍領域 の平均値から param1 を引いた値です.
また,手法 CV_ADAPTIVE_THRESH_GAUSSIAN_C の場合は, ピクセルの近傍領域のガウシアンを重みとした総和から param1 を引いた値です.
画像の色空間を変換します.
パラメタ: |
|
---|
この関数は,入力画像をある色空間から別の色空間へと変換します.これは, IplImage のヘッダのフィールド colorModel と channelSeq を無視しますので,ユーザは入力画像の色空間を正しく指定しなければいけません(RGB空間の場合はチャンネルの順番も正しく指定してください.例えば,BGRは, というレイアウトの24ビットフォーマットを表しており,RGBは, というレイアウトの24ビットフォーマットを表しています).
R,G,B チャンネルの一般的な範囲は以下のとおりです:
もちろん,線形変換の場合はその範囲を特定することができますが,非線形変換の場合に正しい結果を得るためには,入力画像をスケーリングする必要があります.
この関数は,以下のような変換を行うことができます:
アルファチャンネルの追加/削除や,チャンネル順序の反転などのRGB空間内での変換.以下の式を利用した,16ビットRGBカラー(R5:G6:B5 あるいは R5:G5:B5)から/への変換,あるいはグレースケールから/への変換:
および
RGB画像からグレースケールへの変換は,次のようになります:
cvCvtColor(src ,bwsrc, CV_RGB2GRAY)
RGB CIE XYZ ,Rec 709仕様,D65 白色点 ( CV_BGR2XYZ, CV_RGB2XYZ, CV_XYZ2BGR, CV_XYZ2RGB ):
, および は,全範囲をカバーします(浮動小数点型の画像の場合, は1を越える可能性があります).
RGB YCrCb JPEG (a.k.a. YCC) ( CV_BGR2YCrCb, CV_RGB2YCrCb, CV_YCrCb2BGR, CV_YCrCb2RGB )
ここで
Y, Cr および Cb は,全範囲をカバーします.
RGB HSV ( CV_BGR2HSV, CV_RGB2HSV, CV_HSV2BGR, CV_HSV2RGB ) 8ビット および 16ビット画像の場合,R, G, B は浮動小数点型のフォーマットに変換され,0から1の範囲に収まるようにスケーリングされます.
もし ならば 出力値の範囲は, , , です.
これらの値は,出力されるべき型に変換されます:
8ビット画像
現在はサポートされていません
H, S, V は,そのまま
RGB HLS ( CV_BGR2HLS, CV_RGB2HLS, CV_HLS2BGR, CV_HLS2RGB ). 8ビット および 16ビット画像の場合,R, G, B は浮動小数点型のフォーマットに変換され,0から1の範囲に収まるようにスケーリングされます.
もし ならば 出力の範囲は, , , です.
これらの値は,出力されるべき型に変換されます:
8ビット画像
現在はサポートされていません
H, S, V は,そのまま
RGB CIE L*a*b* ( CV_BGR2Lab, CV_RGB2Lab, CV_Lab2BGR, CV_Lab2RGB ) 8ビット および 16ビット画像の場合,R, G, B は浮動小数点型のフォーマットに変換され,0から1の範囲に収まるようにスケーリングされます.
ここで
および
となります. 出力の範囲は, , , です.
これらの値は,出力されるべき型に変換されます:
8ビット画像
現在はサポートされていません
L, a, b は,そのまま
RGB CIE L*u*v* ( CV_BGR2Luv, CV_RGB2Luv, CV_Luv2BGR, CV_Luv2RGB ) 8ビット および 16ビット画像の場合,R, G, B は浮動小数点型のフォーマットに変換され,0から1の範囲に収まるようにスケーリングされます.
出力の範囲は, , , です
これらの値は,出力されるべき型に変換されます:
8ビット画像
現在はサポートされていません
L, u, v は,そのまま
上に示したRGBと各種の色空間との変換式は,Web上の複数の情報を参考にしています.特に Charles Poynton のサイト http://www.poynton.com/ColorFAQ.html からは多くの情報を得ました.
Bayer RGB ( CV_BayerBG2BGR, CV_BayerGB2BGR, CV_BayerRG2BGR, CV_BayerGR2BGR, CV_BayerBG2RGB, CV_BayerGB2RGB, CV_BayerRG2RGB, CV_BayerGR2RGB ) Bayer パターンは,CCD カメラや CMOS カメラなどで広く利用されています.R,G,B の各ピクセル(ある特定のセンサ)が次ように交互に配置された1つのプレーンから,カラー画像を得ることができます.
出力される各ピクセルのRGB値は,同色のピクセルの 1隣接,2隣接 あるいは4隣接を用いた補間により求められます.上述のパターンには,いくつかのバリエーションが存在します.それらは,パターンを1ピクセルだけ左にシフト,さらに(あるいは)1ピクセルだけ上にシフトすることで得られます.また,変換定数
CV_Bayer 2BGR と
CV_Bayer 2RGB に現れる2つの文字 と は,パターンの種類を表しています.つまり,この2文字は,あるパターンの2行目の2,3番目の成分であり,例えば,上述の図で表されたパターンは,まさに “BG” タイプです.
入力画像中の非0ピクセルから,最も近い0ピクセルまでの距離を,全ての非0ピクセルに対して計算します.
パラメタ: |
|
---|
この関数は,2値画像上の各ピクセルから,最も近い0ピクセルへの近似距離を求めます.これは,0ピクセルに対しては距離0をセットし,その他のピクセルに対しては,基本移動の組み合わせで0ピクセルに至るまでの最短距離を見つけます.基本移動は,水平,垂直,斜め,桂馬飛び(これは サイズのマスクを利用した場合のみ)移動であり,全長距離は,これらの基本移動距離の合計となります.距離関数は対称性をもつはずなので,水平および垂直移動のコスト(これを a で表す)は全て等しくなければいけません.同様に,斜め移動のコスト(これを b で表す)も全て等しく,桂馬飛び移動のコスト(これを c で表す)も全て等しくなくてはいけません.距離の種類が CV_DIST_C や CV_DIST_L1 の場合,距離は正確に計算されますが, CV_DIST_L2 (ユークリッド距離)の場合は,距離はいくらかの相対誤差( マスクを用いると精度が向上します)を持ちます.OpenCVでは,次のように Borgefors86 で推奨される値を利用しています:
CV_DIST_C | a = 1, b = 1 | |
---|---|---|
CV_DIST_L1 | a = 1, b = 2 | |
CV_DIST_L2 | a=0.955, b=1.3693 | |
CV_DIST_L2 | a=1, b=1.4, c=2.1969 |
以下は,ユーザ定義距離を利用した場合の,距離フィールド(白い矩形の中心に黒(0)ピクセルがある)の例です:
ユーザ定義 マスク (a=1, b=1.5)
4.5 | 4 | 3.5 | 3 | 3.5 | 4 | 4.5 |
---|---|---|---|---|---|---|
4 | 3 | 2.5 | 2 | 2.5 | 3 | 4 |
3.5 | 2.5 | 1.5 | 1 | 1.5 | 2.5 | 3.5 |
3 | 2 | 1 | 1 | 2 | 3 | |
3.5 | 2.5 | 1.5 | 1 | 1.5 | 2.5 | 3.5 |
4 | 3 | 2.5 | 2 | 2.5 | 3 | 4 |
4.5 | 4 | 3.5 | 3 | 3.5 | 4 | 4.5 |
ユーザ定義 マスク (a=1, b=1.5, c=2)
4.5 | 3.5 | 3 | 3 | 3 | 3.5 | 4.5 |
---|---|---|---|---|---|---|
3.5 | 3 | 2 | 2 | 2 | 3 | 3.5 |
3 | 2 | 1.5 | 1 | 1.5 | 2 | 3 |
3 | 2 | 1 | 1 | 2 | 3 | |
3 | 2 | 1.5 | 1 | 1.5 | 2 | 3 |
3.5 | 3 | 2 | 2 | 2 | 3 | 3.5 |
4 | 3.5 | 3 | 3 | 3 | 3.5 | 4 |
通常は,高速化のために,粗い距離推定 CV_DIST_L2 では のマスクが利用され,より正確な距離推定 CV_DIST_L2 では のマスクが利用されます.
出力パラメータ labels が NULL ではない場合,この関数は,全ての0非ピクセルに対して最も近い値0の連結成分を求めます.この連結成分自体は,関数処理の最初で輪郭として検出されます.
このモードでは,処理時間がたかだか O(N) (Nはピクセル数)なので,これを利用すると,2値画像に対する近似的なボロノイ図を高速に求めることができます.
typedef struct CvConnectedComp
{
double area; /* セグメント化された連結成分の面積 */
CvScalar value; /* 連結成分の平均色 */
CvRect rect; /* セグメント化された連結成分の ROI */
CvSeq* contour; /* オプションである連結成分の境界
(その輪郭は,「穴」に相当するような子輪郭を持つ可能性があります) */
} CvConnectedComp;
連結成分を指定した色で塗りつぶします.
パラメタ: |
|
---|
この関数は,指定された色で連結成分を塗りつぶします.塗りつぶしは,シードピクセルから開始されます.連結しているかどうかは,ピクセル値同士の距離によって決まります. のピクセルが塗りつぶされる領域に属していると見なされるのは,以下の場合です:
グレースケール画像,変動範囲
グレースケール画像,固定範囲
カラー画像,変動範囲
カラー画像,固定範囲
ここで, は,ある隣接ピクセルのピクセル値を表します.つまり,対象ピクセルの色/輝度値が,次の値に十分近い場合に連結成分に追加されます:
選択領域内の画像を修復します.
パラメタ: |
|
---|
この関数は,選択された画像領域を,その領域境界付近のピクセルを利用して再構成します.この関数は,スキャンされた写真からごみや傷を除去したり,静止画や動画から不要な物体を削除したりするために利用されます.
インテグラルイメージを求めます.
パラメタ: |
|
---|
関数 cvIntegral は,入力画像に対する1つあるいは複数のインテグラルイメージを,次のように求めます:
このようなインテグラルイメージを用いると,画像中の任意の矩形領域(あるいは45度回転した矩形領域)の画素値の総和,平均,標準偏差を定数時間で計算できます.例えば:
となります. これにより,例えば,窓サイズ可変な平滑化や相関演算を高速に計算することが可能になります.また,マルチチャンネル画像の場合,各チャンネルでの総和が個別に累積されます.
Mean-Shift法による画像セグメンテーションを行います.
パラメタ: |
|
---|
この関数は,Mean-Shiftセグメンテーションのフィルタリング部分の実装です.つまり,この関数の出力は,色勾配と細かいピクセル値の平坦化というフィルタ処理がされた「ポスタライズド」な画像となります.この関数は,入力画像中(あるいは,ダウンサイジングされた入力画像中,下記参照)の各ピクセル に対して,Mean-Shiftを繰り返します.つまり,空間-色を軸とする超空間内のピクセル の近傍領域は,次のように表されます:
ここで (R,G,B) と (r,g,b) は,それぞれ (X,Y) と (x,y) における色成分のベクトルを表します(しかし,アルゴリズム自体は使用される色空間には依存しないので,任意の 3成分を持つ色空間を代わりに利用しても構いません).近傍領域において,平均空間ベクトル (X',Y') と平均色ベクトル (R',G',B') が求められ,それらのベクトルは,次の繰り返しにおいて近傍領域の中心として扱われます:
反復計算終了後,最初のピクセル(つまり,繰り返し計算が開始された場所のピクセル)の色成分は,以下のような最終値(最後の繰り返しにおける平均色)にセットされます:
の場合,レベル のガウシアンピラミッドが構成され,その最も小さい層に対して上述の処理が行われます.その結果がより大きい層に伝達され,低解像度の層と現在の層との色が大幅に異なる( )位置のピクセルについてのみ,繰り返し計算が再実行されます.この結果,色領域の境界がより明確になります.ただし,ガウシアンピラミッドを用いて得られた結果は,入力画像全体に対してMean-Shift処理を実行(つまり, )して得られるものとは異なることに注意してください.
画像ピラミッドを利用したセグメンテーションを行います.
パラメタ: |
|
---|
この関数は,画像ピラミッドを利用した画像のセグメンテーションを行います.ここで,画像ピラミッドは,レベル level まで構築されます.レベル i にある任意のピクセル a と,隣のレベルにある親候補ピクセル b とは, の場合に接続されます.連結成分が定義されると,それらを繋げて複数のクラスタが形成されます. の場合,任意の 2つのセグメント A と B は同じクラスタに属します.入力画像がシングルチャンネルの場合は, となります. また,入力画像が3チャンネル(RGB)である場合は,
となります.
1つのクラスタに対して,1つ以上の連結成分が存在する可能性もあります.入出力画像 src と dst は,8ビット,シングルチャンネルか3チャンネル画像,そして両者が同じサイズでなければいけません.
配列の要素に対して,ある定数での閾値処理を行います.
パラメタ: |
|
---|
この関数は,シングルチャンネルの配列に対して,ある定数での閾値処理を行います.これは,グレースケールからの2値画像生成(関数 CmpS も,この目的に利用できます)や,ノイズ除去(つまり,小さすぎたり大きすぎたりする値を除きます)などに利用されることが多々あります.この関数がサポートする閾値処理にはいくつかの種類があり,それは引数 thresholdType によって決定されます:
CV_THRESH_BINARY
CV_THRESH_BINARY_INV
CV_THRESH_TRUNC
CV_THRESH_TOZERO
CV_THRESH_TOZERO_INV
また,特殊な値 CV_THRESH_OTSU を上述のものと組み合わせて使うこともできます.この場合,関数は大津のアルゴリズムを用いて最適な閾値を決定し,それを引数 thresh で指定された値の代わりに利用します.また,この関数は,計算された閾値を返します.現在のところ,大津の手法は8ビット画像に対してのみ実装されています.