2016-10-17 8 views
0

Я делаю домашнее задание и проблема. Моя задача - написать функцию в SciLab, которая преобразует нормальное изображение в сепию. Я должен использовать алгоритм, который умножает красный цвет на альфа и синий цвет на бета-версию, где alpha> 1 и beta < 1 и alpha + beta = 2.Обработка изображений в SciLab (конвертирование изображения в сепию)

Это мой код. По некоторым причинам эти 2 строки не работают должным образом:

//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

дают нам примеры альфа и бета. Также, что с '//'? это не комментарии Matlab. Пожалуйста, отправьте реальную функцию matlab. Я предполагаю, что это может быть scilab? –

+0

Кроме того, если я изменю код, чтобы читать MATLAB, это отлично работает, я получаю очень красивые изображения сепии –

+0

Да, это SciLab, отметили его также как MatLab, потому что, хотя эти 2 программы очень похожи, пример вызова этой функции Ex2 (myimage, 1.2); – Seoner

ответ

0

Существует простой способ, чтобы получить результат

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);