2011-02-11 54 views
2

我們有收到
尺寸爲8x8像素的圖像時,一些2D數據分析器(roiSize = 8),這是由像發送到我們的解析器:C++如何創建簡單的二維區域松雞算法?

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和裏面可以判斷在圖像上找到了一個對象。如果發現它執行確定某些特徵值(某些浮點數)的另一個操作。我想以某種方式創建我的數據的二維表示(大小像(原始 - >寬度/ roiSize-2)X(原始 - >高度/ roiSize-2))所以對每個ROI我會有一個值聲明如果功能是否被發現,如果它是它的特徵值。我需要的是能夠遍歷生成的數據。並實施某種類型的區域松雞算法,以便如果特徵在一個roi上==爲了表徵另一個是8個圍繞它的其中一個,我們以某種方式增長區域並再次檢查,以便我們找到區域...

所以如果我們正在尋找線條,而我們的特徵是線條存在和角度浮動(就像我做的那樣)bool,我們會做類似

1)(我們站在藍色1和2黃色1s是我們感興趣的點)

enter image description here

我們主張我們的「線」,即2個地區,並繼續搜索

enter image description here

我們發現一個ROI帽子特徵涉及到我們的產品線,另一種是沒有,所以我們將返回到ROI後來

enter image description here

所以是有升壓任何幫助的如何做這樣的事情或任何代碼可以幫助您提供?

回答

1

我沒有花時間觀察Grouse算法,但我想你可以使用STL容器(向量,哈希等等)和自定義類的組合來完成對於你的結構(圖像,rois ,地區等)。

例如:

  • 一種imageRoiHash(key=rowIndex, value=roi),或imageRoiHash(key=rowIndex, value=vector<roi>)。我不知道每個圖像行是否可以有一個或多個rois。
  • A roiClass(bool found, TValue value)TValue是一個int,一個字符串或另一個類。 然後你可以處理你的圖像,並用hash [rowIndex]得到每一行中的rois。

或者:

  • 一個imageRoiList(std::vector<roi>),或imageRoiList(std::vector<std::vector<roi>)。這是一個2D結構,您可以在每個圖像行上保留roi或rois。