@@ -16,48 +16,15 @@ ETF::ETF(Size s) {
1616
1717void ETF::Init (Size s) {
1818 flowField = Mat::zeros (s, CV_32FC3);
19- GVF = Mat::zeros (s, CV_32FC3);
2019 refinedETF = Mat::zeros (s, CV_32FC3);
2120 gradientMag = Mat::zeros (s, CV_32FC3);
22-
23- halfw = 4 ;
24- smoothPasses = 2 ;
25- }
26-
27- void ETF::ReadFlow (string file, Size s) {
28- FILE *stream = fopen (file.c_str (), " rb" );
29- if (!stream) {
30- // std::cout<<"ERROR!! Can't read "<<featurefile<<'\n';
31- return ;
32- }
33-
34- int vf_w, vf_h;
35- int sint = sizeof (int );
36-
37- fread ((void *)&(vf_w), sint, 1 , stream);
38- fread ((void *)&(vf_h), sint, 1 , stream);
39-
40- int sfloat = sizeof (float );
41- float *data = new float [vf_w*vf_h * 2 ];
42- fread ((void *)(data), sfloat, vf_w*vf_h * 2 , stream);
43-
44- resize (flowField, flowField, Size (vf_w, vf_h), 0 , 0 , CV_INTER_LINEAR);
45-
46-
47- for (int j = 0 ; j < vf_h; j++) {
48- for (int i = 0 ; i < vf_w; i++) {
49- int index = j*vf_w + i;
50- float dx = data[index * 2 + 1 ];
51- float dy = data[index * 2 ];
52- flowField.at <Vec3f>(vf_h - j - 1 , i) = Vec3f (dx, -dy, 0.0 ); // x,y swap??
53-
54- }
55- }
56- resize (flowField, flowField, s, 0 , 0 , CV_INTER_LINEAR);
5721}
5822
59- // Generate ETF of input image as flowfield
60- void ETF::gen_ETF (string file, Size s) {
23+ /* *
24+ * Generate initial ETF
25+ * by taking perpendicular vectors(counter-clockwise) from gradient map
26+ */
27+ void ETF::initial_ETF (string file, Size s) {
6128 resizeMat (s);
6229
6330 Mat src = imread (file, 1 );
@@ -70,20 +37,11 @@ void ETF::gen_ETF(string file, Size s) {
7037 Mat grad_x, grad_y, abs_grad_x, abs_grad_y;
7138 Sobel (src_n, grad_x, CV_32FC1, 1 , 0 , 5 );
7239 Sobel (src_n, grad_y, CV_32FC1, 0 , 1 , 5 );
73- normalize (grad_x, abs_grad_x, 0 , 1 , NORM_MINMAX);
74- normalize (grad_y, abs_grad_y, 0 ,1 ,NORM_MINMAX);
75- // convertScaleAbs(grad_y, abs_grad_y);
7640
7741 // Compute gradient
78- Mat magn;
7942 magnitude (grad_x, grad_y, gradientMag);
8043 normalize (gradientMag, gradientMag, 0.0 , 1.0 , NORM_MINMAX);
8144
82- // Show gradient
83- // imshow("Magnitude", grad_x);
84- // imshow("Magni5tude", grad_y);
85- // waitKey();
86-
8745 flowField = Mat::zeros (src.size (), CV_32FC3);
8846 for (int i = 0 ; i < src.rows ; i++) {
8947 for (int j = 0 ; j < src.cols ; j++) {
@@ -125,9 +83,6 @@ void ETF::computeNewVector(int x, int y, const int kernel) {
12583 float w_m = computeWm (gradientMag.at <float >(y, x), gradientMag.at <float >(r, c));
12684 float w_d = computeWd (t_cur_x, t_cur_y);
12785 t_new += phi*t_cur_y*w_s*w_m*w_d;
128- // printf("%f, %f, %f, %f, (%f, %f)\n", phi, w_s, w_m, w_d, t_cur_y[1], t_cur_y[1]);
129-
130- // if(t_new == Vec3f(0,0,0))t_new=t_cur_x;
13186 }
13287 }
13388 refinedETF.at <Vec3f>(y, x) = normalize (t_new);
@@ -162,64 +117,6 @@ float ETF::computeWd(cv::Vec3f x, cv::Vec3f y) {
162117 return abs (x.dot (y));
163118}
164119
165- // void ETF::GVF()
166- // {
167- // //Mat tmp_n = Mat::zeros(Size(256, 256), CV_32FC3);
168- //
169- // ////Addition_B is CV_32F ,but we need CV_32FC3 to store vec3f
170- // ////create 3 same CV_32F channel and merge to create CV_32FC3 Mat
171- // //vector<Mat> channels;
172- // //Mat c = Mat::zeros(tmp_n.size(), CV_32F);
173- // //Addition_B.convertTo(c, CV_32F, 255);
174- // //channels.push_back(c);
175- // //channels.push_back(c);
176- // //channels.push_back(c);
177- // //merge(channels, tmp_n);
178- //
179- // //normalize(tmp_n, tmp_n, 0.0, 1.0, NORM_MINMAX, CV_32FC3);
180- // //GaussianBlur(tmp_n, tmp_n, Size(91, 91), 0, 0);
181- //
182- // ///// Generate grad_x and grad_y
183- // //Mat dX, dY;
184- // //Sobel(tmp_n, dX, CV_32F, 1, 0, 3, 1, 0, 1);
185- // //Sobel(tmp_n, dY, CV_32F, 0, 1, 3, 1, 0, 1);
186- //
187- // //gvf = Mat::zeros(tmp_n.size(), CV_32FC3);
188- // //for (int i = 0; i < tmp_n.rows; i++)
189- // //{
190- // // for (int j = 0; j < tmp_n.cols; j++)
191- // // {
192- // // Vec3f u = dX.at<cv::Vec3f>(i, j) / 255.0; //-255~255
193- // // Vec3f v = dY.at<cv::Vec3f>(i, j) / 255.0;
194- //
195- // // float x = u.dot(u);
196- // // float y = v.dot(v);
197- // // float z = v.dot(u);
198- // // float temp = y*y - 2.0*x*y + x*x + 4.0*z*z;
199- // // float lambda1 = 0;
200- // // lambda1 = 0.5 * (y + x + sqrt(temp));
201- // // gvf.at<cv::Vec3f>(i, j) = normalize(Vec3f(z,x - lambda1, 0.0));
202- //
203- // // if (gvf.at<cv::Vec3f>(i, j) == Vec3f(0.0, 0.0, 0.0))
204- // // {
205- // // gvf.at<cv::Vec3f>(i, j) = Vec3f(0.0, 1.0, 0.0);
206- // // }
207- // // }
208- // //}
209- //
210- // //for (int i = 0; i < gvf.rows; i++)
211- // //{
212- // // for (int j = 0; j < gvf.cols; j++)
213- // // {
214- // // Vec3f v = gvf.at<cv::Vec3f>(i, j);
215- // // gvf.at<cv::Vec3f>(i, j) = Vec3f(-v[1], v[0], 0.0);
216- // // }
217- // //}
218- // //resize(gvf, gvf, Mask.size(), 0, 0, CV_INTER_LINEAR);
219- // //flowField = gvf.clone();
220- //
221- // }
222-
223120void ETF::rotateFlow (Mat& src, Mat& dst, float theta) {
224121 theta = theta / 180.0 * M_PI;
225122
@@ -236,7 +133,6 @@ void ETF::rotateFlow(Mat& src, Mat& dst, float theta) {
236133
237134void ETF::resizeMat (Size s) {
238135 resize (flowField, flowField, s, 0 , 0 , CV_INTER_LINEAR);
239- resize (GVF, GVF, s, 0 , 0 , CV_INTER_LINEAR);
240136 resize (refinedETF, refinedETF, s, 0 , 0 , CV_INTER_LINEAR);
241137 resize (gradientMag, gradientMag, s, 0 , 0 , CV_INTER_LINEAR);
242138}
0 commit comments