2015-09-02 134 views
0

我想轉換一個256 * 256矩陣類型uint8到256 * 256類型的矩陣,但當我使用im2double()它給了我一個1 * 1類型double的矩陣。im2double給1 * 1矩陣應用於256 * 256矩陣在matlab R2014a

我想對我的圖像做一個伽馬轉換,因爲我需要使用電源功能,這又要求我使用double類型的矩陣,因爲用戶將輸入的伽馬值將是雙重型和功率函數的意思。它可以操作時矩陣和標量都是相同類型的,即雙

的代碼如下:

b=imread('cameraman.tif'); 
 
[m,n] = size(b); 
 
c=input('enter value of c'); 
 
gamma=input('enter value of gamma'); 
 
I2 = im2double(b); 
 

 
for i=1:m 
 
    for j=1:n 
 
     
 
     I2=c*power(I2(i,j),gamma); 
 
       
 
     
 
    end 
 
end 
 
    
 
    imshow(I2,[]);

回答

0

不要使用im2double,你的矩陣b就是這樣,一個[256 x 256]矩陣。只要使用double(b),或者作爲一個班輪:b=double(imread('cameraman.tif'));

您可以在for循環最有可能提高,以及(在有利於向量化的公式完全消除它),使用bsxfun

I2 = c*bsxfun(@power, b, gamma); 

正如一個事後:

I2 = c*b.^gamma; 

可能工作,但我沒有測試過。

+0

im2double仍然給我1 * 1矩陣,當我使用bsxfun函數時,它會給出這個錯誤「整數只能提升爲正整數冪。」之後,我使用雙轉換,因爲你建議在第一行。但你的第二個解決方案很好。我不能使用im2double函數,但在Internet上的文檔和其他示例中它的工作正常。任何線索。謝謝你的答覆,但代碼開始工作。 –