2016-10-17 5 views
0

Je fais mes devoirs et j'ai encouragé le problème. Ma tâche consiste à écrire une fonction dans SciLab qui convertit l'image normale en sépia. Je dois utiliser un algorithme qui multiplie la couleur rouge par alpha et la couleur bleue par bêta où alpha> 1 et bêta < 1 et alpha + bêta = 2.Traitement d'image dans SciLab (image convergente en sépia)

Ceci est mon code. Pour une raison quelconque ces 2 lignes ne fonctionnent pas correctement:

//img2(i,j,2) = img(i,j); 
//img2(i,j,3) = uint8(double(img(i,j))*beta); 

function out = Ex2(im,alpha) 
[h w d] = size(im); 
img2 = uint16(zeros(h,w,d)); 
img = rgb2gray(im); 
beta = 2-alpha; 
for i=1:h 
    for j=1:w 
     img2(i,j,1) = uint16(double(img(i,j))*alpha); //condition if > 255 
     if img2(i,j,1) > 255 then 
      img2(i,j,1) = 255; 
     end 
     //img2(i,j,2) = img(i,j); 
     //img2(i,j,3) = uint8(double(img(i,j))*beta); 
    end 
end 
out = img2; 
endfunction 
+0

nous donner des exemples d'alpha et bêta. Aussi, quoi avec le '//'? ce n'est pas des commentaires matlab. S'il vous plaît poster la vraie fonction matlab. Je suppose que cela peut être Scilab? –

+0

Aussi, si je change le code pour être lisible MATLAB, cela fonctionne très bien, je gett très belles images sépia –

+0

Ouais c'est SciLab, étiqueté aussi comme MatLab parce que je pense que ces 2 programmes sont très similaires un exemple de l'appel de cette fonction est Ex2 (myimage, 1.2); – Seoner

Répondre

0

Il est plus simple moyen d'obtenir le résultat

function sepia2(img) 
    img = rgb2gray(img); 
    img = uint16(img); 
    [h w] = size(img); 

    W = 30; 

    for i=1:h 
     for j=1:w 
      if (img(i,j) + (2*W)) > 255 then 
       out(i,j,1) = 255; 
       else 
       out(i,j,1) = (img(i,j) + (2*W)); 
      end 
      if (img(i,j) + (W)) > 255 then 
       out(i,j,2) = 255; 
       else 
       out(i,j,2) = (img(i,j) + (W)); 
      end 
      out(i,j,3) = img(i,j); 
     end 
    end 

    out = uint8(out); 
    imshow(out); 
endfunction 

img = imread('lena3.jpg'); 
sepia1(img);