C++ 如何在Matlab或C+中实现简单的滑动窗口算法+;
我是这个网站的新手,这是我的第一个问题。。。 我需要在C++或MATLAB中实现简单的滑动窗口算法 请在这方面帮助我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 -
谢谢假设您需要用于图像处理的通用滑动窗口,在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的回答中所述。