Ejemplo n.º 1
0
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();
  }
}
Ejemplo n.º 2
0
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;
}