???试图访问cmtx(1.00024,1); index必须是正整数或逻辑

时间:2013-11-24 06:20:51

标签: matlab matrix convolution

我正在处理图片。我在图像上应用熵阈值,我得到了错误。如何解决这个错误?

??? 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    

我尝试使用修复和循环功能解决此错误。但它对我有用。有人请帮助我。这里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

1 个答案:

答案 0 :(得分:1)

像素是离散的,因此必须使用整数进行索引。您不能使用除整数值之外的任何值来索引数组。在这种情况下,如果索引元素rt或cmtx,则表示您正在访问像素值。当你打电话......

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

rt(m,n)的值很可能不是整数。对我来说,为什么你想要用rt中包含的像素来索引cmtx真的没有意义。你能解释或给出熵阈值的来源吗?

另外,请您解释一下这段代码的动机:

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

您是否尝试将特定值添加到rt的所有元素以生成cmtx? rt和cmtx之间的期望关系是什么?

如果cmtx只是rt的副本,并且为rt的每个像素添加了值,那么就不需要for循环。这就足够了。

cmtx = rt + myValue;