Каков результат расширения этого изображения?

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

 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 1     1     0     0     0     0     0
 1     0     0     0     0     1     1
 1     0     0     0     0     1     1

И я хочу расширить это следующим структурирующим элементом:

 1     0     0
 1     1     1
 1     1     1

Я уже делал дилатацию на Matlab, но результат не совпадает с тем, который я сделал вручную. Так что я думаю, что что-то здесь упустил. Насколько я знаю, если какое-либо "1" из структурирующего элемента касается какой-либо из "1" в матрице, то это означает, что это попадание, и центр текущего окна должен быть установлен как 1. Если я делаю расширение в такой модой я бы получал следующее (без учета краев):

 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     1     1     0     0     0     0
 1     1     1     0     1     1     0
 1     1     1     0     1     1     1
 1     0     0     0     0     1     1

Но Matlab дает следующий результат:

 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 1     **0**     **0**     0     0     0     0
 1     1     1     0     1     1     0
 1     1     1     0     1     1     1
 1     1     0     0     1     1     1

Без учета краев это выглядит почти как мой результат, но пиксели, выделенные жирным шрифтом, равны '1' в моем результате, но '0' в результате Matlab. Что я делаю неправильно? Пиксели чуть ниже этих "0" - это "1" в исходном изображении, а структурирующий элемент имеет "1" в том месте, когда центр окна находится в этих "0", поэтому это удар, и центр должен быть установлен "1", но Матлаб не делает этого. Может кто-нибудь объяснить мне, почему? Я что-то упустил здесь?

1 ответ

Предположим, матрица A - это ваше изображение, а матрица B - структурирующий элемент. Вы должны заполнить матрицу А нулями со всех сторон. Допустим, у вас есть матрица C. Затем вы должны выполнить логическую операцию И для C и B. Результирующая матрица с именем D будет расширенной матрицей. Для получения дополнительной информации, пожалуйста, смотрите здесь. Вот код Matlab, который расширяет изображение без функции 'imdulate':

clc;clearvars;close all;
%Image Dilation without using 'imdilate' function
% Matrix A is our image
A=[0 0 0 0 0 0 0;
    0 0 0 0 0 0 0;
    0 0 0 0 0 0 0 ;
    0 0 0 0 0 0 0;
    1 1 0 0 0 0 0;
    1 0 0 0 0 1 1 ;
    1 0 0 0 0 1 1 ];
%Structuring element
B=[1 0 0; 1 1 1; 1 1 1];
%Pad zeros on all the sides
C=padarray(A,[1 1]);
%Intialize a matrix of matrix size A with zeros
D=false(size(A));
for i=1:size(C,1)-2
    for j=1:size(C,2)-2
        %Perform logical AND operation
        D(i,j)=sum(sum(B&C(i:i+2,j:j+2)));
    end
end

display(D);

И это мой вывод, расширенная матрица D:

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