J'essaie d'implémenter un projet de stabilisation vidéo en C++/cli. Tout d'abord, j'ai des séquences d'images bmp, et j'ai trouvé des vecteurs de mouvement qui montrent la distance entre les pixels chaque image. Par exemple j'ai 256 * 256 image, j'ai choisi la région 200 * 200 dans le premier cadre d'image et le second cadre d'image. Et j'ai trouvé combien de pixel bougent entre la première région et la deuxième région. Quand l'algorithme est passé à la dernière image work.Eventually, j'ai obtenu des vecteurs de mouvement. J'ai fait cette opération en utilisant la méthode absolue absolue. Cela a fonctionné, mais trop bloc slowly.My exemple de code est ici, je trouve qu'un seul vecteur premier indice de mouvement (direction x et direction y):méthode de différence absolue absolue pour projet de stabilisation vidéo en C++/CLI
//M:image height =256
//N.image width =256
//BS:block size=218
//selecting and reading first and second image frame
frame = 1;
s1 = "C:\\bike\\" + frame + ".bmp";
image = gcnew System::Drawing::Bitmap(s1, true);
s2 = "C:\\bike\\" + (frame + 1) + ".bmp";
image2 = gcnew System::Drawing::Bitmap(s2, true);
for (b = 0; b < M; b++){
for (a = 0; a < N; a++)
{
System::Drawing::Color BitmapColor = image->GetPixel(a, b);
I1[b][a] = (double)((BitmapColor . R * 0.3) + (BitmapColor . G * 0.59) + (BitmapColor . B * 0.11));
}
}
for (b = 0; b < M; b++){
for (a = 0; a < N; a++)
{
System::Drawing::Color BitmapColor = image2->GetPixel(a, b);
I2[b][a] = (double)((BitmapColor . R * 0.3) + (BitmapColor . G * 0.59) + (BitmapColor . B * 0.11));
}
}
//finding blocks
a = 0;
for (i = 19; i < 237; i++){
b = 0;
for (j = 19; j < 237; j++){
Blocks[a][b] = I2[i][j];
b++;
}
a++;
}
//finding motion vectors according to the mean absolute differences
//MAD method
for (m = 0; m < (M - BS); m++){
for (n = 0; n < (N - BS); n++){
toplam = 0;
for (i = 0; i < BS; i++){
for (j = 0; j < BS; j++){
toplam += fabs(I1[m + i][n + j] - Blocks[i][j]);
}
}
// finding vectors
if (difference < mindifference) {
mindifference = difference;
MV_x = m;
MV_y = n;
}
}
}
Cet exemple de code worked.But cela est très slowly.I besoin d'implémenter l'optimisation du code. Comment est-ce que je peux faire ceci sans employer pour des cycles, tels que je fais l'indexation en C++/cli comme des codes de MATLAB (ex I1 (1:20) = 100).
Pourriez-vous m'aider s'il vous plaît?
Cordialement ...
Ce n'est pas C, c'est C++/CLI. – Puppy