这张图片的扩张是什么结果?

时间:2018-01-07 19:31:04

标签: matlab image-processing image-morphology

我有以下矩阵:

 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',而在Matlab的结果中是'0'。我究竟做错了什么?原始图像中正好低于'0'的像素是'1',并且当窗口的中心位于那些'0'时,结构元素在该空间具有'1',因此它是命中并且中心必须设置为'1'但是Matlab没有这样做。谁能解释我为什么?我在这里缺少必要的东西吗?

1 个答案:

答案 0 :(得分:1)

假设矩阵A是您的图像,矩阵B是结构元素。你应该在所有边上用零填充矩阵A.所以,让我们说你有矩阵C.然后你应该执行C和B的逻辑和运算。名为D的结果矩阵将是一个扩张矩阵。有关详细信息,请参阅here. 这是Matlab的代码,它扩展图像而没有' imdilate '功能:

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:

enter image description here