2016-10-17 107 views
0

我正在做我的作業,並且引起了問題。 我的任務是在SciLab中編寫一個將普通圖像轉換爲棕褐色的函數。 我必須使用算法,通過alpha乘以紅色和beta的顏色,其中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); 
相關問題