Расширить область многоугольника в матрице

У меня есть следующая матрица:

1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1
1 1 2 2 2 1 1 3
1 1 2 2 2 2 1 3
1 1 1 1 2 1 1 3
1 1 1 1 1 1 1 1

Я хочу расширить область значения 2 на размер 1, что означает, что после расширения вывод:

1 1 2 2 2 1 1 1 
1 2 2 2 2 2 1 1
2 2 2 2 2 2 2 3
2 2 2 2 2 2 2 2
1 2 2 2 2 2 2 3
1 1 2 2 2 1 1 1

Я думаю, что imerode может расширяться и уменьшаться для двоичного изображения, но в данном случае это не применимо. Есть ли какие-нибудь методы в matlab, способные решить эту проблему?

1 ответ

Решение

Однолинейное решение

Использование:

mat(imdilate(mat==2,strel('disk',2)))=2;

Результат

mat =

 1     1     2     2     2     1     1     1
 1     2     2     2     2     2     1     1
 2     2     2     2     2     2     2     3
 2     2     2     2     2     2     2     2
 1     2     2     2     2     2     2     3
 1     1     2     2     2     2     1     1

Пошаговое объяснение

Решение этой проблемы основано на операции расширения на областях, в которых матрица равна 2. Это можно сделать следующим образом:

%initializes the input matrix
mat = [1,1,1,1,1,1,1,1 ; 1,1,1,1,1,1,1,1; 1,1,2,2,2,1,1,3 ; 1,1,2,2,2,2,1,3; 1,1,1,1,2,1,1,3 ; 1,1,1,1,1,1,1,1];

%initilizes a mask which represents the reion which we want to exapand
roiMask = mat==2;

%perform expansion to this mask by imdilate function
dilatedRoi = imdilate(mat==2,strel('disk',2));

%assigns the new value into the original matrix
mat(dilatedRoi) = 2;

Обратите внимание, что операция расширения характеризуется объектом структурирующего элемента, который в основном представляет собой двоичную матрицу, которая определяет способ выполнения расширения. В моем примере я использовал функцию strel MATLAB, которая генерирует следующее:

strel('disk',2)

ans = 
 0     0     1     0     0
 0     1     1     1     0
 1     1     1     1     1
 0     1     1     1     0
 0     0     1     0     0

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

Другие вопросы по тегам