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