ImgFilterUI::ImgFilterUI() { Fl_Window* w; { Fl_Window* o = mainWindow = new Fl_Window(445, 439, "Intelligent Scissor UI"); w = o; o->user_data((void*)(this)); mouseInfo = new Fl_Output(92, 411, 353, 28, "mouse status:"); { Fl_Menu_Bar* o = mainMenu = new Fl_Menu_Bar(0, 0, 444, 28, "mainMenu"); o->menu(menu_mainMenu); } { ImgView* o = imgView = new ImgView(0, 32, 444, 376); o->box(FL_DOWN_BOX); //revised by JHC w->focus(imgView); } o->end(); } }
svmUI::svmUI() { Fl_Window* w; { Fl_Window* o = mainWindow = new Fl_Window(864, 687, "Single View Metrology User Interface"); w = o; o->user_data((void*)(this)); mouseInfo = new Fl_Output(92, 659, 772, 28, "mouse status:"); { Fl_Menu_Bar* o = mainMenu = new Fl_Menu_Bar(0, 0, 864, 28); o->menu(menu_mainMenu); } { ImgView* o = imgView = new ImgView(0, 29, 864, 628); o->box(FL_DOWN_BOX); //w->focus(imgView); // dch } o->end(); } imgView->svmui = this; mainWindow->resizable(imgView); }
inline void compute_costs_for_row(const ImgView &left, const ImgView &right, PixelsCostType &pixels_distance, const int row, DisparityCostVolume::data_2d_subarray_t &colums_disparity_cost_view) { typedef typename ImgView::value_type pixel_t; typedef DisparityCostVolume::data_1d_subarray_t data_1d_subarray_t; // a pixel (x,y) on the left image should be matched on the right image on the range ([0,x],y) //const int first_right_x = first_left_x - disparity; typename ImgView::x_iterator left_row_it = left.row_begin(row); typename ImgView::x_iterator right_row_begin_it = right.row_begin(row); for(size_t x=0; x < static_cast<size_t>(left.width()); x+=1, ++left_row_it) { data_1d_subarray_t cost_disparity_subarray = colums_disparity_cost_view[x]; const size_t num_disparities = std::min(cost_disparity_subarray.size(), x); typename ImgView::x_iterator right_row_it = right_row_begin_it + x; data_1d_subarray_t::iterator cost_it = cost_disparity_subarray.begin(); for(size_t d=0; d < num_disparities; d+=1, --right_row_it, ++cost_it) { const DisparityCostVolume::cost_t pixel_cost = pixels_distance(*left_row_it, *right_row_it); *cost_it = pixel_cost; } // end of "for each disparity" // set to zero the "disparities out of the image" for(; cost_it != cost_disparity_subarray.end(); ++cost_it) { *cost_it = 0; } } // end of "for each column" return; }
void FastDisparityCostVolumeEstimator::compute_costs_impl(const ImgView &left, const ImgView &right, PixelsCostType &pixels_distance, DisparityCostVolume &cost_volume) { typedef typename ImgView::value_type pixel_t; maximum_cost_per_pixel = pixels_distance.template get_maximum_cost_per_pixel<pixel_t>(); // lazy initialization this->resize_cost_volume(left.dimensions(), cost_volume); //const bool crop_borders = true; const bool crop_borders = false; if(crop_borders) { // FIXME hardcoded values const int top_bottom_margin = 25; // 20 // 10 // pixels const int left_right_margin = 40; //left.width()*0.1; // *0.05 // pixels const int sub_width = left.width() - 2*left_right_margin, sub_height = left.height() - 2*top_bottom_margin; const ImgView left_subview = boost::gil::subimage_view(left, left_right_margin, top_bottom_margin, sub_width, sub_height), right_subview = boost::gil::subimage_view(right, left_right_margin, top_bottom_margin, sub_width, sub_height); const int y_min = top_bottom_margin, y_max = left.height() - top_bottom_margin; const int x_min = left_right_margin, x_max = left.width() - left_right_margin; data_3d_view_t data = cost_volume.get_costs_views(); data_3d_view_t data_subview = data[ boost::indices[range_t(y_min, y_max)][range_t(x_min, x_max)][range_t()] ]; // fill the original volumn with zero fill(data, 0); // for each pixel and each disparity value #pragma omp parallel for for(int row=0; row < sub_height; row +=1) { DisparityCostVolume::data_2d_subarray_t row_slice = data_subview[row]; compute_costs_for_row(left_subview, right_subview, pixels_distance, row, row_slice); } } else { // for each pixel and each disparity value #pragma omp parallel for for(size_t row=0; row < cost_volume.rows(); row +=1) { DisparityCostVolume::data_2d_subarray_t row_slice = cost_volume.columns_disparities_slice(row); compute_costs_for_row(left, right, pixels_distance, row, row_slice); } } // end of "if else crop_borders" return; }