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
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
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.
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:
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)
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?
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
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
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++
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];
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