2015-03-09 3 views
1

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

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

Может ли кто-нибудь указать, что я здесь не так?

+2

Не могли бы вы разместить образец ввода и вывода изображения, пожалуйста? Сделайте это так, чтобы люди могли просто скопировать и вставить ваш код для его запуска. Упростите запуск кода. У вас будет гораздо больше шансов получить полезный ответ, если вы это сделаете. – kkuilla

+0

@Zetland - каковы типы вашего изображения? Являются ли они двойными (значения пикселей 0 ..1) или uint8 (значения пикселей 0,255)? Являются ли thresh, meanpic, stdpic, IMAGE одинаковым типом или разными типами? – cxw

+0

@cxw Они от 0 до 255. С тех пор я отредактировал приведенный выше код, чтобы включить 't = нули (размер (IMAGE));' в 't = uint8 (нули (размер (IMAGE));', хотя теперь программа создает изображение, которое похоже на то, что было создано 'immean()' ... – Zetland

ответ

1

thresh переназначается каждый раз через петлю. Таким образом, только один пиксель в окрестности способствует каждому выходному пикселю. Если изменение thresh не помогает, не могли бы вы разместить весь файл здесь или на pastebin? Формат прохода очень полезен, но всегда возможно, что ошибка находится в коде, который не показан.

Редактировать: по линиям 163-165 пасты, изменить uint8 до double. На строке 211 добавьте код, чтобы использовать количество пикселей или что-то подобное. Я думаю, что деление на R происходит в uint и обрезается до нуля. Вернитесь к uint в самом конце, после математики, иначе imshow не даст вам ожидаемых результатов. Надеюсь это поможет!

+0

Большое спасибо. Я теперь разместил его в Pastebin здесь: http://pastebin.com/SuyrsSQa – Zetland

+0

Только что заметил ошибку в методе 'main'. 'imshow (imthreshold (Agry, 2, 0.5))' не следует комментировать, тогда как 'subplot' должны быть ... – Zetland

+1

@zet thanks - я посмотрю – cxw