我是这个网站的新人,这是我的第一个查询...... 我需要在c ++或matlab中实现简单的滑动窗口算法 请在这方面帮助我 感谢
答案 0 :(得分: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 :(得分:4)
如果函数是邻域中像素值的简单线性组合,例如平均值,则可以使用CONV2进行卷积。如果你想获取每个滑动窗口的中位数,还有一些专门的函数,例如MEDFILT2。
如果要应用于每个社区的功能更复杂,您有两种选择:
答案 2 :(得分: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;
}