В настоящее время я работаю над фрагментом кода, который подготавливает изображение для порогового значения, хотя, по-видимому, существует несоответствие между выходным изображением и возвращаемыми пиксельными данными.Выходное изображение не отображается должным образом
Я расскажу вам через код. Во-первых, я определяю функцию, которая принимает три параметра: IMAGE
, изображение, которое будет пороговым; r
радиус, который определяет окрестность вокруг центрального пикселя, из которой можно вычислить данные пикселей; и k
, «ядро», которое определяет деталь порогового значения.
function [t] = imadaptive (IMAGE, r, k)
Я тогда вызывать функции я ранее определенные, которые создают изображения, в котором среднее значение и стандартное отклонение каждого пикселя хранится:
meanpic = immean (IMAGE, r);
stdpic = imstd (IMAGE, r);
Далее, я создать новый образ t
, где каждый пиксель имеет интенсивность 0. Это будет использоваться для хранения соответствующих значений порогового значения для каждого пикселя:
t = zeros(size(IMAGE));
Я тогда работать размер изображения, чтобы рассказать для цикла, когда остановиться:
[nx, ny] = size(IMAGE);
Далее я начинаю для цикла и запустить серию 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
должно выглядеть совершенно иначе.
Может ли кто-нибудь указать, что я здесь не так?
Не могли бы вы разместить образец ввода и вывода изображения, пожалуйста? Сделайте это так, чтобы люди могли просто скопировать и вставить ваш код для его запуска. Упростите запуск кода. У вас будет гораздо больше шансов получить полезный ответ, если вы это сделаете. – kkuilla
@Zetland - каковы типы вашего изображения? Являются ли они двойными (значения пикселей 0 ..1) или uint8 (значения пикселей 0,255)? Являются ли thresh, meanpic, stdpic, IMAGE одинаковым типом или разными типами? – cxw
@cxw Они от 0 до 255. С тех пор я отредактировал приведенный выше код, чтобы включить 't = нули (размер (IMAGE));' в 't = uint8 (нули (размер (IMAGE));', хотя теперь программа создает изображение, которое похоже на то, что было создано 'immean()' ... – Zetland