2013-07-02 82 views
0

所以我有一個灰度圖像作爲二進制文件。在圖像中出現紅色後,我嘗試創建一系列「if」循環,以便用一個值替換一系列值,並保持矩陣的其餘部分不變。識別和替換值matlab

我用這個代碼

if myimage < 20 
    myimage = 0; 
else if 20 < myimage <40 
     myimage = 20; 
    else if 40 < myimage < 60 
      myimage = 40; 
     else if 60<myimage<80 
       myimage = 60; 
      end 
     end 
    end 
end 

,但由於某種原因,無法加載圖像。經過一些調試後,我發現該文件在「else if 20 ...」行之後變成了1 x 1矩陣,其值爲「20」。任何人都可以幫我弄清楚爲什麼會發生這種情況?謝謝。

+3

變量myimage是一個值的矩陣,你在這裏做的是把它當作一個標量。你的比較表達式和賦值語句並沒有做你期望他們做的事情。相反,您想要查找某些元素的索引,並僅更改它們。你應該閱讀更多關於[MATLAB中的矩陣索引](http://www.mathworks.com/help/matlab/math/matrix-indexing.html)並從那裏開始工作。 –

+0

因此生病需要遍歷圖像,然後做一些像myimage(X,Y)<20? – user2475404

+0

是的,這是一個好的開始。對於你的情況,想想這樣的事情:'20 * floor(myimage/20);',它可以一次處理整個圖像。 – Peter

回答

0

您需要更改myimage中具有特定值的特定索引。你現在調用它的方式,你用特定的值覆蓋了myimage變量。找到所有相關指數的方法之一是發現:

find(myimage==20)

,以便找到並用一個內襯更換所有的值,參考感興趣的指數在MYIMAGE:

myimage(find(myimage<20))=0;

和索引的多組(例如值> 20 AND < 40),使用結合相交:

myimage(intersect(find(myimage>20),find(myimage<40)))=20;

+0

正如上面@ @ EitanT的評論所示,在索引內部對'find'的調用是多餘的。 –

+0

在兩個同時發生的情況下,正確的呼叫會是什麼,例如myimage> 20,myimage <40? – jbrown

+0

類似於myimage(20