C ++ Как создать простой алгоритм 2d Region Grouse? - PullRequest
2 голосов
/ 11 февраля 2011

У нас есть некоторый двумерный анализатор данных, который получает изображения размером 8x8 (roiSize = 8), которые отправляются нашему анализатору из чего-то вроде:

void UseOurParser(IplImage* destination)
{
    int w = destination->width;
    int h = destination->height;

    original = cvCreateImage(cvSize(w, h),IPL_DEPTH_8U,1);
    cvCvtColor(destination,original,CV_RGB2GRAY);

    cout << endl << "Progress:";
    for(int j = 1; j < original->width/roiSize-1; j=j++) {
        cout << "." ;
        for(int i = 1; i < original->height/roiSize-1; i=i++) {    
            cvSetImageROI(original, cvRect(j*roiSize, i*roiSize,roiSize, roiSize));
            IplImage *cropSource = cvCreateImage(cvGetSize(original), original->depth, original->nChannels);
            cvCopy(original, cropSource, NULL);
            ProcessOurParser(cropSource, j, i);
            cvResetImageROI(original);
        }
    } //...

Наш анализатор берет изображение j, i и внутри негоможет определить, был ли объект найден на изображении.И если он был найден, он выполняет другую операцию, которая определяет некоторое значение функции (некоторое число с плавающей запятой).Я хочу каким-то образом создать 2d представление моих данных (размером, например, (original-> width / roiSize-2) X (original-> height / roiSize-2)), чтобы для каждого roi у меня было значение, декларируемое, если функциябыл найден в нем или нет, и если это было его значение функции.Что мне нужно, так это уметь перебирать сгенерированные данные.и реализовать какой-то алгоритм региональных тетеревов так, чтобы, если функция на одном roi была == для функции на другом, который является одним из 8, окружающих его, мы каким-то образом увеличивали регион и проверяли снова и снова, чтобы найти регионы ...

Таким образом, если бы мы искали линии, и наши функции были бы булевыми для существования линий и углового смещения (как я), мы бы сделали что-то вроде

1) (мы стоим синим 1, а 2 желтые 1 - точкинаш интерес)

enter image description here

Мы добавили к нашей "линии" эти 2 региона и продолжаем поиск

enter image description here

Мы нашли функциюна одном рои связано с нашей линией, а на другом нет, поэтому мы вернемся к этому рои позже

enter image description here

, поэтому есть какая-то помощь в повышении того, как сделать такую ​​вещь или любуюкод помощи вы можете предоставить?

1 Ответ

1 голос
/ 17 марта 2011

Я не тратил время на просмотр алгоритма Гроуза, но, полагаю, вы могли бы преуспеть, используя комбинацию контейнеров STL (векторы, хэши и т. Д.) И пользовательских классов для своих структур (изображений, rois, регионы и т. д.).

Например:

  • An imageRoiHash(key=rowIndex, value=roi) или imageRoiHash(key=rowIndex, value=vector<roi>). Я не знаю, можете ли вы иметь один или несколько rois на строку изображения.
  • A roiClass(bool found, TValue value). TValue являющийся типом int, строкой или другим классом. Затем вы можете обработать свое изображение и получить рой в каждом ряду с помощью хеша [rowIndex].

Или:

  • An imageRoiList(std::vector<roi>) или imageRoiList(std::vector<std::vector<roi>). Это двумерная структура, в которой вы сохраняете количество строк или число строк на изображение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...