C++如何创建简单的二维区域松鸡算法?

发布于 2024-10-17 01:32:56 字数 1651 浏览 2 评论 0 原文

我们有一些 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,并且在其中可以确定是否在图像上找到了对象。如果找到,它会执行另一个操作来确定某些特征值(某些浮点数)。我想以某种方式创建我的数据的二维表示(大小如 (original->width/roiSize-2) X (original->height/roiSize-2)),所以对于每个 roi 我都会有一个值声明是否在其中找到特征以及是否是其特征值。我需要的是能够迭代生成的数据。并实现某种区域松鸡算法,这样如果一个 roi 上的特征 == 到另一个 roi 上的特征,即它周围的 8 个区域之一,我们就会以某种方式增长区域并一次又一次地检查,以便我们找到区域...

所以如果我们正在搜索对于线,我们的特征是 bool 线存在和角度浮动(就像我一样)我们会做类似

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

在此处输入图像描述

我们已提交到 2 个区域的“线路”并继续搜索

在此处输入图像描述

我们发现一个 roi 上的帽子特征与我们的线路相关,而另一个 roi 则不然,因此我们稍后将返回该 roi

在此处输入图像描述

那么,对于如何执行此类操作,Boost 有任何帮助吗?或者您可以提供任何代码帮助吗?

We have some 2d data parser that recives images of size 8x8 (roiSize=8) which are sent to our parser from something like:

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);
        }
    } //...

Our parser takes an image j, i and inside it can determine if an object was found on an image. And if it was found it performs another operation that determins some feature value (some float). I want somehow to create a 2d representation of my data (of size like (original->width/roiSize-2) X (original->height/roiSize-2)) so to each roi I'd have a value declaring if feature was found in it or not and if it was its feature value. What I need is to be capable to iterate through generated data. and implement some kind of region grouse algorithm so that if feature on one roi is == to feature on another that is one of 8 surrounding it we somehow grow region and check again and again so we find regions...

So if we were searching for lines and our features were bool for line existence and angle float (as I do) we would do something like

1) (we stand on blue 1 and 2 yellow 1s are points of our interest)

enter image description here

We submited to our "line" that 2 regions and continue searching

enter image description here

We found hat feature on one roi is related to our line and another is not so we will return to that roi later

enter image description here

so is there any help in boost on how to do such thing or any code help you can provide?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧时光的容颜 2024-10-24 01:32:56

我没有花任何时间研究 Grouse 算法,但我想您可以很好地使用 STL 容器(向量、哈希等)和自定义类的组合来构建您的结构(图像、rois、区域和很快)。

例如:

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

或者:

  • imageRoiList(std::vector),或 imageRoiList(std::vector)。这是一个 2D 结构,您可以在其中保存每个图像行的 roi 或 rois。

I haven't spent any time watching into the Grouse algorithm, but I guess you could do well using a combination of STL containers (vectors, hashes, and so on) and custom classes, for your structures (images, rois, regions, and so on).

For example:

  • An imageRoiHash(key=rowIndex, value=roi), or imageRoiHash(key=rowIndex, value=vector<roi>). I don't know if you can have one or more rois per image row.
  • A roiClass(bool found, TValue value). TValue being an int, a string, or another class.
    Then you can process your image, and get the rois in each row with hash[rowIndex].

Or:

  • An imageRoiList(std::vector<roi>), or imageRoiList(std::vector<std::vector<roi>). This is, a 2D structure where you keep the roi or rois per image row.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文