## Saturday, March 20, 2010

### Fuzzy image Dilation and Erosion

One of the generic approaches to fuzzy Morphology is the Fuzzy Dilation and Fuzzy Erosion . Based on an trouble that I faced with during the Fuzzy image Analysis course , I decided to publish the Matlab code , based on the paper by "Bloch and Maitre" on "Fuzzy mathematical morphologies: A comparative study" . This is just the implementation of Definition 1 (page 1344 ). Needless to say that next definition are the same to Def 1 . Just play with the parameters :)

Here is the code :

%{
Fuzzy Dilation and Erosion

Copyright 2010 Vahid Rafiei .
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA.
%}

% Settings
len=512;
useNoise=0;
strel=1;

%% Define v
if strel==1
x=linspace(-10,10,len);
v=2-(x).^2;
v(v<0)=0;
end

v=v/max(v);
plot(v,'--');

%% define mu
x=linspace(-4,4,len);
mu=3-x.^4+4*x.^2;
mu(mu<0)=0;
mu=mu/max(mu);
if(useNoise)
mu=mu+0.1*(rand(size(mu))-0.5);
end

hold on
plot(mu,'-','Color','red')

legend({'V','mu'})

% mu and v is ready

%% Definition 1

% Dilation

nalpha=10;
alph=linspace(0.0001,1,nalpha);
deltaAlpha=1/nalpha;

Dmu=zeros(size(mu));

tic
for a = alph
valpha=v>=a;
for x=1:numel(mu)
mask=zeros(size(mu));
mask(x)=1;
mask=convn(mask,valpha,'same');
Dmu(x)=Dmu(x)+max(mask.*mu)*deltaAlpha;
end
end
toc

figure(2)
plot(mu,'Color', 'red');
hold on
plot(Dmu,'Color','blue');
legend({'\mu','D\mu'})
title('Dilation (Def. 1)');

% Erosion
Emu=zeros(size(mu));

tic
for a = alph
valpha=v>=a;
for x=1:numel(mu)
mask=zeros(size(mu));
mask(x)=1;
mask=convn(mask,valpha,'same');
mask(mask==0)=NaN;
Emu(x)=Emu(x)+min(mask.*mu)*deltaAlpha;
end
end
toc

figure(3)
plot(mu,'Color', 'red');
hold on
plot(Emu,'Color','blue');
legend({'\mu','E\mu'})
title('Erosion (Def. 1)');



Cheers ,