От 4-х соединений до 8-х соединений в MATLAB - PullRequest
1 голос
/ 08 сентября 2011

Скажем, у меня есть граничное изображение в logical matrix, где true означает границу, а false означает внутреннюю область. Изображение кодирует тесселяцию 2D-домена.

Мне было интересно, есть ли в MATLAB компактный способ «исправить» те пиксельные окрестности, где расстояние между соседними областями составляет всего 4-connected, и преобразовать их в 8-connected таким образом, чтобы сохранить топологию тесселяции.

Я считаю, что это можно сделать с помощью LUT , но я не уверен, как поступить. Должен ли я, и если да, то как мне точно оценить все 3x3 области пикселей, где подключение составляет всего 4-wise для заполнения соответствующих пикселей?

1 Ответ

2 голосов
/ 09 сентября 2011

Мое предлагаемое решение: используйте BWHITMISS , чтобы найти пиксели, окрестности которых хотя бы 4-связны, расширите результат с помощью структурирующего элемента прямоугольной формы, чтобы преобразовать эти окрестности в 8-связные, и, наконец, объединяемс исходным изображением, используя логическое ИЛИ.

Пример:

bw = [
    0 0 0 1 0 1 0
    0 0 1 1 1 1 1
    0 1 1 1 0 1 0
    0 0 1 0 1 0 0
    0 1 1 0 0 0 0
    0 0 1 0 1 1 1
    0 0 1 0 0 1 0
];

hm = bwhitmiss(bw, [0 1 0; 1 1 1; 0 1 0]);   %# [-1 1 -1; 1 1 1; -1 1 -1]
bw2 = imdilate(hm,ones(3)) | bw;

Мы можем визуализировать результат:

[r c] = find(hm);
subplot(121), imshow(bw), hold on, plot(c(:),r(:),'o')
subplot(122), imshow(bw2)

screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...