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:
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 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
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
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); }
quelqu'un peut-il m'aider a résoudre ce problème?
Partager