Intelligent Scissors image segmentation.
More...
#include <opencv2/imgproc/segmentation.hpp>
|
| IntelligentScissorsMB () |
|
IntelligentScissorsMB & | applyImage (InputArray image) |
| Specify input image and extract image features.
|
|
IntelligentScissorsMB & | applyImageFeatures (InputArray non_edge, InputArray gradient_direction, InputArray gradient_magnitude, InputArray image=noArray()) |
| Specify custom features of input image.
|
|
void | buildMap (const Point &sourcePt) |
| Prepares a map of optimal paths for the given source point on the image.
|
|
void | getContour (const Point &targetPt, OutputArray contour, bool backward=false) const |
| Extracts optimal contour for the given target point on the image.
|
|
IntelligentScissorsMB & | setEdgeFeatureCannyParameters (double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false) |
| Switch edge feature extractor to use Canny edge detector.
|
|
IntelligentScissorsMB & | setEdgeFeatureZeroCrossingParameters (float gradient_magnitude_min_value=0.0f) |
| Switch to "Laplacian Zero-Crossing" edge feature extractor and specify its parameters.
|
|
IntelligentScissorsMB & | setGradientMagnitudeMaxLimit (float gradient_magnitude_threshold_max=0.0f) |
| Specify gradient magnitude max value threshold.
|
|
IntelligentScissorsMB & | setWeights (float weight_non_edge, float weight_gradient_direction, float weight_gradient_magnitude) |
| Specify weights of feature functions.
|
|
Intelligent Scissors image segmentation.
This class is used to find the path (contour) between two points which can be used for image segmentation.
Usage example:
Point source_point(200, 100);
Point target_point(400, 300);
std::vector<Point> pts;
Reference: "Intelligent Scissors for Image Composition" algorithm designed by Eric N. Mortensen and William A. Barrett, Brigham Young University [200]
◆ IntelligentScissorsMB()
cv::segmentation::IntelligentScissorsMB::IntelligentScissorsMB |
( |
| ) |
|
Python: |
---|
| cv.segmentation.IntelligentScissorsMB( | | ) -> | <segmentation_IntelligentScissorsMB object> |
◆ applyImage()
Python: |
---|
| cv.segmentation.IntelligentScissorsMB.applyImage( | image | ) -> | retval |
Specify input image and extract image features.
- Parameters
-
◆ applyImageFeatures()
Python: |
---|
| cv.segmentation.IntelligentScissorsMB.applyImageFeatures( | non_edge, gradient_direction, gradient_magnitude[, image] | ) -> | retval |
Specify custom features of input image.
Customized advanced variant of applyImage() call.
- Parameters
-
non_edge | Specify cost of non-edge pixels. Type is CV_8UC1. Expected values are {0, 1} . |
gradient_direction | Specify gradient direction feature. Type is CV_32FC2. Values are expected to be normalized: x^2 + y^2 == 1 |
gradient_magnitude | Specify cost of gradient magnitude function: Type is CV_32FC1. Values should be in range [0, 1] . |
image | Optional parameter. Must be specified if subset of features is specified (non-specified features are calculated internally) |
◆ buildMap()
void cv::segmentation::IntelligentScissorsMB::buildMap |
( |
const Point & | sourcePt | ) |
|
Python: |
---|
| cv.segmentation.IntelligentScissorsMB.buildMap( | sourcePt | ) -> | None |
Prepares a map of optimal paths for the given source point on the image.
- Note
- applyImage() / applyImageFeatures() must be called before this call
- Parameters
-
sourcePt | The source point used to find the paths |
◆ getContour()
void cv::segmentation::IntelligentScissorsMB::getContour |
( |
const Point & | targetPt, |
|
|
OutputArray | contour, |
|
|
bool | backward = false ) const |
Python: |
---|
| cv.segmentation.IntelligentScissorsMB.getContour( | targetPt[, contour[, backward]] | ) -> | contour |
Extracts optimal contour for the given target point on the image.
- Note
- buildMap() must be called before this call
- Parameters
-
| targetPt | The target point |
[out] | contour | The list of pixels which contains optimal path between the source and the target points of the image. Type is CV_32SC2 (compatible with std::vector<Point> ) |
| backward | Flag to indicate reverse order of retrived pixels (use "true" value to fetch points from the target to the source point) |
◆ 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 |
Switch edge feature extractor to use Canny edge detector.
- Note
- "Laplacian Zero-Crossing" feature extractor is used by default (following to original article)
- See also
- Canny
◆ setEdgeFeatureZeroCrossingParameters()
IntelligentScissorsMB & cv::segmentation::IntelligentScissorsMB::setEdgeFeatureZeroCrossingParameters |
( |
float | gradient_magnitude_min_value = 0.0f | ) |
|
Python: |
---|
| cv.segmentation.IntelligentScissorsMB.setEdgeFeatureZeroCrossingParameters( | [, gradient_magnitude_min_value] | ) -> | retval |
Switch to "Laplacian Zero-Crossing" edge feature extractor and specify its parameters.
This feature extractor is used by default according to article.
Implementation has additional filtering for regions with low-amplitude noise. This filtering is enabled through parameter of minimal gradient amplitude (use some small value 4, 8, 16).
- Note
- Current implementation of this feature extractor is based on processing of grayscale images (color image is converted to grayscale image first).
-
Canny edge detector is a bit slower, but provides better results (especially on color images): use setEdgeFeatureCannyParameters().
- Parameters
-
gradient_magnitude_min_value | Minimal gradient magnitude value for edge pixels (default: 0, check is disabled) |
◆ setGradientMagnitudeMaxLimit()
IntelligentScissorsMB & cv::segmentation::IntelligentScissorsMB::setGradientMagnitudeMaxLimit |
( |
float | gradient_magnitude_threshold_max = 0.0f | ) |
|
Python: |
---|
| cv.segmentation.IntelligentScissorsMB.setGradientMagnitudeMaxLimit( | [, gradient_magnitude_threshold_max] | ) -> | retval |
Specify gradient magnitude max value threshold.
Zero limit value is used to disable gradient magnitude thresholding (default behavior, as described in original article). Otherwize pixels with gradient magnitude >= threshold
have zero cost.
- Note
- Thresholding should be used for images with irregular regions (to avoid stuck on parameters from high-contract areas, like embedded logos).
- Parameters
-
gradient_magnitude_threshold_max | Specify gradient magnitude max value threshold (default: 0, disabled) |
◆ 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 |
Specify weights of feature functions.
Consider keeping weights normalized (sum of weights equals to 1.0) Discrete dynamic programming (DP) goal is minimization of costs between pixels.
- Parameters
-
weight_non_edge | Specify cost of non-edge pixels (default: 0.43f) |
weight_gradient_direction | Specify cost of gradient direction function (default: 0.43f) |
weight_gradient_magnitude | Specify cost of gradient magnitude function (default: 0.14f) |
The documentation for this class was generated from the following file: