je suis nouveau sur ce site et voici ma première requête ... i simple besoin coulissant implémentation de l'algorithme de fenêtre en C++ ou Matlab s'il vous plaît aidez-moi à cet égard grâcecomment implémenter algorithme simple fenêtre coulissante dans Matlab ou C++
Répondre
en supposant que vous avez besoin d'une fenêtre coulissante générique pour le traitement d'image, dans Matlab vous pourriez faire:
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
Notez simplement que les boucles dans Matlab sont lentes. Vous feriez mieux d'utiliser certaines des opérations "batch" comme dans la réponse de Jonas. – Amnon
Si la fonction est une simple combinaison linéaire de valeurs de pixels dans le quartier, comme une moyenne, vous peut utiliser CONV2 pour faire la convolution. Il existe également des fonctions spécialisées, telles que MEDFILT2 si vous souhaitez prendre la médiane de chaque fenêtre glissante.
Si la fonction que vous souhaitez appliquer à chaque quartier est plus complexe, vous avez deux options:
Si vous avez assez de mémoire, vous pouvez transformer votre image en un large éventail de telle sorte que tous les correspond à la colonne à une fenêtre coulissante en utilisant IM2COL. Ensuite, vous appliquez votre fonction à chaque colonne et remodelez.
Si vous n'avez pas beaucoup de mémoire, utilisez NLFILTER pour appliquer la fonction à chaque fenêtre coulissante.
Dans tous les cas, vous voudrez peut-être jeter un oeil à PADARRAY votre image à pad avant d'exécuter la convolution pour éviter le rétrécissement de votre image tout en réduisant les effets frontières.
Que diriez-vous quelque chose comme ça pour C++, le code ci-dessous BTW a été écrit pour 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;
}
Pouvez-vous donner un exemple de ce que vous essayez de faire? – tzaman
Une fenêtre glissante est juste une technique générale avec de nombreuses applications différentes - ce n'est pas un algorithme spécifique en tant que tel. Vous aurez besoin d'être plus détaillé sur vos besoins si vous voulez de l'aide avec cela. –
Cher Paul R, vous avez raison je n'ai pas mentionné clairement dans quel but je veux ce code en fait je veux du code pour la fenêtre coulissante pour l'extraction de flux de données. i vous pouvez me aider à cet égard son aide très complet Jonas grâce pour vous aussi comme je l'ai mentionné ici que je dois soumettre mon projet pour « l'extraction de flux de données à base de fenêtre coulissante » intitulée – Zia