我正在处理图片。我在图像上应用熵阈值,我得到了错误。如何解决这个错误?
??? 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是我的形象
答案 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;