laura1978
Messages postés43Date d'inscriptiondimanche 11 novembre 2007StatutMembreDernière intervention21 janvier 2008
-
11 nov. 2007 à 20:58
laura1978
Messages postés43Date d'inscriptiondimanche 11 novembre 2007StatutMembreDernière intervention21 janvier 2008
-
12 nov. 2007 à 17:10
Salut,
Je suis nouvelle dans ce forum et j'ai un probleme en traitement d'image.
je dois ecrire un algo en c++ pour la transformation du niveau de gris d'une image video
en utilisant la formule qui suit, je dois calculer les valeurs de a et b en utilisant la formule suivante:
g'(x,y)= a* g(x,y)3 + b*g(x,y)2
et en tenant compte des conditions suivantes
g'(x,y)=0 für g(x,y)=0 {function minimal}
g'(x,y)=255 für g(x,y)=255 {function maximal}
SVP avez vous une idee car j'ai déjà tout essayée en vain
je serai contente d'avoir votre aide
laura
A voir également:
Écrivez un programme qui transforme une "image couleur" en une "image en niveau de gris".
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 12 nov. 2007 à 09:17
Salut
Avant de convertir ton image en niveau de gris, il faut que je sache si tu arrives à recupérer dans un tableau les valeurs pour tous les pixels des trois canaux R G et B (rouge vert bleu)
Une fois que tu as réussie à faire cela, tu n'as plus qu'à faire la combinaison que tu veux entre ces trois canaux, pour transformer tes 3 canaux en un seul.
Généralement, il suffit de faire: Gris[i][j]=(Red[i][j]+Green[i][j]+Blue[i][j])/3
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 12 nov. 2007 à 09:37
guten tag
c'est quoi le 2 et le 3 dans la formule, des puissances , des rangs ( je pense plutôt) et la formule ne doit pas être complète, il manque une couleur.
g'(x,y)= a* g(x,y)3 + b*g(x,y)2
va voir du côté de CXImage , il y a une macro dans les sources qui fait cette transformation couleur-> niveau de gris.
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 12 nov. 2007 à 10:06
D'après ce que je comprend et dis moi si je me trompe, les pixels de ton anciene image sont codé sur un BYTE!
Un byte c'est 8 bits donc 256 valeurs. Il n'y a donc qu'un canal!
Si tu as une image en couleur en etrée, il faudrait mettre:
laura1978
Messages postés43Date d'inscriptiondimanche 11 novembre 2007StatutMembreDernière intervention21 janvier 2008 12 nov. 2007 à 10:26
le probleme est que j'aimerai calculer le niveau de gris sur l'ensemble de l'image donc
je fais
extern BYTE *puffer1; // pour l'image Initiale qui est selon la formule g(x,y)
extern BYTE *puffer2; // nouvelle image qui est selon la formule g'(x,y) c.a.d la dérivée de g(x,y)
donc j'ai pas besoin de RGB car je veux calculer ce qu'on appelle en allemand "Grauwert- Spreizung" je ne connais pas la signification exacte en Francais
et donc le prof demander alors de calculer ce "Grauwert- Spreizung" à l'aide de la transformation non lineaire
qui est alors cette Formule : g'(x,y) = a* g(x,y)3 + b*g(x,y)2 ou je dois à partir des conditions suivantes:
BYTE gw_max = 0; //ici gw_max signifit grauwert maximale
BYTE gw_min = 255;
determiner les parametres a et b qui me permettrons de resoudre la Transformation non lineare et ensuite je pourrai alors avoir ma nouvelle Image g'(x,y)
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 12 nov. 2007 à 10:40
voilà le lien vers CXImage : http://www.codeproject.com/bitmap/cximage.asp il faut chercher dans le projet, il y une macro commande du genre RGB2GRAY.
A moins que tu dois restaurer les couleurs à partir du niveau de gris ( cf ximadsp.cpp).
Effectivement, il manque des précisions pour ton image codée en couleurs. j'ai vu des codages où , il y avait g(x,y) pour RED, g(x+1,y) pour GREEN et g(x+2,y) pour BLUE. Est-ce ton cas?
laura1978
Messages postés43Date d'inscriptiondimanche 11 novembre 2007StatutMembreDernière intervention21 janvier 2008 12 nov. 2007 à 10:55
le mien je n'ai pas besoin de tenir compte des informations sur des couleurs.
je dois tout simplement resourdre la formule g'(x,y) = a* g(x,y)3 + b*g(x,y)2 donc je cherche un pseudocode pour le resourdre en determinant a et b et tenant compte des Frontieres g'(x,y)=0 pour g(x,y)=0 {ici minimum de la function}et g'(x,y)=255 pour g(x,y)= 255{ici maximum de la function}
donc en fait j'ai une image Video g(x,y) et j'aimerai avoir une nouvelle image g'(x,y) en tenamt compte de cette Transformation non lineare g'(x,y) = a* g(x,y)3 + b*g(x,y)2 c'est tout je n'ai pas besoin d'infos sur le RGB
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 12 nov. 2007 à 11:33
OK je comprend mieux.
Donc en fait ton probleme c'est de déterminer a et b?
Mais a et b doivent etre constant pour tous les pixels de l'image?
La seul solution que je vois est de fixé soit a soit b:
Avec les conditions
g'(x,y)= 0 für g(x,y)=0 {function minimal}
g'(x,y)=255 für g(x,y)=255 {function maximal}
on obtient 3*a + 2*b =1
Tu fixes a et tu calcules b.
une fois que tu as a et b tu peux calculer g'(x,y) grace à ta formule
laura1978
Messages postés43Date d'inscriptiondimanche 11 novembre 2007StatutMembreDernière intervention21 janvier 2008 12 nov. 2007 à 11:39
oui tu compris mon problème est de trouver a et b
j'ai essayée coe tu dis j'ai utilisée les
g'(x,y)=0 für g(x,y)=0 {function minimal}
g'(x,y)=255 für g(x,y)=255 {function maximal} mais je ne me suis pas en sortie car je ne suis pas la meilleur en Math c'est pour celà que je croyais trouvée ici qlq qui pourra m'aider à trouver a et b en Particulier un pseudocode pourque je puisse directement le programmer en c++
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 12 nov. 2007 à 13:04
Ben faudrai faire quelque chose comme ca
int x,y;
double a,b,Coef;
a=10; //tu fixes a
b=(1-3*a)/2 //et tu calcules b
Coef=3*a+2*b;
//pour tous les pixels de ton image
for(x=0; x<Largeur ; x++)
for(y=0; y<Hauteur; y++)
g'[x][y] = Coef* g[x][y];
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 12 nov. 2007 à 14:12
Et bien ca ne change pas grand chose:
avec la condition g'(x,y)=255 für g(x,y)=255 tu as: 255 = a* 2553 + b*255<sup>2
</sup>1 = a * 255 ² + b* 255
donc b=(1-255² * a)/255
<sup>
</sup>a=10; //tu fixes a
b=(1-255² * a) / 255; //et tu calcules b
//pour tous les pixels de ton image
for(x=0; x<Largeur ; x++)
for(y=0; y<Hauteur; y++)
g'[x][y] = a* g[x][y]3 + b*g[x][y]<sup>2