В настоящее время я работаю над фрагментом кода, который подготавливает изображение для пороговой обработки, хотя, похоже, существует несоответствие между выходным изображением и возвращаемыми данными пикселей.
Я расскажу вам код. Во-первых, я определяю функцию, которая принимает три параметра: IMAGE
, изображение, для которого будет установлено пороговое значение; r
радиус, который определяет окрестность вокруг центрального пикселя, из которого можно вычислить данные пикселя; и k
, «ядро», которое определяет детали порогового значения.
function [t] = imadaptive ( IMAGE, r, k )
Затем я вызываю ранее определенные функции, которые создают изображения, в которых хранятся среднее значение и стандартное отклонение каждого пикселя:
meanpic = immean (IMAGE, r);
stdpic = imstd (IMAGE, r);
Затем я создаю новое изображение t
, где интенсивность каждого пикселя равна 0. Это будет использоваться для хранения соответствующих пороговых значений для каждого пикселя:
t = zeros(size(IMAGE));
Затем я вычисляю размер изображения, чтобы сообщить циклу for, когда остановиться:
[nx, ny] = size(IMAGE);
Затем я запускаю цикл for и запускаю серию операторов if, чтобы программа не пыталась проверять значения пикселей в таких позициях, как (-2,-2):
if x-r <= 0
startx = 1;
else
startx = x-r;
end
if x+r > nx
endx = nx;
else
endx = x+r;
end
if y-r <= 0
starty = 1;
else
starty = y-r;
end
if y+r > ny
endy = ny;
else
endy = y+r;
end
Наконец, я запускаю код для определения соответствующих пороговых значений для каждого пикселя, а затем добавляю это значение к изображению t
:
R = 128;
for xp = startx : endx
for yp = starty : endy
if (x-xp)^2 + (y-yp)^2 <= r^2
thresh = meanpic(xp,yp) * (1 + (k * (((stdpic(xp,yp) / R) - 1))));
end
end
end
t(x,y) = thresh;
Проблема в том, что когда я запускаю этот код, я получаю изображение, идентичное моему stdpic
: изображение, которое показывает значения стандартного отклонения для каждого изображения. Я не могу понять, почему это, однако. Уравнение кажется правильным — и когда я удаляю ;
из уравнения, я вижу, что значения, которые оно выводит, очень различаются и находятся в диапазоне от 0 до 255, поэтому выходное изображение t
должно сильно отличаться.
Может ли кто-нибудь указать, что я здесь не так?
t = zeros(size(IMAGE));
вt = uint8(zeros(size(IMAGE)));
, хотя теперь программа создает изображение, которое кажется идентичным изображению, созданномуimmean()
... - person Zetland   schedule 09.03.2015uint8
иuint32
и добавилAgrey = double(Agrey);
, программа заработала. - person Zetland   schedule 13.03.2015