Intelligent Scissors による画像セグメンテーション(領域分割)。 続きを読む...
#include <opencv2/photo/segmentation.hpp>
|
| | IntelligentScissorsMB () |
| |
| IntelligentScissorsMB & | applyImage (InputArray image) |
| | 入力画像を指定し、画像特徴を抽出する。
|
| |
| IntelligentScissorsMB & | applyImageFeatures (InputArray non_edge, InputArray gradient_direction, InputArray gradient_magnitude, InputArray image=noArray()) |
| | 入力画像のカスタム特徴を指定する。
|
| |
| void | buildMap (const Point &sourcePt) |
| | 画像上の指定された始点に対する最適経路のマップを準備する。
|
| |
| void | getContour (const Point &targetPt, OutputArray contour, bool backward=false) const |
| | 画像上の指定された目標点に対する最適輪郭を抽出する。
|
| |
| IntelligentScissorsMB & | setEdgeFeatureCannyParameters (double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false) |
| | エッジ特徴抽出器をCannyエッジ検出器を使用するように切り替える。
|
| |
| IntelligentScissorsMB & | setEdgeFeatureZeroCrossingParameters (float gradient_magnitude_min_value=0.0f) |
| | "Laplacian Zero-Crossing" エッジ特徴抽出器に切り替え、その引数を指定する。
|
| |
| IntelligentScissorsMB & | setGradientMagnitudeMaxLimit (float gradient_magnitude_threshold_max=0.0f) |
| | 勾配強度の最大値しきい値を指定する。
|
| |
| IntelligentScissorsMB & | setWeights (float weight_non_edge, float weight_gradient_direction, float weight_gradient_magnitude) |
| | 特徴関数の重みを指定する。
|
| |
Intelligent Scissors による画像セグメンテーション(領域分割)。
このクラスは、画像セグメンテーション(領域分割)に利用できる、2点間の経路(輪郭)を求めるために使用する。
使用例:
Point source_point(200, 100);
Point target_point(400, 300);
std::vector<Point> pts;
参考文献: Eric N. Mortensen と William A. Barrett(ブリガムヤング大学)によって設計された "Intelligent Scissors for Image Composition" アルゴリズム [206]
◆ IntelligentScissorsMB()
| cv::segmentation::IntelligentScissorsMB::IntelligentScissorsMB |
( |
| ) |
|
| Python: |
|---|
| cv.segmentation.IntelligentScissorsMB( | | ) -> | <segmentation_IntelligentScissorsMB object> |
◆ applyImage()
| Python: |
|---|
| cv.segmentation.IntelligentScissorsMB.applyImage( | image | ) -> | retval |
◆ applyImageFeatures()
| Python: |
|---|
| cv.segmentation.IntelligentScissorsMB.applyImageFeatures( | non_edge, gradient_direction, gradient_magnitude[, image] | ) -> | retval |
入力画像のカスタム特徴を指定する。
applyImage() 呼び出しのカスタマイズされた高度なバリアント。
- 引数
-
| non_edge | 非エッジピクセルのコストを指定する。型は CV_8UC1。期待される値は {0, 1}。 |
| gradient_direction | 勾配方向の特徴を指定する。型は CV_32FC2。値は正規化されていることが期待される: x^2 + y^2 == 1 |
| gradient_magnitude | 勾配強度関数のコストを指定する: 型は CV_32FC1。値は [0, 1] の範囲内であること。 |
| image | 省略可能な引数。特徴のサブセットを指定する場合は指定しなければならない(指定されなかった特徴は内部で計算される) |
◆ buildMap()
| void cv::segmentation::IntelligentScissorsMB::buildMap |
( |
const Point & | sourcePt | ) |
|
| Python: |
|---|
| cv.segmentation.IntelligentScissorsMB.buildMap( | sourcePt | ) -> | None |
◆ getContour()
| void cv::segmentation::IntelligentScissorsMB::getContour |
( |
const Point & | targetPt, |
|
|
OutputArray | contour, |
|
|
bool | backward = false ) const |
| Python: |
|---|
| cv.segmentation.IntelligentScissorsMB.getContour( | targetPt[, contour[, backward]] | ) -> | contour |
画像上の指定された目標点に対する最適輪郭を抽出する。
- 覚え書き
- この呼び出しの前に buildMap() を呼び出さなければならない
- 引数
-
| targetPt | 目標点 |
| [out] | contour | 画像の始点と目標点の間の最適経路を構成するピクセルのリスト。型は CV_32SC2(std::vector<Point> と互換) |
| backward | 取得するピクセルを逆順にするかどうかを示すフラグ(目標点から始点へ点を取得するには "true" を使用する) |
◆ setEdgeFeatureCannyParameters()
| IntelligentScissorsMB & cv::segmentation::IntelligentScissorsMB::setEdgeFeatureCannyParameters |
( |
double | threshold1, |
|
|
double | threshold2, |
|
|
int | apertureSize = 3, |
|
|
bool | L2gradient = false ) |
| Python: |
|---|
| cv.segmentation.IntelligentScissorsMB.setEdgeFeatureCannyParameters( | threshold1, threshold2[, apertureSize[, L2gradient]] | ) -> | retval |
エッジ特徴抽出器をCannyエッジ検出器を使用するように切り替える。
- 覚え書き
- デフォルトでは "Laplacian Zero-Crossing" 特徴抽出器が使用される(原著論文に従う)
- 参照
- Canny
◆ setEdgeFeatureZeroCrossingParameters()
| IntelligentScissorsMB & cv::segmentation::IntelligentScissorsMB::setEdgeFeatureZeroCrossingParameters |
( |
float | gradient_magnitude_min_value = 0.0f | ) |
|
| Python: |
|---|
| cv.segmentation.IntelligentScissorsMB.setEdgeFeatureZeroCrossingParameters( | [, gradient_magnitude_min_value] | ) -> | retval |
"Laplacian Zero-Crossing" エッジ特徴抽出器に切り替え、その引数を指定する。
この特徴抽出器は論文に従ってデフォルトで使用される。
実装には、低振幅ノイズを持つ領域に対する追加のフィルタリングがある。このフィルタリングは最小勾配振幅の引数(4、8、16 などの小さな値を使用する)を通じて有効化される。
- 覚え書き
- この特徴抽出器の現在の実装は、グレースケール画像の処理に基づいている(カラー画像はまずグレースケール画像に変換される)。
- Cannyエッジ検出器は少し遅いが、より良い結果を提供する(特にカラー画像で): setEdgeFeatureCannyParameters() を使用する。
- 引数
-
| gradient_magnitude_min_value | エッジピクセルの最小勾配強度値(デフォルト: 0、チェックは無効) |
◆ setGradientMagnitudeMaxLimit()
| IntelligentScissorsMB & cv::segmentation::IntelligentScissorsMB::setGradientMagnitudeMaxLimit |
( |
float | gradient_magnitude_threshold_max = 0.0f | ) |
|
| Python: |
|---|
| cv.segmentation.IntelligentScissorsMB.setGradientMagnitudeMaxLimit( | [, gradient_magnitude_threshold_max] | ) -> | retval |
勾配強度の最大値しきい値を指定する。
ゼロの制限値は勾配強度のしきい値処理を無効にするために使用される(原著論文で説明されているデフォルトの動作)。それ以外の場合、gradient magnitude >= threshold のピクセルはコストがゼロになる。
- 覚え書き
- しきい値処理は、不規則な領域を持つ画像に対して使用すべきである(埋め込みロゴのような高コントラスト領域の引数で行き詰まるのを避けるため)。
- 引数
-
| gradient_magnitude_threshold_max | 勾配強度の最大値しきい値を指定する(デフォルト: 0、無効) |
◆ setWeights()
| IntelligentScissorsMB & cv::segmentation::IntelligentScissorsMB::setWeights |
( |
float | weight_non_edge, |
|
|
float | weight_gradient_direction, |
|
|
float | weight_gradient_magnitude ) |
| Python: |
|---|
| cv.segmentation.IntelligentScissorsMB.setWeights( | weight_non_edge, weight_gradient_direction, weight_gradient_magnitude | ) -> | retval |
特徴関数の重みを指定する。
重みは正規化された状態(重みの合計が 1.0 に等しい)に保つことを検討する。離散動的計画法 (DP) の目標は、ピクセル間のコストの最小化である。
- 引数
-
| weight_non_edge | 非エッジピクセルのコストを指定する(デフォルト: 0.43f) |
| weight_gradient_direction | 勾配方向関数のコストを指定する(デフォルト: 0.43f) |
| weight_gradient_magnitude | 勾配強度関数のコストを指定する(デフォルト: 0.14f) |
このクラス詳解は次のファイルから抽出されました: