Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

readme

  • Loading branch information...
commit 5bdcaa48e433827a001b499f6e9c7fd20740c89c 1 parent 8d5466e
@royshil authored
Showing with 46 additions and 5 deletions.
  1. +42 −1 README.md
  2. +4 −4 SchaeferMLS.cpp
View
43 README.md
@@ -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
8 SchaeferMLS.cpp
@@ -110,7 +110,7 @@ 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);
}
@@ -118,8 +118,8 @@ int main(int argc, char** argv) {
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);
}
Please sign in to comment.
Something went wrong with that request. Please try again.