Diff of /anisodiff_function.m [000000] .. [0743ee]

Switch to unified view

a b/anisodiff_function.m
1
function diff_im = anisodiff(im, num_iter, delta_t, kappa, option)
2
fprintf('Removing noise\n');
3
4
5
fprintf('Filtering Completed !!');
6
7
% Convert input image to double.
8
im = double(im);
9
10
% PDE (partial differential equation) initial condition.
11
diff_im = im;
12
13
% Center pixel distances.
14
dx = 1;
15
dy = 1;
16
dd = sqrt(2);
17
18
% 2D convolution masks - finite differences.
19
hN = [0 1 0; 0 -1 0; 0 0 0];
20
hS = [0 0 0; 0 -1 0; 0 1 0];
21
hE = [0 0 0; 0 -1 1; 0 0 0];
22
hW = [0 0 0; 1 -1 0; 0 0 0];
23
hNE = [0 0 1; 0 -1 0; 0 0 0];
24
hSE = [0 0 0; 0 -1 0; 0 0 1];
25
hSW = [0 0 0; 0 -1 0; 1 0 0];
26
hNW = [1 0 0; 0 -1 0; 0 0 0];
27
28
% Anisotropic diffusion.
29
for t = 1:num_iter
30
31
        % Finite differences. [imfilter(.,.,'conv') can be replaced by conv2(.,.,'same')]
32
        nablaN = imfilter(diff_im,hN,'conv');
33
        nablaS = imfilter(diff_im,hS,'conv');   
34
        nablaW = imfilter(diff_im,hW,'conv');
35
        nablaE = imfilter(diff_im,hE,'conv');   
36
        nablaNE = imfilter(diff_im,hNE,'conv');
37
        nablaSE = imfilter(diff_im,hSE,'conv');   
38
        nablaSW = imfilter(diff_im,hSW,'conv');
39
        nablaNW = imfilter(diff_im,hNW,'conv'); 
40
        
41
        % Diffusion function.
42
        if option == 1
43
            cN = exp(-(nablaN/kappa).^2);
44
            cS = exp(-(nablaS/kappa).^2);
45
            cW = exp(-(nablaW/kappa).^2);
46
            cE = exp(-(nablaE/kappa).^2);
47
            cNE = exp(-(nablaNE/kappa).^2);
48
            cSE = exp(-(nablaSE/kappa).^2);
49
            cSW = exp(-(nablaSW/kappa).^2);
50
            cNW = exp(-(nablaNW/kappa).^2);
51
        elseif option == 2
52
            cN = 1./(1 + (nablaN/kappa).^2);
53
            cS = 1./(1 + (nablaS/kappa).^2);
54
            cW = 1./(1 + (nablaW/kappa).^2);
55
            cE = 1./(1 + (nablaE/kappa).^2);
56
            cNE = 1./(1 + (nablaNE/kappa).^2);
57
            cSE = 1./(1 + (nablaSE/kappa).^2);
58
            cSW = 1./(1 + (nablaSW/kappa).^2);
59
            cNW = 1./(1 + (nablaNW/kappa).^2);
60
        end
61
62
        % Discrete PDE solution.
63
        diff_im = diff_im + ...
64
                  delta_t*(...
65
                  (1/(dy^2))*cN.*nablaN + (1/(dy^2))*cS.*nablaS + ...
66
                  (1/(dx^2))*cW.*nablaW + (1/(dx^2))*cE.*nablaE + ...
67
                  (1/(dd^2))*cNE.*nablaNE + (1/(dd^2))*cSE.*nablaSE + ...
68
                  (1/(dd^2))*cSW.*nablaSW + (1/(dd^2))*cNW.*nablaNW );
69
           
70
       
71
        
72
end