2013-11-24 62 views
0

我正在處理圖像。我在圖像上應用熵閾值,我得到了錯誤。如何解決這個錯誤????試圖訪問cmtx(1.00024,1);索引必須是正整數或邏輯

??? Attempted to access cmtx(1.00024,1); index must be a positive integer or logical."  
    Error in ==> file1>GABOR_Callback at 809 

    cmtx(fix(rt(m,n))+1,fix(rt(m,n+1))+1) = cmtx(rt(m,n)+1,rt(m+1,n+1)+1) + 1  

我試圖用fix和round函數來解決這個錯誤。但是它對我有用。請有人幫助我。這裏rt是一個圖像,它是我的旋轉圖像的輸出。所以我不能改變rt圖像矩陣的值。我的熵閾值的代碼是。

 [M,N] =size(rt);  
    cmtx = zeros(256,256);  
    for m = 1:M-1 
      for n = 1:N-1   
     cmtx(rt(m,n)+1,rt(m,n+1)+1) = cmtx(rt(m,n)+1,rt(m+1,n+1)+1) + 1; 
     end 
    end 
    scmtx = sum(cmtx(:)); prob = cmtx/scmtx;  
    emax = -100; for i=1:255 

    probA = 0; 
    probC = 0; 

    subProbA = prob(1:i,1:i); 
    probA = sum(subProbA(:)); 

    HA(i) = -0.5*(probA*log2(probA+0.0000001)); 
    subProbC = prob(i+1:256,i+1:256); 

    probC = sum(subProbC(:)); 
    HC(i) = -0.5*(probC*log2(probC+0.0000001)); 

    e1(i) = HA(i) + HC(i); 
    if e1(i) >= emax 
      emax = e1(i); 
    tt1 = i; 
    end 
end 

這裏rt是我的形象 enter image description here

+0

在你的第一個代碼片段中,你只是使用修復的分配索引。你是否嘗試過使用修復這個源碼索引?你可以試試rtf = fix(rt),然後用rtf代替rt。 – grantnz

+0

謝謝你先生,dat想法din罷工我。先生,我運行這個後,我得到一個小點作爲我的輸出......在我的熵代碼中有任何錯誤。 – vidya

回答

1

像素是離散的,因此必須使用整數索引。您不能使用整數值以外的任何其他數據索引數組。在這種情況下,如果您索引rt或cmtx的元素,則您正在訪問像素值。當您撥打電話時...

cmtx(rt(m,n) + 1, rt(m+1,n+1) + 1) + 1 

rt(m,n)的值很可能不是整數。這對我來說真的沒有意義,爲什麼你會希望索引cmtx與包含在rt中的像素。你能解釋或給出熵閾值的來源嗎?

另外,能否請您解釋一下這個代碼的動機:

for m = 1:M-1 
    for n = 1:N-1   
     cmtx(rt(m,n)+1,rt(m,n+1)+1) = cmtx(rt(m,n)+1,rt(m+1,n+1)+1) + 1; 
    end 
end 

你們是不是爲特定的值增加室溫的各種元素,製作cmtx? rt和cmtx之間的期望關係是什麼?

如果cmtx只是rt的副本,並且每個rt的像素都加上一個值,那麼for循環就沒有必要了。這就夠了。

cmtx = rt + myValue; 
相關問題