Commit 5b0ee9e0 authored by siddharth's avatar siddharth

decolor module updated

parent 0802c065
#include "precomp.hpp" #include "precomp.hpp"
#include "opencv2/photo.hpp" #include "opencv2/photo.hpp"
#include "opencv2/imgproc.hpp" #include "opencv2/imgproc.hpp"
#include <opencv2/highgui.hpp>
#include "math.h" #include "math.h"
#include <vector> #include <vector>
#include <limits> #include <limits>
...@@ -10,11 +11,11 @@ ...@@ -10,11 +11,11 @@
using namespace std; using namespace std;
using namespace cv; using namespace cv;
int rounding(double a); double norm(double);
int rounding(double a) double norm(double E)
{ {
return int(a + 0.5); return (sqrt(pow(E,2)));
} }
void cv::decolor(InputArray _src, OutputArray _dst, OutputArray _boost) void cv::decolor(InputArray _src, OutputArray _dst, OutputArray _boost)
...@@ -37,33 +38,20 @@ void cv::decolor(InputArray _src, OutputArray _dst, OutputArray _boost) ...@@ -37,33 +38,20 @@ void cv::decolor(InputArray _src, OutputArray _dst, OutputArray _boost)
return; return;
} }
float sigma = .02; int maxIter = 15;
int maxIter = 8;
int iterCount = 0; int iterCount = 0;
float tol = .0001;
int h = I.size().height; double E = 0;
int w = I.size().width; double pre_E = std::numeric_limits<double>::infinity();
Decolor obj; Decolor obj;
Mat img; Mat img;
double sizefactor;
if((h + w) > 900) img = Mat(I.size(),CV_32FC3);
{ I.convertTo(img,CV_32FC3,1.0/255.0);
sizefactor = (double)900/(h+w);
resize(I,I,Size(rounding(h*sizefactor),rounding(w*sizefactor)));
img = Mat(I.size(),CV_32FC3);
I.convertTo(img,CV_32FC3,1.0/255.0);
}
else
{
img = Mat(I.size(),CV_32FC3);
I.convertTo(img,CV_32FC3,1.0/255.0);
}
obj.init(); obj.init();
vector <double> Cg; vector <double> Cg;
vector < vector <double> > polyGrad; vector < vector <double> > polyGrad;
...@@ -83,9 +71,10 @@ void cv::decolor(InputArray _src, OutputArray _dst, OutputArray _boost) ...@@ -83,9 +71,10 @@ void cv::decolor(InputArray _src, OutputArray _dst, OutputArray _boost)
//////////////////////////////// main loop starting //////////////////////////////////////// //////////////////////////////// main loop starting ////////////////////////////////////////
while (iterCount < maxIter) while(norm(E-pre_E) > tol)
{ {
iterCount +=1; iterCount +=1;
pre_E = E;
vector <double> G_pos; vector <double> G_pos;
vector <double> G_neg; vector <double> G_neg;
...@@ -150,6 +139,11 @@ void cv::decolor(InputArray _src, OutputArray _dst, OutputArray _boost) ...@@ -150,6 +139,11 @@ void cv::decolor(InputArray _src, OutputArray _dst, OutputArray _boost)
for(unsigned int i =0;i<wei.size();i++) for(unsigned int i =0;i<wei.size();i++)
wei[i] = wei1[i]; wei[i] = wei1[i];
E = obj.energyCalcu(Cg,polyGrad,wei);
if(iterCount > maxIter)
break;
G_pos.clear(); G_pos.clear();
G_neg.clear(); G_neg.clear();
temp.clear(); temp.clear();
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment