Class IntelligentScissorsMB
- Namespace
- OpenCvSharp.Segmentation
- Assembly
- OpenCvSharp.dll
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: @snippet snippets/imgproc_segmentation.cpp usage_example_intelligent_scissors
Reference: Intelligent Scissors for Image Composition http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.138.3811&rep=rep1&type=pdf algorithm designed by Eric N. Mortensen and William A. Barrett, Brigham Young University @cite Mortensen95intelligentscissors
public class IntelligentScissorsMB : DisposableCvObject, IDisposable, ICvPtrHolder
- Inheritance
-
IntelligentScissorsMB
- Implements
- Inherited Members
Constructors
IntelligentScissorsMB()
Constructor
public IntelligentScissorsMB()
Methods
ApplyImage(InputArray)
Specify input image and extract image features
public IntelligentScissorsMB ApplyImage(InputArray image)
Parameters
imageInputArrayinput image. Type is #CV_8UC1 / #CV_8UC3
Returns
ApplyImageFeatures(InputArray, InputArray, InputArray, InputArray?)
Specify custom features of imput image Customized advanced variant of applyImage() call.
public IntelligentScissorsMB ApplyImageFeatures(InputArray nonEdge, InputArray gradientDirection, InputArray gradientMagnitude, InputArray? image = null)
Parameters
nonEdgeInputArraySpecify cost of non-edge pixels. Type is CV_8UC1. Expected values are
{0, 1}.gradientDirectionInputArraySpecify gradient direction feature. Type is CV_32FC2. Values are expected to be normalized:
x^2 + y^2 == 1gradientMagnitudeInputArraySpecify cost of gradient magnitude function: Type is CV_32FC1. Values should be in range
[0, 1].imageInputArrayOptional parameter. Must be specified if subset of features is specified (non-specified features are calculated internally)
Returns
BuildMap(Point)
Prepares a map of optimal paths for the given source point on the image Note: applyImage() / applyImageFeatures() must be called before this call
public void BuildMap(Point sourcePt)
Parameters
sourcePtPointThe source point used to find the paths
DisposeUnmanaged()
Releases unmanaged resources
protected override void DisposeUnmanaged()
GetContour(Point, OutputArray, bool)
Extracts optimal contour for the given target point on the image Note: buildMap() must be called before this call
public void GetContour(Point targetPt, OutputArray contour, bool backward = false)
Parameters
targetPtPointThe target point
contourOutputArraycontour 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>)backwardboolFlag to indicate reverse order of retrived pixels (use "true" value to fetch points from the target to the source point)
SetEdgeFeatureCannyParameters(double, double, int, bool)
Switch edge feature extractor to use Canny edge detector Note: "Laplacian Zero-Crossing" feature extractor is used by default (following to original article)
public IntelligentScissorsMB SetEdgeFeatureCannyParameters(double threshold1, double threshold2, int apertureSize = 3, bool l2gradient = false)
Parameters
Returns
SetEdgeFeatureZeroCrossingParameters(float)
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).
@note Canny edge detector is a bit slower, but provides better results (especially on color images): use setEdgeFeatureCannyParameters().
public IntelligentScissorsMB SetEdgeFeatureZeroCrossingParameters(float gradientMagnitudeMinValue = 0)
Parameters
gradientMagnitudeMinValuefloatMinimal gradient magnitude value for edge pixels (default: 0, check is disabled)
Returns
SetGradientMagnitudeMaxLimit(float)
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).
public IntelligentScissorsMB SetGradientMagnitudeMaxLimit(float gradientMagnitudeThresholdMax = 0)
Parameters
gradientMagnitudeThresholdMaxfloatSpecify gradient magnitude max value threshold (default: 0, disabled)
Returns
SetWeights(float, float, float)
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.
public IntelligentScissorsMB SetWeights(float weightNonEdge, float weightGradientDirection, float weightGradientMagnitude)
Parameters
weightNonEdgefloatSpecify cost of non-edge pixels (default: 0.43f)
weightGradientDirectionfloatSpecify cost of gradient direction function (default: 0.43f)
weightGradientMagnitudefloatSpecify cost of gradient magnitude function (default: 0.14f)