Почему тест разницы абсолютных значений не дает правильных результатов в MATLAB - PullRequest
0 голосов
/ 12 июля 2020

У меня есть изображение в градациях серого, прочитанное в MATLAB, и я хочу вычислить соотношение того, сколько пикселей имеют одинаковое значение или отличаются от своих левых соседей на абсолютные пороговые различия [0,1,3]. Первоначально я использовал следующий код:

[row,col] = size(processed_map);
flagged_map = zeros(row,col);

for thres = [0,1,3]

    cnt = 0;
    for i=1:row
        if (mod(i, 10) == 0)

            %fprintf('Line %i is processed .\n', i); 
        end
        
        for j =2:col
           
            left_n = processed_map(i,j-1);
            current = processed_map(i,j);    
                            
            if(abs(left_n - current) <= thres)
                fprintf('Current Pixel Value = %i , its neighbour value = %i \n',current,left_n);
                cnt = cnt + 1;
                flagged_map(i,j) = 1;


            end
 
        end

    end
      format long g  
      Ratio = round(100 * cnt/(row * (col-1)),2);

     
     fprintf('DELTA = %i : %.2f \n',thres,Ratio);
      
end

Для порогового значения «0», что означает, что я ищу такие же значения соседей. Когда он входит в «условие if с одинаковым значением», я получаю некоторые напечатанные инструкции как

Current Pixel Value = 118 , its neighbour value = 53 
Current Pixel Value = 119 , its neighbour value = 118 

Что, конечно, неверно! И я не мог понять почему! Однако, когда я использую следующий оператор if

для threshold = 0

if(left_n == current)

, все введенные текущие и left_n пиксели соответствуют ожидаемым. Такие же ошибки возникают для других абсолютных пороговых значений при записи в виде данного кода.

...