2013-03-26 57 views
3

我正在matlab編程類,而老師讓我們總是寫爲什麼在matlab中讀取圖像時必須使用double?

img = double(imread('file.tif')); 

而不是

img = imread('file.tif'); 

,因爲省略了double(...)很可能「錯誤」。我很困惑爲什麼會出現這些錯誤。

這裏就是我把每一個像素(注意 - 輸入圖像的灰度)的平方值爲例交互式會話,並且該值是唯一正確的,當我們使用雙:

>> img = imread('cat.tif'); 
>> img_double = double(imread('cat.tif')); 
>> img = img .^2; 
>> img_double = img_double .^2; 
>> img(1:10, 1:10) 

ans = 

    255 255 255 255 255 255 255 255 255 255 
    225 255 255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 255 121 
    255 255 255 255 255 255 255 255 255 49 

>> img_double(1:10, 1:10) 

ans = 

    Columns 1 through 5 

     16129  16129  16129  16129  16129 
     225   361   625  1089  1681 
     324   484   961  1681  2209 
     400   729  1369  2401  3025 
     576  1225  2209  3249  3969 
     900  1849  3025  4096  4900 
     1369  2809  4096  5184  5625 
     2209  3969  5476  6241  6241 
     3249  5041  6400  7056  6724 
     4489  6241  7569  7569  6724 

    Columns 6 through 10 

     16129  16129  16129  16129  16129 
     2025  2209  2209  1849  1521 
     2809  2809  2401  2025  1521 
     3249  3249  2809  2025  1369 
     3969  3481  2809  1849  1089 
     4624  3969  2809  1681   841 
     5041  3969  2601  1369   529 
     5184  3721  2209   961   289 
     5184  3481  1681   576   121 
     5041  2809  1225   289   49 

這究竟是爲什麼?

+3

最大值你的教練確實應該給你比*將導致錯誤*更好的解釋。你正在上課去學習,而不是記住魔術食譜。下面的答案解釋了爲什麼你需要做演員,但如果我是你,我還是會要求導師解釋。如果沒有別的,這將是衡量他/她是否知道自己的原因。 – Praetorian 2013-03-26 03:17:37

+0

沒有將圖像轉換爲double是matlab圖像處理中常見的錯誤。嘗試輸入'1.7 + uint8(5)',看看你得到了什麼結果。 Matlab會自動將答案轉換爲uint8。 – Justin 2013-03-26 03:43:12

回答

6

您不需要在MATLAB中以雙精度讀取圖像。默認情況下,圖像是uint8類型的元素矩陣,其範圍爲0到255.根據您的計算需求,可以將圖像投射到各種類型(uint16,uint32,uint64,double等)。 )。

在你的情況,平方uint8元素的值是造成溢出,這就是爲什麼你看到的255

相關問題