2013-11-24 2 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  

Я попытался решить эту ошибку, используя функцию исправления и округления. но это работает для меня. Кто-нибудь, пожалуйста, помогите мне. здесь 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 

конечного

здесь к.т. мой образ enter image description here

+0

В вашем первом фрагменте кода вы используете исправление для индексов присваивания. Пробовали ли вы исправить исходные индексы? Вы можете попробовать rtf = fix (rt), а затем просто использовать rtf вместо rt. – grantnz

+0

спасибо, сэр, эта идея вообще ударила меня. и сэр, после того как я запустил это, я получу небольшую точку в качестве моего вывода ... есть ли какая-то ошибка в моем энтропийном коде. – 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; 
Смежные вопросы