Permalink
Browse files

readme

  • Loading branch information...
1 parent 8d5466e commit 5bdcaa48e433827a001b499f6e9c7fd20740c89c @royshil committed Jan 4, 2013
Showing with 46 additions and 5 deletions.
  1. +42 −1 README.md
  2. +4 −4 SchaeferMLS.cpp
View
@@ -1,4 +1,45 @@
CurveDeformationMLS
===================
-2D Shape/Curve deformation using Moving Least Sqaures
+2D Shape/Curve deformation using Moving Least Sqaures
+
+http://www.morethantechnical.com/2013/01/05/shape-manipulation-with-moving-least-squares-for-curves-w-code/
+
+Build
+-----
+ mkdir build
+ cd build
+ cmake ..
+ make
+
+API
+---
+ //Read curve
+ vector<Point> a;
+ GetCurveForImage(imread("a_slihouette.png", a, false);
+
+ //Convert to Point_<double> - optional
+ vector<Point2d> a_p2d, a_p2d_smoothed;
+ ConvertCurve(a, a_p2d);
+
+ //Get curvature extrema points
+ vector<pair<char,int> > stringrep = CurvatureExtrema(a_p2d, a_p2d_smoothed,0.05,4.0);
+
+ //Get extrema as control points
+ vector<int> control_pts;
+ for(int i=0;i<stringrep.size();i++) {
+ control_pts.push_back(stringrep[i].second);
+ }
+
+ smls.Init(a_p2d, control_pts);
+ smls.UpdateRigid();
+
+ Mat visualized_curve(500,500,CV_8UC3);
+ smls.Draw(visualized_curve);
+
+ namedWindow("MLS");
+ //Implement the onMouse function (or take from repo) to reflect changes in control points
+ setMouseCallback("MLS", onMouse, NULL);
+ imshow("MLS", visualized_curve);
+ waitKey();
+
View
@@ -110,16 +110,16 @@ void MLSDeformCurve(const Mat& src,
int main(int argc, char** argv) {
- Mat src1 = imread("fish-12.png");
+ Mat src1 = imread("../silhouettes/camel-11.png");
if (src1.empty()) {
cerr << "can't read image" << endl; exit(0);
}
vector<Point> a;
GetCurveForImage(src1, a, false);
//move curve a bit to the middle, and scale up
- cv::transform(a,a,getRotationMatrix2D(Point2f(0,0),0,2.0));
- Mat tmp_curve_m(a); tmp_curve_m += Scalar(100,95);
+ cv::transform(a,a,getRotationMatrix2D(Point2f(0,0),0,1.3));
+// Mat tmp_curve_m(a); tmp_curve_m += Scalar(100,95);
vector<Point2d> a_p2d, a_p2d_smoothed;
ConvertCurve(a, a_p2d);
@@ -128,6 +128,6 @@ int main(int argc, char** argv) {
vector<pair<char,int> > stringrep = CurvatureExtrema(a_p2d, a_p2d_smoothed,0.05,4.0);
//Start interactive deformation
- src1.create(Size(700,350), CV_8UC3);
+ src1.create(Size(700,600), CV_8UC3);
MLSDeformCurve(src1,a_p2d,stringrep);
}

0 comments on commit 5bdcaa4

Please sign in to comment.