2014-03-29 191 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