Преобразование изображения в quadtree - PullRequest
2 голосов
/ 28 марта 2012

Мне нужно преобразовать изображение (квадрат) в квадродерево «обычным» способом - нарезать его на четыре, проверить, есть ли только один цвет в каждой части;если да: закрыть узел, иначе: повторить;

Кто-нибудь знает программу с открытым исходным кодом для него?

Желательно на Java, но я могу использовать любой язык.

1 Ответ

2 голосов
/ 11 апреля 2012

Я полагаю, вы могли бы легко написать программу, которая сделает это за вас в OpenCV.При условии, что у вас уже есть некоторая структура данных для хранения фактического дерева, основная функция будет выглядеть примерно так (я написал ее для серых изображений, но это только тест, который нужно повторить три раза для цвета):

void divideAndConquer(Mat im, QuadTree &tree, int parent){
  if(parent<0) 
    return;
  double min,max;
  minMaxLoc(im,&min,&max);
  if(max-min<0.01)
    tree.addNode(parent,closed);
  else{
    tree.addNode(parent,open);
    Mat im0=Mat(im,Range(0,image.rows/2-1),Range(0,image.cols/2-1));
    Mat im1=Mat(im,Range(image.rows/2,image.rows),Range(0,image.cols/2-1));
    Mat im2=Mat(im,Range(0,image.rows/2-1),Range(image.cols/2,image.cols));
    Mat im3=Mat(im,Range(image.rows/2,image.rows),Range(image.cols/2-1,image.cols));
    divideAndConquer(im0, tree, parent/4);
    divideAndConquer(im1, tree, parent/4+1);
    divideAndConquer(im2, tree, parent/4+2);
    divideAndConquer(im3, tree, parent/4+3);
  }
}
...