2

我们有一些 2d 数据解析器,它接收大小为 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,我都有一个值声明 if feature是否在其中找到,如果它是它的特征值。我需要的是能够遍历生成的数据。并实现某种区域松鸡算法,以便如果一个 roi 上的特征 == 以另一个是围绕它的 8 个之一的特征,我们会以某种方式增长区域并一次又一次地检查,以便我们找到区域......

因此,如果我们正在搜索线条并且我们的特征对于线条存在和角度浮动来说是布尔值(就像我一样),我们会做类似的事情

1)(我们站在蓝色 1 和 2 黄色 1 是我们的兴趣点)

在此处输入图像描述

我们向我们的“行”提交了 2 个区域并继续搜索

在此处输入图像描述

我们发现一个 roi 上的 hat 特征与我们的线有关,而另一个与我们的线无关,所以我们稍后会回到那个 roi

在此处输入图像描述

那么在提升如何做这样的事情或您可以提供的任何代码帮助方面有什么帮助吗?

4

1 回答 1

1

我没有花任何时间研究 Grouse 算法,但我想您可以为您的结构(图像、rois、区域和很快)。

例如:

  • 一个imageRoiHash(key=rowIndex, value=roi),或imageRoiHash(key=rowIndex, value=vector<roi>)。我不知道每个图像行是否可以有一个或多个 rois。
  • 一个roiClass(bool found, TValue value)TValue是一个 int、一个字符串或另一个类。然后您可以处理您的图像,并使用 hash[rowIndex] 获取每行中的 rois。

或者:

  • 一个imageRoiList(std::vector<roi>),或imageRoiList(std::vector<std::vector<roi>)。这是一个 2D 结构,您可以在其中保留每个图像行的 roi 或 rois。
于 2011-03-17T14:47:22.033 回答