2010-05-30 67 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; 
}