void PatchMatch::propagation(const cv::Mat &src, const cv::Mat &dst, RosMat<offsetElement> &NearNei) { for (int i = 0; i < NearNei.rows; i ++) { for (int j = 0; j < NearNei.cols; j ++) { if ( dst_mask.at<double>(i, j) ) { if ( i >= 1 ) { update(src, dst, NearNei(i, j), NearNei(i - 1, j).offset + Point(j, i), Point(j, i)); } if ( j >= 1 ) { update(src, dst, NearNei(i, j), NearNei(i, j - 1).offset + Point(j, i), Point(j, i)); } randomSearch(src, dst, NearNei(i, j), Point(j, i)); } } } for (int i = NearNei.rows - 1; i >= 0; i --) { for (int j = NearNei.cols - 1; j >= 0; j --) { if ( dst_mask.at<double>(i, j)) { if ( i < NearNei.rows - 1 ) { update(src, dst, NearNei(i, j), NearNei(i + 1, j).offset + Point(j, i), Point(j, i)); } if ( j < NearNei.cols - 1 ) { update(src, dst, NearNei(i, j), NearNei(i, j + 1).offset + Point(j, i), Point(j, i)); } randomSearch(src, dst, NearNei(i, j), Point(j, i)); } } } }
void startProcess() { cout<<"process is started"<<endl; cv::pyrDown(image,image); cv::pyrDown(imageDup,imageDup); cv::pyrDown(colorDup,colorDup); cv::pyrDown(colorImage,colorImage); cv::pyrDown(finalImage,finalImage); cv::pyrDown(randomPatchImage,randomPatchImage); //cv::pyrDown(randomPatchesCreation,randomPatchesCreation); cv::pyrDown(randomPatchDup,randomPatchDup); cv::pyrDown(randomMappedImage,randomMappedImage); initiation(); propogation(); cout<<"propogation phase is completed"<<endl; cv::imshow("random patches after propogation",randomPatchDup); addtoImage(); cv::imshow("complete image with random patches after propogation",imageDup); randomSearch(40); cv::imshow("complete image after random search",imageDup); }
void GeneralizedPatchMatch::propagation(const cv::Mat &src, const cv::Mat &dst, dynamicArray2D<p_offset> &NearNei) { for (int i = 0; i < NearNei.rows; i ++) { for (int j = 0; j < NearNei.cols; j ++) { if ( i >= 1 ) { update(src, dst, NearNei.at(i, j), NearNei.at(i - 1, j), Point(j, i)); } if ( j >= 1 ) { update(src, dst, NearNei.at(i, j), NearNei.at(i, j - 1), Point(j, i)); } randomSearch(src, dst, NearNei.at(i, j), Point(j, i)); } } for (int i = NearNei.rows - 1; i >= 0; i --) { for (int j = NearNei.cols - 1; j >= 0; j --) { if ( i < NearNei.rows - 1 ) { update(src, dst, NearNei.at(i, j), NearNei.at(i + 1, j), Point(j, i)); } if ( j < NearNei.cols - 1 ) { update(src, dst, NearNei.at(i, j), NearNei.at(i, j + 1), Point(j, i)); } randomSearch(src, dst, NearNei.at(i, j), Point(j, i)); } } }
int main(int argc, char *argv[]) { int algorithm, times_to_execute=1; do { printf ("Number of queens (1<=nqueens<%d): ", MAXQ); scanf ("%d", &nqueens); } while ((nqueens < 1) || (nqueens > MAXQ)); do { printf ("Algorithm: (1) Random search (2) Hill climbing "); printf ("(3) Simulated Annealing (4) Genetic Algorithm: "); scanf ("%d", &algorithm); } while ((algorithm < 1) || (algorithm > 4)); if (algorithm != 4) { do { printf("How many times to execute? (1<n<10000):"); scanf("%d", ×_to_execute); } while ((times_to_execute < 1 || times_to_execute > 10000)); } initializeRandomGenerator(); int i=0; switch (algorithm) { case 1: randomSearch(); break; case 2: solutions_found = 0; for (i=0; i<times_to_execute; i++) { initiateQueens(1); hillClimbing(); } printf("Algorithm finished. Found a solution in %d out of %d executions.\n", solutions_found, i); break; case 3: solutions_found = 0; for(i = 0; i < times_to_execute; i++) { initiateQueens(1); simulatedAnnealing(); } printf("Algorithm finished. Found a solution in %d out of %d executions.\n", solutions_found, i); break; case 4: initiateQueens(1); geneticAlgorithm(); } return 0; }