inline __host__ __device__
    gl8u compute_saliency(i_short2 p, I& input_, int n_, int fast_th_, const A&)
    {

      unsigned max_n = 0;
      unsigned n_bright = 0;
      unsigned n_dark = 0;
      gl8u vp = input_(p);
      unsigned sum_bright = 0;
      unsigned sum_dark = 0;

      for (int i = 0; i < 16; i++)
      {
	gl8u vn = input_(p + i_int2(arch_neighb2d<A>::get(circle_r3_h, circle_r3, i)));
	unsigned char dist = ::abs(int(vn) - int(vp));
	if (dist > fast_th_)
	{
	  if (int(vn) >= int(vp))
	  {
	    n_bright++;
	    sum_bright += dist;
	  }
	  else
	  {
	  n_dark++;
	  sum_dark += dist;
	  }
	}
      }
      max_n = std::max(n_dark, n_bright);

      if (max_n < n_)
	return 0;
      else
	return max(sum_bright, sum_dark);

    }
示例#2
0
int main(int argc, char** argv){
//int main(){
    int i;
    if(argc < 3) {printf("wrong input of arguments!\n format: input_file output_file\n"); return 2;}
    freopen(argv[2], "w", stdout);
    int n = get_length(argv[1]);
    //int n = get_length("input.txt");
    int **M = (int**)malloc(n*sizeof(int*));
    int **D = (int**)malloc(n*sizeof(int*));
    int **save = (int**)malloc(n*sizeof(int*));
    for(i = 0; i < n; i++){
        M[i] = (int*)malloc(n*sizeof(int));
        D[i] = (int*)malloc(n*sizeof(int));
        save[i] = (int*)malloc(n*sizeof(int));
    }
    int* R = (int*)malloc(n*sizeof(int));
    int* S = (int*)malloc(n*sizeof(int));
    
    input_(argv[1], save, n);
    //input_("input.txt", save, n);
    int al = check_data(save, n);
    //output_(1,save,n);
    if(al == 1) {printf("wrong data input\n"); free_all(save, M, D, R, S, n); return 2;}
    int H[1];
    //get_data_from_within(save, "output.txt");
    int cur_pos[1];
    int record[1];
    record[0] = get_first_record(save, M, D, R, S, n, cur_pos, H);  
    if(record[0] == -1) {
        return 1;
    }
    backtracking(save, M, D, R, S, n, record, H);
    //printf("Got here!\n");
    printf("%d\n", H[0] + V[record[0]].L);
    make_cycle(record[0]);
    free_all(save, M, D, R, S, n);
    return 0;
}
示例#3
0
    inline __host__ __device__
    gl8u compute_saliency(i_short2 p, I& input_, int n_, int fast_th_, const A&)
    {
      unsigned max_n = 0;
      unsigned n = 0;
      int status = 2;
      gl8u vp = input_(p);
      unsigned sum_bright = 0;
      unsigned sum_dark = 0;

      // if (n_ == 15)
      // {
      // 	int to_test[3] = {0, 4, 12, 0};
      // 	for (int i = 0; i < 3; i++)
      // 	{
      // 		gl8u vn = input_(p + i_int2(arch_neighb2d<A>::get(circle_r3_h, circle_r3, to_test[i])));
      // 		int sign = int(vn) > int(vp);
      // 		unsigned char dist = ::abs(int(vn) - int(vp));

      // 		if (dist > fast_th_)
      // 			if (sign == status) n++;
      // 			else
      // 			{
      // 				if (n > max_n)
      // 					max_n = n;
      // 				status = sign;
      // 				n = 1;
      // 			}
      // 		else
      // 		{
      // 			if (n > max_n)
      // 				max_n = n;
      // 			status = 2;
      // 		}
      // 	}
      // 	if (n < 3) return 0;
      // }

      if (n_ >= 9)
      {
      	int to_test[6] = {0, 4, 8, 12, 0, 4};
      	int equals = 0;
      	for (int i = 0; i < 6; i++)
      	{
      	  gl8u vn = input_(p + i_int2(arch_neighb2d<A>::get(circle_r3_h, circle_r3, to_test[i])));
      	  int sign = int(vn) > int(vp);
      	  unsigned char dist = ::abs(int(vn) - int(vp));

      	  if (dist > fast_th_)
      	    if (sign == status) { n++; }
      	    else
      	    {
      	      if (n > max_n)
      		max_n = n;
      	      status = sign;
      	      n = 1;
      	    }
      	  else
      	  {
      	    if (n > max_n)
      	      max_n = n;
      	    status = 2;
      	    equals++;
      	    if (i < 4 && n_ >= 12 && equals >= 2) return 0;
      	  }
      	}
      	if (n > max_n)
      	  max_n = n;
      	if (n_ >= 12 && max_n < 3) return 0;
      	else if (n_ >= 8 && max_n < 2) return 0;
      }

      n = 0;
      status = 2;
      max_n = 0;
      for (int i = 0; i < 16; i++)
      {
	gl8u vn = input_(p + i_int2(arch_neighb2d<A>::get(circle_r3_h, circle_r3, i)));
	int sign = int(vn) > int(vp);
	unsigned char dist = ::abs(int(vn) - int(vp));
	if (dist > fast_th_)
	{
	  if (sign == status) n++;
	  else
	  {
	    if (n > max_n)
	      max_n = n;
	    status = sign;
	    n = 1;
	  }

	  if (vn < vp)
	    sum_dark += dist;
	  else
	    sum_bright += dist;
	}
	else
	{
	  if (n > max_n)
	    max_n = n;
	  status = 2;
	}
      }

      if (n != 16 && status != 2)
      {
	int i = 0;
	while (true)
	{
	  gl8u vn = input_(p + i_int2(arch_neighb2d<A>::get(circle_r3_h, circle_r3, i)));
	  int sign = int(vn) > int(vp);
	  unsigned char dist = ::abs(int(vn) - int(vp));

	  if (dist <= fast_th_ || sign != status) break;

	  n++;
	  i++;
	  assert(i < 16);
	}

      }

      if (n > max_n)
	max_n = n;

      if (max_n < n_)
	return 0;
      else
	return max(sum_bright, sum_dark);
	// return sum_bright;
    }
示例#4
0
文件: main.cpp 项目: cumirror/lexertl
void test_unicode()
{
    lexertl::cmatch r_;
    const char *i_ = "";

    r_.clear();
    r_.reset(i_, i_);

    const char utf8_[] = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88\x7f";
    lexertl::basic_utf8_in_iterator<const char *, int> u8iter_(utf8_,
        utf8_ + sizeof(utf8_));
    int i = *u8iter_; // 0x10346

    i = *++u8iter_; // 0x65e5
    i = *u8iter_++; // 0x65e5
    i = *u8iter_; // 0x0448
    i = *++u8iter_; // 0x7f

    const wchar_t utf16_[] = L"\xdbff\xdfff\xd801\xdc01\xd800\xdc00\xd7ff";
    lexertl::basic_utf16_in_iterator<const wchar_t *, int> u16iter_(utf16_,
        utf16_ + sizeof(utf16_) / sizeof(wchar_t));

    i = *u16iter_; // 0x10ffff
    i = *++u16iter_; // 0x10401
    i = *u16iter_++; // 0x10401
    i = *u16iter_; // 0x10000
    i = *++u16iter_; // 0xd7ff

    // Not all compilers have char32_t, so use int for now
    lexertl::basic_rules<char, int> rules_(lexertl::icase);
    lexertl::basic_state_machine<int> sm_;
    const int in_[] = {0x393, ' ', 0x393, 0x398, ' ', 0x398,
        '1', ' ', 'i', 'd', 0x41f, 0};
    std::basic_string<int> input_(in_);
    const int *iter_ = input_.c_str();
    const int *end_ = iter_ + input_.size();
    lexertl::match_results<const int *> results_(iter_, end_);

    rules_.push("\\p{LC}[\\p{LC}0-9]*", 1);
    lexertl::basic_generator<lexertl::basic_rules<char, int>,
        lexertl::basic_state_machine<int> >::build(rules_, sm_);

#ifdef WIN32
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD dwBytesWritten = 0;
#endif

    do
    {
#ifdef WIN32
        std::wstring str_;
#else
        std::string str_;
#endif

        lexertl::lookup(sm_, results_);

#ifdef WIN32
        str_.assign(lexertl::basic_utf16_out_iterator<const int *>
            (results_.start, results_.end),
            lexertl::basic_utf16_out_iterator<const int *>
            (results_.end, results_.end));
        std::wcout << L"Id: " << results_.id << L", Token: '";
        ::WriteConsoleW(hStdOut, str_.c_str(), str_.size(), &dwBytesWritten, 0);
        std::wcout << '\'' << std::endl;
#else
        str_.assign(lexertl::basic_utf8_out_iterator<const int *>
            (results_.start, results_.end),
            lexertl::basic_utf8_out_iterator<const int *>
            (results_.end, results_.end));
        std::cout << "Id: " << results_.id << ", Token: '" <<
            str_ << '\'' << std::endl;
#endif
    } while (results_.id != 0);
}