Bonjour,

j'utilise actuellement une bibliothèque de calcul linéaire appelée Armadillo. Cette récente librairie exploite la notion de template au maximum et est décrit comme étant ultra et plus performants que les autres bibliothèques de même types.

je voudrais voir comment se comporte Armadillo au sein ’un algorithme plus complexe. Pour cela, j'ai choisi d’implanter un algo de conversion de couleurs de l’espace RGB vers YUV dont je vais mesurer le temps d'exécution sous matlab et visual.


je déja fait le code matlab suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
function [Y,U,V]= rgb2yuv(I)
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
 
Y=min(bitshift(abs (2104*R+4130*G+802*B+135168) ,-13) ,235);
U=min(bitshift(abs ( -1214*R -2384*G+3598*B+1052672) ,-13) ,240);
V=min(bitshift(abs (3598*R -3013*G-585*B+1052672) ,-13) ,240);
end
et je voudrais l'implémenter en c++, voici le code dont je dispose:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
void RGB2YUV(const cube& i, mat& y, mat& u, mat & v)
{
//récupère les 3 composantes 
mat R = i.slice(0);
mat G = i.slice(1);
mat B = i.slice(2);
// 
y=min(( abs(2104*R+4130*G+802*B+135168) >> 13) ,235);
u=min(( abs( -1214*R -2384*G+3598*B+1052672) >> 13) ,240);
v=min(( abs(3598*R -3013*G -585*B+1052672) >> 13) ,240);
}
le but étant d’effectuer un décalage de 13 bits sur les valeurs absolues des valeurs de mes équations et de prendre le minimum par rapport au valeur mise (235 240 240) et stocker l'ensemble dans une matrice (y u v) mais j'ai vois pas pourquoi ca ne marche pas

quelqu'un peut-il m'aider a résoudre ce problème?