Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

improvements on EdgeDrawing #3159

Merged
merged 1 commit into from
Jan 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 41 additions & 17 deletions modules/ximgproc/include/opencv2/ximgproc/edge_drawing.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,69 +25,93 @@ class CV_EXPORTS_W EdgeDrawing : public Algorithm
enum GradientOperator
{
PREWITT = 0,
SOBEL = 1,
SCHARR = 2,
LSD = 3
SOBEL = 1,
SCHARR = 2,
LSD = 3
};

struct CV_EXPORTS_W_SIMPLE Params
{
CV_WRAP Params();
//! Parameter Free mode will be activated when this value is true.
//! Parameter Free mode will be activated when this value is set as true. Default value is false.
CV_PROP_RW bool PFmode;
//! indicates the operator used for gradient calculation.The following operation flags are available(cv::ximgproc::EdgeDrawing::GradientOperator)
/** @brief indicates the operator used for gradient calculation.

one of the flags cv::ximgproc::EdgeDrawing::GradientOperator. Default value is PREWITT
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to eliminate tabs from source code.

Here and below.

*/
CV_PROP_RW int EdgeDetectionOperator;
//! threshold value used to create gradient image.
//! threshold value of gradiential difference between pixels. Used to create gradient image. Default value is 20
CV_PROP_RW int GradientThresholdValue;
//! threshold value used to create gradient image.
//! threshold value used to select anchor points. Default value is 0
CV_PROP_RW int AnchorThresholdValue;
//! Default value is 1
CV_PROP_RW int ScanInterval;
//! minimun connected pixels length processed to create an edge segment.
/** @brief minimun connected pixels length processed to create an edge segment.

in gradient image, minimum connected pixels length processed to create an edge segment. pixels having upper value than GradientThresholdValue
will be processed. Default value is 10
*/
CV_PROP_RW int MinPathLength;
//! sigma value for internal GaussianBlur() function.
//! sigma value for internal GaussianBlur() function. Default value is 1.0
CV_PROP_RW float Sigma;
CV_PROP_RW bool SumFlag;
//! when this value is true NFA (Number of False Alarms) algorithm will be used for line and ellipse validation.
//! Default value is true. indicates if NFA (Number of False Alarms) algorithm will be used for line and ellipse validation.
CV_PROP_RW bool NFAValidation;
//! minimun line length to detect.
CV_PROP_RW int MinLineLength;
//! Default value is 6.0
CV_PROP_RW double MaxDistanceBetweenTwoLines;
//! Default value is 1.0
CV_PROP_RW double LineFitErrorThreshold;
//! Default value is 1.3
CV_PROP_RW double MaxErrorThreshold;

void read(const FileNode& fn);
void write(FileStorage& fs) const;
};

/** @brief Detects edges and prepares them to detect lines and ellipses.
/** @brief Detects edges in a grayscale image and prepares them to detect lines and ellipses.

@param src input image
@param src 8-bit, single-channel, grayscale input image.
*/
CV_WRAP virtual void detectEdges(InputArray src) = 0;

/** @brief returns Edge Image prepared by detectEdges() function.

@param dst returns 8-bit, single-channel output image.
*/
CV_WRAP virtual void getEdgeImage(OutputArray dst) = 0;

/** @brief returns Gradient Image prepared by detectEdges() function.

@param dst returns 16-bit, single-channel output image.
*/
CV_WRAP virtual void getGradientImage(OutputArray dst) = 0;

/** @brief returns Edge Segments prepared by detectEdges() function.
*/
CV_WRAP virtual std::vector<std::vector<Point> > getSegments() = 0;

/** @brief Detects lines.

@param lines output Vec<4f> contains start point and end point of detected lines.
@note you should call detectEdges() method before call this.
@param lines output Vec<4f> contains the start point and the end point of detected lines.
@note you should call detectEdges() before calling this function.
*/
CV_WRAP virtual void detectLines(OutputArray lines) = 0;

/** @brief Detects circles and ellipses.

@param ellipses output Vec<6d> contains center point and perimeter for circles.
@note you should call detectEdges() method before call this.
@param ellipses output Vec<6d> contains center point and perimeter for circles, center point, axes and angle for ellipses.
@note you should call detectEdges() before calling this function.
*/
CV_WRAP virtual void detectEllipses(OutputArray ellipses) = 0;

CV_WRAP Params params;

/** @brief sets parameters.

this function is meant to be used for parameter setting in other languages than c++.
this function is meant to be used for parameter setting in other languages than c++ like python.
@param parameters
*/
CV_WRAP void setParams(const EdgeDrawing::Params& parameters);
virtual ~EdgeDrawing() { }
Expand Down
7 changes: 7 additions & 0 deletions modules/ximgproc/src/edge_drawing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ class EdgeDrawingImpl : public EdgeDrawing
void detectLines(OutputArray lines) CV_OVERRIDE;
void detectEllipses(OutputArray ellipses) CV_OVERRIDE;

virtual String getDefaultName() const CV_OVERRIDE;
virtual void read(const FileNode& fn) CV_OVERRIDE;
virtual void write(FileStorage& fs) const CV_OVERRIDE;

Expand Down Expand Up @@ -315,6 +316,11 @@ void EdgeDrawing::Params::write(cv::FileStorage& fs) const
fs << "MaxErrorThreshold" << MaxErrorThreshold;
}

String EdgeDrawingImpl::getDefaultName() const
{
return String("EdgeDrawing");
}

void EdgeDrawingImpl::read(const cv::FileNode& fn)
{
params.read(fn);
Expand Down Expand Up @@ -343,6 +349,7 @@ EdgeDrawingImpl::~EdgeDrawingImpl()

void EdgeDrawingImpl::detectEdges(InputArray src)
{
CV_Assert(!src.empty() && src.type() == CV_8UC1);
gradThresh = params.GradientThresholdValue;
anchorThresh = params.AnchorThresholdValue;
op = params.EdgeDetectionOperator;
Expand Down