Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Matlab或C+中实现简单的滑动窗口算法+;_C++_Matlab_Visual C++_Window_Sliding - Fatal编程技术网

C++ 如何在Matlab或C+中实现简单的滑动窗口算法+;

C++ 如何在Matlab或C+中实现简单的滑动窗口算法+;,c++,matlab,visual-c++,window,sliding,C++,Matlab,Visual C++,Window,Sliding,我是这个网站的新手,这是我的第一个问题。。。 我需要在C++或MATLAB中实现简单的滑动窗口算法 请在这方面帮助我 谢谢假设您需要用于图像处理的通用滑动窗口,在Matlab中,您可以执行以下操作: image = imread('image.png'); imageWidth = size(image, 2); imageHeight = size(image, 1); windowWidth = 32; windowHeight = 32; for j = 1:imageHeight -

我是这个网站的新手,这是我的第一个问题。。。 我需要在C++或MATLAB中实现简单的滑动窗口算法 请在这方面帮助我
谢谢

假设您需要用于图像处理的通用滑动窗口,在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

如果函数是邻域中像素值的简单线性组合,例如平均值,则可以使用进行卷积。还有一些专门的函数,例如,如果您想取每个滑动窗口的中间值

如果要应用于每个邻域的函数更复杂,则有两个选项:

  • 如果您有足够的内存,您可以将图像转换为一个大数组,这样每一列都对应于一个滑动窗口。然后将函数应用于每一列并重新塑造形状

  • 如果没有那么多内存,请使用将该函数应用于每个滑动窗口


  • 无论如何,在运行卷积之前,你可能需要查看一下你的图像,以避免缩小图像,同时减少边界效应。

    C++中的一些类似的东西,BTW。下面的代码是为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;
    }
    
    vector get\u滑动窗口(Mat&image、int-winWidth、int-winHeight)
    {
    向量矩形;
    int步=16;
    对于(int i=0;iimage.rows){break;}
    对于(int j=0;jimage.cols){break;}
    Rect Rect(j,i,winWidth,winHeight);
    推回(rect);
    }
    } 
    返回矩形;
    }
    
    你能举个例子说明你想做什么吗?滑动窗口只是许多不同应用的一种通用技术,它本身不是一种特定的算法。亲爱的Paul R,你是对的,我没有明确提到我想要这段代码的目的,实际上我想要用于数据流挖掘的滑动窗口的代码。我你可以在这方面帮助我这非常有帮助Jonas非常感谢你也正如我在这里提到的我必须提交我的题为“基于滑动窗口的数据流挖掘”的项目@zeedotcom:我不熟悉数据流挖掘。你能用一个简单的例子解释一下吗?理想情况下,你应该编辑你的问题。很好的观察:边界效应。谢谢,但我的应用程序是关于数据流缩小的。请注意,Matlab中的循环速度很慢。您最好使用一些“批处理”操作,如Jonas的回答中所述。