2017-06-17 110 views
0

以下腳本給我提供錯誤「下標索引必須是真正的正整數或邏輯」。Matlab:選擇矩陣的一部分

我不明白爲什麼,因爲變量是整數。此外,我也將它們轉換爲整數。

的代碼是:

x_start = int16(x-matrixRay); 
     x_end = uint16(x+matrixRay); 
     y_start = uint16(y-matrixRay); 
     y_end = uint16(y+matrixRay); 
     matrix = img(x_start:x_end,y_start:y_end); 

我把一個斷點,只是上面的代碼之前。下面我列出變量的值:

K>> x_start 

x_start = 

    uint16 

    298 

K>> x_end 

x_end = 

    uint16 

    302 

K>> y_start 

y_start = 

    uint16 

    88 

K>> y_end 

y_end = 

    uint16 

    92 

K>> matrixRay 

matrixRay = 

    2 

很明顯,我不能發佈所有矩陣「img」,因爲它非常大。工作區是1369x1173 uint8。

+0

你爲什麼使用int8函數? – jrook

+1

'int8'太小而不能包含這些值。你滿溢了。 – beaker

+0

這是一個錯誤。隨着uint16我仍然有同樣的錯誤。我更新了代碼和變量值。你可以在上面檢查它們。任何其他想法?謝謝 – user1315621

回答

2

正如其他人指出的,int8(-128到127)顯然不會覆蓋您的圖像大小。鑑於大小,你可以使用uint16作爲索引。使用帶符號整數進行索引是沒有多大意義的。您可以簡單地使用round來創建索引,以防它可能不是整數。

但int8只是給你錯誤的結果(在我看來比差錯更糟糕)。你得到的錯誤是因爲你的x_start或y_start是零。您可以通過設置斷點來輕鬆檢查。

如果你確信你在做什麼是你想要的,你可以解決這樣的問題:

x_start = round(x-matrixRay); % or uint16 if size is less than 2^16 
x_start = max(x_start, 1); % use 1 if less than 1 
x_end = round(x+matrixRay); 
x_end = min(x_end, size(img,1)); % clip to max of img size 

類似的,應適用於y_start和y_end。

+0

謝謝。對int8的投射是一種分心錯誤。然而,問題不在那裏。仍然鑄造到uint16給了我同樣的錯誤,並且你可以看到,沒有值被設置爲0.任何其他想法? – user1315621

+0

你只做過一次或多次?發生錯誤時,我仍然認爲你的價值爲零。你有沒有在我的答案中嘗試過這種方法? –