GpuMat createMat(Size size, int type, bool useRoi) { Size size0 = size; if (useRoi) { size0.width += randomInt(5, 15); size0.height += randomInt(5, 15); } GpuMat d_m(size0, type); if (size0 != size) d_m = d_m(Rect((size0.width - size.width) / 2, (size0.height - size.height) / 2, size.width, size.height)); return d_m; }
void draw_mandelbrot(t_img *img) { const double save_x = img->plan.x_a; const double save_y = img->plan.y_a; img->y = 0; while (img->y < HEIGHT) { img->plan.x_a = save_x; img->x = 0; while (img->x < WIDTH) { d_m(img); ++img->x; img->plan.x_a += img->plan.step_x; } ++img->y; img->plan.y_a += img->plan.step_y; } img->plan.x_a = save_x; img->plan.y_a = save_y; }
const DBSCAN::DistanceMatrix DBSCAN::calc_dist_matrix( const DBSCAN::ClusterData& C, const DBSCAN::FeaturesWeights& W ) { DBSCAN::ClusterData cl_d = C; omp_set_dynamic( 0 ); omp_set_num_threads( m_num_threads ); #pragma omp parallel for for ( size_t i = 0; i < cl_d.size2(); ++i ) { ublas::matrix_column< DBSCAN::ClusterData > col( cl_d, i ); const auto r = minmax_element( col.begin(), col.end() ); double data_min = *r.first; double data_range = *r.second - *r.first; if ( data_range == 0.0 ) { data_range = 1.0; } const double scale = 1 / data_range; const double min = -1.0 * data_min * scale; col *= scale; col.plus_assign( ublas::scalar_vector< typename ublas::matrix_column< DBSCAN::ClusterData >::value_type >( col.size(), min ) ); } // rows x rows DBSCAN::DistanceMatrix d_m( cl_d.size1(), cl_d.size1() ); ublas::vector< double > d_max( cl_d.size1() ); ublas::vector< double > d_min( cl_d.size1() ); omp_set_dynamic( 0 ); omp_set_num_threads( m_num_threads ); #pragma omp parallel for for ( size_t i = 0; i < cl_d.size1(); ++i ) { for ( size_t j = i; j < cl_d.size1(); ++j ) { d_m( i, j ) = 0.0; if ( i != j ) { ublas::matrix_row< DBSCAN::ClusterData > U( cl_d, i ); ublas::matrix_row< DBSCAN::ClusterData > V( cl_d, j ); int k = 0; for ( const auto e : ( U - V ) ) { d_m( i, j ) += fabs( e ) * W[k++]; } d_m( j, i ) = d_m( i, j ); } } const auto cur_row = ublas::matrix_row< DBSCAN::DistanceMatrix >( d_m, i ); const auto mm = minmax_element( cur_row.begin(), cur_row.end() ); d_max( i ) = *mm.second; d_min( i ) = *mm.first; } m_dmin = *( min_element( d_min.begin(), d_min.end() ) ); m_dmax = *( max_element( d_max.begin(), d_max.end() ) ); m_eps = ( m_dmax - m_dmin ) * m_eps + m_dmin; return d_m; }