2014-03-29 66 views
0
H = [1 1; 1 2; 2 -1; 2 0; -1 2; -2 1; -1 -1; -2 -2;]'; 

我需要閾值,使得邊界值:閾值函數

H(I,j) = 0 if H(I,j) > =1, 
else H(I,j) = 1 if H(I,j) <=0 

我應用這個代碼

a = H(1,1) 
    a(a<=0) = 1 

    a(a>=1) = 0 

每個值但這意味着在第一個已經影響值步驟可能會再次改變。閾值的正確方法是什麼?上面的代碼給出了不正確的答案。我應該得到

a = [0 0; 0 0; 0 1; 0 1; 1 0; 1 0; 1 1; 1 1] 

請幫

編輯

基於答案我現在越來越

  0   0 
     0   0 
    1.0000 0.3443 
    0.8138 0.9919 
     0 0.7993 
    0.1386 1.0000 
    1.0000 1.0000 
    1.0000 1.0000 

可以看出,第3-6行都是不正確。請幫助

回答

0
ind1 = H>=1; %// get indices before doing any change 
ind2 = H<=0; 
H(ind1) = 0; %// then do the changes 
H(ind2) = 1; 

如果處理的非整數值,應該在比較施加一定的公差:

tol = 1e-6; %// example tolerance 
ind1 = H>=1-tol; %// get indices before doing any change 
ind2 = H<=0+tol; 
H(ind1) = 0; %// then do the changes 
H(ind2) = 1; 
+0

謝謝您的回覆,其中的作品,但並不適用於所有情況。例如,有一些實際數值不受影響。我已經更新了我的問題。請看看實際的數值,以及如何限制他們的範圍> – SKM

+0

@SKM這可能是[比較浮動值的常見問題](http://stackoverflow.com/questions/686439/why-is- 24-0000-不等於到24-0000合MATLAB)。要解決這個問題,定義一個容差並將其應用於比較。查看更新後的答案(第二部分) –

+0

我已經這樣做了,因爲我猜mythreshold函數是不正確的。現在是正確的,而不是應用寬容? ind1 = H> 0; ind2 = H <= 0; H(ind1)= 0; H(ind2)= 0; H(ind2)= 1; – SKM