mirror of
https://github.com/ruby-opencv/ruby-opencv
synced 2023-03-27 23:22:12 -04:00
add documents of CvHuMoments
This commit is contained in:
parent
90c56e4124
commit
9697926055
3 changed files with 101 additions and 62 deletions
|
@ -12,17 +12,11 @@
|
|||
/*
|
||||
* Document-class: OpenCV::CvHuMoments
|
||||
*
|
||||
* moments
|
||||
* Hu invariants
|
||||
*/
|
||||
__NAMESPACE_BEGIN_OPENCV
|
||||
__NAMESPACE_BEGIN_CVHUMOMENTS
|
||||
|
||||
#define DEFINE_CVHUMOMENTS_GETTER(elem) \
|
||||
rb_define_method(rb_klass, #elem, RUBY_METHOD_FUNC(rb_##elem), 0)
|
||||
|
||||
#define CVHUMOMENTS_GETTER(elem) \
|
||||
VALUE rb_##elem(VALUE self) { return DBL2NUM(CVHUMOMENTS(self)->elem); }
|
||||
|
||||
VALUE rb_klass;
|
||||
|
||||
VALUE
|
||||
|
@ -31,33 +25,6 @@ rb_class()
|
|||
return rb_klass;
|
||||
}
|
||||
|
||||
void
|
||||
define_ruby_class()
|
||||
{
|
||||
if (rb_klass)
|
||||
return;
|
||||
/*
|
||||
* opencv = rb_define_module("OpenCV");
|
||||
*
|
||||
* note: this comment is used by rdoc.
|
||||
*/
|
||||
VALUE opencv = rb_module_opencv();
|
||||
|
||||
rb_klass = rb_define_class_under(opencv, "CvHuMoments", rb_cObject);
|
||||
rb_define_alloc_func(rb_klass, rb_allocate);
|
||||
rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), 1);
|
||||
rb_define_method(rb_klass, "to_ary", RUBY_METHOD_FUNC(rb_to_ary), 0);
|
||||
rb_define_alias(rb_klass, "to_a", "to_ary");
|
||||
|
||||
DEFINE_CVHUMOMENTS_GETTER(hu1);
|
||||
DEFINE_CVHUMOMENTS_GETTER(hu2);
|
||||
DEFINE_CVHUMOMENTS_GETTER(hu3);
|
||||
DEFINE_CVHUMOMENTS_GETTER(hu4);
|
||||
DEFINE_CVHUMOMENTS_GETTER(hu5);
|
||||
DEFINE_CVHUMOMENTS_GETTER(hu6);
|
||||
DEFINE_CVHUMOMENTS_GETTER(hu7);
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_allocate(VALUE klass)
|
||||
{
|
||||
|
@ -66,21 +33,12 @@ rb_allocate(VALUE klass)
|
|||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* CvHuMoments.new(<i>src_moments</i>)
|
||||
*
|
||||
* Calculates the seven Hu invariants.
|
||||
* <i>src_moments</i> The input moments
|
||||
*
|
||||
* seven Hu invariants that are defined as:
|
||||
* h1=η20+η02
|
||||
* h2=(η20-η02)²+4η11²
|
||||
* h3=(η30-3η12)²+ (3η21-η03)²
|
||||
* h4=(η30+η12)²+ (η21+η03)²
|
||||
* h5=(η30-3η12)(η30+η12)[(η30+η12)²-3(η21+η03)²]+(3η21-η03)(η21+η03)[3(η30+η12)²-(η21+η03)²]
|
||||
* h6=(η20-η02)[(η30+η12)²- (η21+η03)²]+4η11(η30+η12)(η21+η03)
|
||||
* h7=(3η21-η03)(η21+η03)[3(η30+η12)²-(η21+η03)²]-(η30-3η12)(η21+η03)[3(η30+η12)²-(η21+η03)²]
|
||||
* where ηi,j are normalized central moments of 2-nd and 3-rd orders. The computed values are proved to be invariant to the image scaling, rotation, and reflection except the seventh one, whose sign is changed by reflection.
|
||||
* Calculates the seven Hu invariants
|
||||
* @overload new(src_moments)
|
||||
* @param src_moments [CvMoment] Input moments
|
||||
* @return [CvHuMoments] Output Hu invariants
|
||||
* @opencv_func cvGetHuMoments
|
||||
* @see http://en.wikipedia.org/wiki/Image_moment#Rotation_invariant_moments
|
||||
*/
|
||||
VALUE
|
||||
rb_initialize(VALUE self, VALUE src_moments)
|
||||
|
@ -94,19 +52,73 @@ rb_initialize(VALUE self, VALUE src_moments)
|
|||
return self;
|
||||
}
|
||||
|
||||
CVHUMOMENTS_GETTER(hu1);
|
||||
CVHUMOMENTS_GETTER(hu2);
|
||||
CVHUMOMENTS_GETTER(hu3);
|
||||
CVHUMOMENTS_GETTER(hu4);
|
||||
CVHUMOMENTS_GETTER(hu5);
|
||||
CVHUMOMENTS_GETTER(hu6);
|
||||
CVHUMOMENTS_GETTER(hu7);
|
||||
/*
|
||||
* Returns hu1 invariant
|
||||
* @overload hu1
|
||||
* @return [Number] hu1 invariant
|
||||
*/
|
||||
VALUE rb_hu1(VALUE self) {
|
||||
return DBL2NUM(CVHUMOMENTS(self)->hu1);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* to_ary -> [hu1, hu2, ... ,hu7]
|
||||
*
|
||||
* Return values by Array.
|
||||
* Returns hu2 invariant
|
||||
* @overload hu2
|
||||
* @return [Number] hu2 invariant
|
||||
*/
|
||||
VALUE rb_hu2(VALUE self) {
|
||||
return DBL2NUM(CVHUMOMENTS(self)->hu2);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns hu3 invariant
|
||||
* @overload hu3
|
||||
* @return [Number] hu3 invariant
|
||||
*/
|
||||
VALUE rb_hu3(VALUE self) {
|
||||
return DBL2NUM(CVHUMOMENTS(self)->hu3);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns hu4 invariant
|
||||
* @overload hu4
|
||||
* @return [Number] hu4 invariant
|
||||
*/
|
||||
VALUE rb_hu4(VALUE self) {
|
||||
return DBL2NUM(CVHUMOMENTS(self)->hu4);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns hu5 invariant
|
||||
* @overload hu5
|
||||
* @return [Number] hu5 invariant
|
||||
*/
|
||||
VALUE rb_hu5(VALUE self) {
|
||||
return DBL2NUM(CVHUMOMENTS(self)->hu5);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns hu6 invariant
|
||||
* @overload hu6
|
||||
* @return [Number] hu6 invariant
|
||||
*/
|
||||
VALUE rb_hu6(VALUE self) {
|
||||
return DBL2NUM(CVHUMOMENTS(self)->hu6);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns hu7 invariant
|
||||
* @overload hu7
|
||||
* @return [Number] hu7 invariant
|
||||
*/
|
||||
VALUE rb_hu7(VALUE self) {
|
||||
return DBL2NUM(CVHUMOMENTS(self)->hu7);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns hu invaliants as an Array
|
||||
* @overload to_ary
|
||||
* @return [Array<Number>] Hu invaliants
|
||||
*/
|
||||
VALUE
|
||||
rb_to_ary(VALUE self)
|
||||
|
@ -135,5 +147,32 @@ new_object(CvMoments *src_moments)
|
|||
return object;
|
||||
}
|
||||
|
||||
void
|
||||
init_ruby_class()
|
||||
{
|
||||
#if 0
|
||||
// For documentation using YARD
|
||||
VALUE opencv = rb_define_module("OpenCV");
|
||||
#endif
|
||||
|
||||
if (rb_klass)
|
||||
return;
|
||||
VALUE opencv = rb_module_opencv();
|
||||
|
||||
rb_klass = rb_define_class_under(opencv, "CvHuMoments", rb_cObject);
|
||||
rb_define_alloc_func(rb_klass, rb_allocate);
|
||||
rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), 1);
|
||||
rb_define_method(rb_klass, "to_ary", RUBY_METHOD_FUNC(rb_to_ary), 0);
|
||||
rb_define_alias(rb_klass, "to_a", "to_ary");
|
||||
|
||||
rb_define_method(rb_klass, "hu1", RUBY_METHOD_FUNC(rb_hu1), 0);
|
||||
rb_define_method(rb_klass, "hu2", RUBY_METHOD_FUNC(rb_hu2), 0);
|
||||
rb_define_method(rb_klass, "hu3", RUBY_METHOD_FUNC(rb_hu3), 0);
|
||||
rb_define_method(rb_klass, "hu4", RUBY_METHOD_FUNC(rb_hu4), 0);
|
||||
rb_define_method(rb_klass, "hu5", RUBY_METHOD_FUNC(rb_hu5), 0);
|
||||
rb_define_method(rb_klass, "hu6", RUBY_METHOD_FUNC(rb_hu6), 0);
|
||||
rb_define_method(rb_klass, "hu7", RUBY_METHOD_FUNC(rb_hu7), 0);
|
||||
}
|
||||
|
||||
__NAMESPACE_END_CVHUMOMENTS
|
||||
__NAMESPACE_END_OPENCV
|
||||
|
|
|
@ -20,7 +20,7 @@ __NAMESPACE_BEGIN_CVHUMOMENTS
|
|||
|
||||
VALUE rb_class();
|
||||
|
||||
void define_ruby_class();
|
||||
void init_ruby_class();
|
||||
|
||||
VALUE rb_allocate(VALUE klass);
|
||||
VALUE rb_initialize(VALUE src_moments, VALUE self);
|
||||
|
|
|
@ -679,7 +679,7 @@ extern "C" {
|
|||
mOpenCV::cCvFont::init_ruby_class();
|
||||
mOpenCV::cIplConvKernel::define_ruby_class();
|
||||
mOpenCV::cCvMoments::define_ruby_class();
|
||||
mOpenCV::cCvHuMoments::define_ruby_class();
|
||||
mOpenCV::cCvHuMoments::init_ruby_class();
|
||||
mOpenCV::cCvConvexityDefect::init_ruby_class();
|
||||
|
||||
mOpenCV::cCvSURFPoint::define_ruby_class();
|
||||
|
|
Loading…
Add table
Reference in a new issue