void BvhTetrahedronSystem::initOnDevice() { std::cout<<"\n tetrahedron system init on device"; m_deviceTetrahedronVicinityInd->create(numTetrahedronVicinityInd() * 4); m_deviceTetrahedronVicinityStart->create((numTetrahedrons() + 1) * 4); m_deviceTetrahedronVicinityInd->hostToDevice(hostTetrahedronVicinityInd()); m_deviceTetrahedronVicinityStart->hostToDevice(hostTetrahedronVicinityStart()); m_vicinity->create(numTetrahedrons()*TETRAHEDRONSYSTEM_VICINITY_LENGTH*4); tetrasys::writeVicinity((int *)vicinity(), (int *)m_deviceTetrahedronVicinityInd->bufferOnDevice(), (int *)m_deviceTetrahedronVicinityStart->bufferOnDevice(), numTetrahedrons()); CudaMassSystem::initOnDevice(); setNumPrimitives(numTetrahedrons()); CudaLinearBvh::initOnDevice(); }
/* * Testing the perturbers */ int main(int argc, char** argv) { if (argc != 2) BNB_ERROR_REPORT("Usage: searchmbh.exe json_file\n"); std::string jsons; FileUtils::getStringFromFile(argv[1], jsons); lur::ParseJson::parseModelData(jsons, mm); double ev; lur::ParseJson::parseLatticeData(jsons, mm, ev, x); #if 0 lur::PotentialCutter pc(6, 0.5, lur::ljpotent); lur::PairPotentialEnergy enrg(mm, pc); #endif #if 0 // Morse lur::PairPotentialEnergy enrg(mm, morsepotent); #endif #if 1 // Tersoff lur::TersoffParams tparam; lur::fillCarbonParametersTersoffOriginal(tparam); lur::TersoffUtils tutils(tparam); lur::TersoffEnergy enrg(mm, tutils); //enrg.setFixedAtoms(true); #endif const int N = mm.mNumLayers * 3; lur::LurieObj obj(enrg, mm); NumGradObjective<double> nobj(obj); nobj.setH(1E-8); Box<double> box(N); lur::ParseJson::parseBoxData(jsons, box); NlpProblem<double> prob; prob.mBox = box; prob.mObj = &obj; BBStopper stp; BBBoxDescent<double> locs(box, &stp); locs.getOptions().mHInit = 4; locs.getOptions().mDec = 0.5; locs.getOptions().mHLB = 1e-6; locs.getOptions().mInc = 1.75; locs.setObjective(&nobj); RndFill<double> rfill(box); Box<double> vicinity(N); initVicinity(N, vicinity); #if 0 StaticPerturber<double> perturber(prob, vicinity); #else AdaptPerturber<double> perturber(prob, vicinity, AdaptPerturber<double>::Params({1, .01, 2, 0.1, 1.1})); #endif #if 0 MBHBoxCon<double> mbhbc(prob, perturber, H); #else MBHBoxCon<double> mbhbc(prob, perturber, H, &locs); #endif signal(SIGINT, output); bv = mbhbc.search(x); std::cout << "Found v = " << bv << "\n"; VecUtils::vecPrint(N, x); std::string json; json += "{\n"; lur::GenJSON::genModel(mm, json); json += ", \n"; lur::GenJSON::genBox(box, json); json += ", \n"; lur::GenJSON::genLattice(mm, bv, x, json); json += "\n}\n"; std::cout << json << "\n"; return 0; }
void AdaptAver::adaptMedian(int curx, int cury, int maxR) { //адаптивный фильтр для одного пикселя QColor pixel = QColor(0, 0, 0, 255); for (int i = 1; i <= maxR; i++) { //до тех пор пока окрестность не расширится до максимального размера QList<int> proxArrayR = vicinity(&image, i, curx, cury, 1); //берем окрестность по красному каналу int Zmin = listMin(proxArrayR); //минимальное значение в ней int Zmax = listMax(proxArrayR); //максимальное int Zmed = median(proxArrayR); //медианное int value = proxArrayR[proxArrayR.size()/2]; //значение самого текущего пикселя //QDebug () <<"red"<< Zmin << Zmax << Zmed << value; if ((Zmin < Zmed) && (Zmed < Zmax)) { //проверяем первое условие if ((Zmin < value) && (value < Zmax)) { //проверяем второе условие pixel.setRed(value); //если выполнено оставляем яркость без изменения //QDebug() << "1"; break; } else { pixel.setRed(Zmed); //если нет то возвращаем медианное значение //QDebug() << "2"; break; } } if (i == maxR) //если оба условия не выполнены и мы дошли до конца цикла pixel.setRed(value); //оставляем пиксель без изменений } //далее всё то же самое еще 2 раза для 2х каналов (зеленый и синий) for (int i = 1; i <= maxR; i++) { QList<int> proxArrayG = vicinity(&image, i, curx, cury, 2); int Zmin = listMin(proxArrayG); int Zmax = listMax(proxArrayG); int Zmed = median(proxArrayG); int value = proxArrayG[proxArrayG.size()/2]; //QDebug () <<"green"<< Zmin << Zmax << Zmed << value; if ((Zmin < Zmed) && (Zmed < Zmax)) { if ((Zmin < value) && (value < Zmax)) { pixel.setGreen(value); //QDebug() << "3"; break; } else { pixel.setGreen(Zmed); //QDebug() << "4"; break; } } if (i == maxR) pixel.setGreen(value); } for (int i = 1; i <= maxR; i++) { QList<int> proxArrayB = vicinity(&image, i, curx, cury, 3); int Zmin = listMin(proxArrayB); int Zmax = listMax(proxArrayB); int Zmed = median(proxArrayB); int value = proxArrayB[proxArrayB.size()/2]; //QDebug () <<"blue"<< Zmin << Zmax << Zmed << value; if ((Zmin < Zmed) && (Zmed < Zmax)) { if ((Zmin < value) && (value < Zmax)) { pixel.setBlue(value); //QDebug() << "5"; break; } else { pixel.setBlue(Zmed); //QDebug() << "6"; break; } } if (i == maxR) pixel.setBlue(value); } result.setPixel(curx, cury, pixel.rgb()); //записываем пиксель в результирующую картинку }