Inscription / Connexion Nouveau Sujet
Niveau Licence Maths 1e ann
Partager :

scilab : problème d'égalisation d'histogramme

Posté par
loannechou
25-05-18 à 15:05

bonjour
je suis étudiante en L1 de maths informatique appliquées. Je travaille sur scilab:
le but est de compléter un code scilab pour obtenir une image qui aurait un nombre identiques de pixels dans chaque couleur entre le blanc et le noir (entre 0 et 255)
ça c'est ce que j'ai traduite de l'énoncé qui est : compléter le code du fichier egal_hist.sci le voici
exec("hist_cumul.sci");

//Transformation de l'égalisation
function q = T(p, Hist)
à compléter
endfunction    

function im_out = hist_egal(im)
à compléter
endfunction


on me donne cette indication :
Pour une image Ia(u, v) de taille M × N dont l'histogramme cumulé est Ha(p), l'´egalisation d'histogramme
consiste à transformer Ia(u, v) en une image Ia0(u, v) = T(Ia(u, v)) de manière à ce que le nouvel histogramme cumulé Ha soit le plus possible linéaire. Pour cela, on applique la transformation
suivante aux pixels de l'image :
T(p) = partie entière de(255*MN/Ha)

avec ceci j'ai donc pu le remplir comme cela:
exec("hist_cumul.sci");

//Transformation de l'égalisation
function q = T(p, Hist)
   q = floor((255*Hist(p))/(M*N))
endfunction    

function im_out = hist_egal(im)
   [M,N]=size(im)
   im_out=T(im)
//   for i=1:M
  //     for j=1:N
    //       im_out(i,j)=T(im(i,j))
      // end
//  end
endfunction


mais il y a toujours ce message :indice invalide ...
je précise que pour le faire marcher j'ai deux programme un qui crer l'histogramme et un autre qui fait un histogramme cumulée:
function classes = mk_classes(n)
    N = 2^n;
    classes = zeros(1, N+1);
    classes(1) = -1;
    for i = 1:N
        classes(i+1) =classes(i)+(256/N) // à compléter
    end
endfunction


exec("mk_classes.sci");
function Hist = hist_cumul(im)
    // calcul de l'histogramme
    n=8
    hist = histc(mk_classes(n), im, normalization=%f);
    // calcul de l'histogramme cumulé
    Hist=zeros(256)
    Hist(1)=hist(1)
    for i=2:256
        Hist(i)=Hist(i-1)+hist(i)
    end
endfunction

Posté par
bbomaths
re : scilab : problème d'égalisation d'histogramme 26-05-18 à 10:07

Bonjour.

Une seule solution pour vous : vérifier les dimensions de tous vos vecteurs et matrices...

Q1 / Sachant que la fonction histc( ) a pour prototype l'un des suivants :

   [cf, ind] = histc(n, data [,normalization])
   [cf, ind] = histc(x, data [,normalization])

Pourquoi ne pas récupérer les 2 éléments cf et ind ?

Q2 / Sachant que la fonction histc( ) retourne les données pour un histogramme cumulé, à quoi sert le bout de code qui suit le commentaire :

// calcul de l'histogramme cumulé

Situé juste après l'appel à histc( ) ? Double cumul ?

Posté par
loannechou
re : scilab : problème d'égalisation d'histogramme 26-05-18 à 19:02

Bonjour
merci pour votre attention
j'ai suivi votre conseil et j'ai vérifié dans chaques programmes si les dimensions étaient les même pour l'image cellules

pour le programme de l'histogramme :
exec("mk_classes.sci");
exec("init_tp_image.sce");
n=8
im = lire_imageBMPgris("cellules.bmp");

h = histc(mk_classes(n), im, normalization=%f);
histplot(mk_classes(n), im, normalization=%f, strf="021")
;
j'obtiens size(h) = 1     256
[cf,ind] = histc(mk_classes(n), im, normalization=%f);
//disp(cf); \\ -> 512   512 (dimension de l'image cellule)
//disp(ind);

pour l'histogramme cumulé:
exec("init_tp_image.sce", -1)
exec("hist_cumul.sci", -1)
im = lire_imageBMPgris("cellules.bmp");

// calcul de l'histogramme cumul´e
Hist = hist_cumul(im);
// affichage de l'histogramme cumul´e
plot(Hist);
size(Hist) // -> ça nous donne 1  256 donc je pense que c'est bon


scilab : problème d\'égalisation d\'histogramme

scilab : problème d\'égalisation d\'histogramme

scilab : problème d\'égalisation d\'histogramme

Posté par
loannechou
re : scilab : problème d'égalisation d'histogramme 26-05-18 à 19:04

pour Q1 je ne savais pas que ça calculé directement l'histogramme cumulé ça ne serait pas l'ajout de mk_classes qui évite de faire un double cumul?

Posté par
loannechou
re : scilab : problème d'égalisation d'histogramme 26-05-18 à 19:07

en fait dans ma tête j'applique seulement une nouvelle formule à l'image cellule qui modifie la valeur des pixel comme par exemple j'aurait pu faire:
nouvelleimage(i,j) = image(i,j) * 2
la il ne me dirait pas indice invalide ...


Hist(im(i,j)*255/(512*512) c'est si différents j'ai testé plein de formule tout rentre :'((((((

scilab : problème d\'égalisation d\'histogramme

Posté par
bbomaths
re : scilab : problème d'égalisation d'histogramme 27-05-18 à 05:36

Bonjour

Pouvez-vous m'envoyer votre image de référence ainsi que vos fichiers ?

Vous trouverez mon adresse e-mail dans mon profil.



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !