Я знаю, как проверить 4-окрестность, но как это совместить здесь?

Скажем, мы хотим проверить 4-окрестность в matlab, я думаю, мы можем сделать следующее (поправьте меня, если я ошибаюсь):

I = imread('cameraman.tif');
structured_element = [0,1,0;1,1,1;0,1,0];
o = imdilate(I,structured_element);

Теперь у меня есть следующее утверждение, которое я пытаюсь реализовать (пробовал какое-то время):

among all pixels p " that belong to" Supp(F)\Ck
being 4-neighbours of Ck,
select the pixel p that minimizes the distance d(F,Ck"union"{p})
and let Cnew = Ck "union" {p}

Я не хочу смущать вас некоторыми терминами, но дам вам их значения, по которым можно решить, что делать.

Supp(F) имеет значения здесь.

Ck имеет значения здесь

F – это изображение, показанное здесь

Исходя из этого, как мы можем реализовать приведенные выше строки?

Большое спасибо.


person Simplicity    schedule 20.02.2013    source источник
comment
Вы настолько сжали вопрос, что важные детали были исключены. Здесь X имеет значения, это плохой способ представить это, что, если значения были рассчитаны неправильно (кстати, я их даже не открывал)? Под Supp вы подразумеваете поддержку функции f ? Будучи f бинарным изображением, подразумевается ли поддержка включения точек в области f или только тех, для которых установлено, что они принадлежат переднему плану? Ck - полная загадка в его нынешнем виде. Может быть, все это было взято из какой-то статьи, поэтому не могли бы вы указать хотя бы название этой статьи?   -  person mmgp    schedule 21.02.2013
comment
В любом случае, очевидный способ реализовать первые две строки — выполнить расширение, как вы это сделали. Затем рассмотрите только граничные точки на этом расширенном изображении и выполните заливку в ширину, когда она впервые достигает f, вы можете определить, какой пиксель p обеспечивает минимальное расстояние (обратите внимание, что несколько пикселей могут обеспечить его).   -  person mmgp    schedule 21.02.2013
comment
@ммгп. Спасибо за ваш ответ. Например, для первой строки я получил результаты для p. Меня смущает то, как проверить, что эти значения p являются 4-окрестностью значения Ck, особенно то, что Ck является набором значений. Но я понял, что 4-окрестность здесь означает соседство с любой точкой в ​​Ck. Не могли бы вы просто продемонстрировать эти две строки с помощью кода? Я действительно смущен тем, как объединить их обоих   -  person Simplicity    schedule 21.02.2013
comment
Сначала я хотел бы узнать сайт/бумагу, откуда это было взято.   -  person mmgp    schedule 21.02.2013
comment
Хорошо, у меня с этим проблема. Вы показываете изображение F, которое является двоичным, не так ли Supp(F) == Core(F) тогда? Думаю, вы видите, как это все ломает.   -  person mmgp    schedule 21.02.2013
comment
@ммгп. Изображение в оттенках серого (0-255). И Supp (F) - это те элементы со степенью принадлежности ~ = 1, а Core (F) - это те элементы, которые = 1   -  person Simplicity    schedule 21.02.2013
comment
Моя проблема не в определениях в статье (также, согласно собственной статье, Core(F) формируется глобальным максимумом, не обязательно равным 1). Проблема в том, что ваш F представляет собой двоичное изображение, а не оттенки серого.   -  person mmgp    schedule 21.02.2013
comment
@ммгп. Когда я читаю полученное изображение F, я понимаю, что диапазон значений пикселей [0-255]. Тогда это оттенки серого, не так ли?   -  person Simplicity    schedule 21.02.2013
comment
@ммгп. Не могли бы вы связаться со мной через мою электронную почту? Просто хочу задать вам некоторые вопросы здесь. Ценить это! Это мой адрес электронной почты: [email protected]. Ждем вашего письма...   -  person Simplicity    schedule 21.02.2013


Ответы (1)


Во-первых, для ясности, вы работаете с алгоритмом дефаззификации, описанным в статье «Дефаззификация пространственных нечетких множеств путем минимизации расстояния признаков». Термин Ck изначально построен для k = 0 как:

Core(f) = {x is a member of a set X | m(x) >= m(y) for all y in X}

где f — некоторое дискретное двухмерное изображение в градациях серого, m(x) определяется как функция принадлежности с диапазоном [0, 1], а X формируется парами точек, принадлежащих области f. Затем Supp(f) формируется теми точками, где m(x) > 0. Для изображения в градациях серого f, где 0 — черный, это означает, что все, что не является черным, находится в Supp(f).

Итак, вот ввод f (который также представляет Supp(f)), Core(f) и Supp(f)\Core(f) соответственно. В терминах Matlab Core(f) определяется как: core = f; core(f ~= max(max(f))) = 0;

введите здесь описание изображениявведите здесь описание изображения введите здесь описание изображения

Теперь мы можем решить задачи в вопросе. Во-первых: «... среди всех пикселей p, принадлежащих Supp(F)\Ck, являющихся 4-соседями Ck ...", можно перевести как:

allp = imdilate(core, strel('diamond', 1)) - core;
allp_in_f = (allp/255) .* f;

предположим, что ввод имеет тип uint8. Второй оператор отбрасывает точки, которых нет в Supp(f), устанавливая их в 0, но в этом примере таких точек нет. Результат этого шага показан на следующем изображении:

введите здесь описание изображения

Теперь: "... выберите пиксель p, который минимизирует расстояние d(F,Ck union {p})...". В этот момент любой пиксель p на последнем изображении минимизирует его, предположим, что метрика является L-бесконечностью (Чебышёв, шахматная доска, ...), но даже если бы мы выбрали норму L-1, все пиксели, кроме диагональных, удовлетворяли бы Это. Или, другая интерпретация (если мы полностью проигнорируем статью, поскольку она не упоминалась в вопросе): расстояние учитывает интенсивности в f, и метод хочет тот, который минимизирует взвешенное (интенсивности) расстояние. В этом случае, а также для будущих итераций (метод итерационный, описанный в статье) проще всего выполнить заливку от границы, полученной на последнем показанном изображении. Эта заливка будет выполняться в ширину, поэтому в первый раз, когда пиксель касается f, вы будете возвращаться назад и определять пиксель p, который минимизирует расстояние. Этот метод также известен как распространение волнового фронта.

person mmgp    schedule 21.02.2013
comment
Большое спасибо за ваше хорошее объяснение. Для `Supp(F)\Ck, I understand that it means the elements in Supp(F)`, но не в Ck. Это правильно? Как ваши строки кода переводятся в это? - person Simplicity; 21.02.2013
comment
Я думаю, вы имеете в виду: imdilate(core, strel('diamond', 1)), 4-neighbours из Ck? А -core что есть в Ck? Спасибо - person Simplicity; 21.02.2013
comment
Когда я использовал ваш код, я получил ошибку: ??? Error using ==> times Matrix dimensions must agree. Почему вы так думаете? Для f я использовал изображение - person Simplicity; 21.02.2013
comment
Я действительно имел в виду то, что было сказано, ваше imdilate предложение не отражает того, что говорится в статье, поскольку оно хочет 4-соседей Supp(F)\Ck. На третьем изображении показано Supp(F)\Ck, это операция установки разности, и код для нее не показан, потому что я думал, что он не нужен ({1, 2, 3} \ {1, 2, 4} == {3 }). Я не знаю, что вы сделали не так, у меня это работает. Наконец, обратите внимание, что расстояние, используемое в статье, фактически учитывает набор функций. - person mmgp; 21.02.2013
comment
Я понял, что Ck должен быть двоичным, так что пиксели, принадлежащие ядру, например, имеют значение 1. какие изменения можно внести в код, чтобы приспособиться к этому? И что означает обозначение .*? Спасибо - person Simplicity; 22.02.2013
comment
Да, Ck уже бинарный. Как в представленном примере, так и в определении. - person mmgp; 22.02.2013