2010-05-30 61 views
1

我是新來這個網站,這是我第一次查詢...... 我需要簡單的在C滑動窗口算法實現++或MATLAB 請幫我在這方面 感謝如何實現簡單的滑動窗口算法在Matlab或C++

+2

寫你能給的你想要做什麼的例子嗎? – tzaman 2010-05-30 09:17:54

+1

滑動窗口只是一種具有許多不同應用的通用技術 - 它不是一種特定的算法。如果您需要幫助,您需要更詳細地瞭解您的要求。 – 2010-05-30 10:00:14

+0

親愛的保羅R, 你是對的我沒有提到清楚爲什麼我想要這個代碼實際上我想代碼滑動窗口的數據流挖掘。 我可以幫助我在這方面它的非常全面的幫助 喬納斯感謝你也 正如我在這裏提到的,我必須提交我的項目標題爲「基於滑動窗口的數據流挖掘」 – Zia 2010-05-31 13:50:06

回答

8

假設你需要的圖像處理的一般的滑動窗口,在Matlab你可以這樣做:

image = imread('image.png'); 
imageWidth = size(image, 2); 
imageHeight = size(image, 1); 

windowWidth = 32; 
windowHeight = 32; 

for j = 1:imageHeight - windowHeight + 1 
    for i = 1:imageWidth - windowWidth + 1 
     window = image(j:j + windowHeight - 1, i:i + windowWidth - 1, :); 
     % do stuff with subimage 
    end 
end 
+1

請注意,Matlab中的循環很慢。您最好使用Jonas的答案中的一些「批處理」操作。 – Amnon 2010-05-30 14:14:53

4

如果該功能是在附近的像素值,如平均一個簡單的線性組合,你可以使用CONV2進行卷積。還有專門的功能,如MEDFILT2,如果你想獲得每個滑動窗口的中位數。

如果您要應用到鄰近地區的功能更復雜,你有兩個選擇:

  1. 如果你有足夠的內存,您可以將您的圖像轉換成一個大陣,使得每列對應到使用IM2COL的一個滑動窗口。然後你將你的函數應用到每一列並重塑。

  2. 如果您沒有太多內存,請使用NLFILTER將函數應用於每個滑動窗口。

在任何情況下,你可能想在PADARRAY看看墊你的形象,你運行卷積之前,以避免收縮你的形象,同時減少邊界效應。

+0

良好的觀察重新:邊界效應。 – jasonmp85 2010-05-30 13:25:30

+0

謝謝,但我的應用程序是關於數據流挖掘 – Zia 2010-05-31 14:07:50

2

如何像這樣的C++,順便說一句下面的代碼OpenCV的

vector<Rect> get_sliding_windows(Mat& image,int winWidth,int winHeight) 
{ 
    vector<Rect> rects; 
    int step = 16; 
    for(int i=0;i<image.rows;i+=step) 
    { 
     if((i+winHeight)>image.rows){break;} 
     for(int j=0;j< image.cols;j+=step)  
     { 
      if((j+winWidth)>image.cols){break;} 
      Rect rect(j,i,winWidth,winHeight); 
      rects.push_back(rect); 
     } 
    } 
    return rects; 
}