Mittwoch, 30. September 2015

Local Variance – MATLAB CODE

Variance Formula:
Let us understand how global variance works. First let us theoretically define variance in simple terms. In lay man terms, variance is defined as how divergent values are from the average value.

Consider a matrix A=[5 5 5;5 5 5]. The variance of the matrix A is zero.. In the given example, the average is 5 and all the elements in the matrix are equal to 5. So finding deviation in the above example is not possible.

Let us consider another matrix B =[3 7 1;5 4 2]. The variance of the matrix B is 3.8889.. Let us arrive at the result using theoretical formula as follows:
Variance of B = Mean of B^2 – (mean of B)^2
                        = 17.333 – 13.444
                        = 3.888
MATLAB CODE:
Var(B(:),1)
Local Variance
Instead of finding variance for the whole matrix, variance is computed based on a small sliding window.
Steps to Perform:

MATLAB CODE:
I = imread('cameraman.tif');
figure,imagesc(I);colormap(gray);title('Original Image');

I = double(I);
%Define the window size
sz = 5;
mn=floor(sz/2);
%Preallocate the matrix
Output = zeros(size(I));
%Pad the matrix with zeros
I = padarray(I,[mnmn]);

for i=1:size(I,1)-mn*2
for j=1:size(I,2)-mn*2
tmp = I(i:i+(sz-1),j:j+(sz-1));
mu = mean(tmp(:));
        tmp2 = mean(tmp(:).^2);
Output(i,j)=tmp2 - mu.^2;
end
end

figure,imagesc(Output);colormap(gray);



Quick Implementation:




Edge detection using Local Variance

Local statistics can determine the gradient of the image. The local variance can be used to generate an edge map.
Steps to be performed:
1.       Read a grayscale image
2.       Define a window size (For eg: 3x3,5x5,7x7)
3.       Find the local variance
4.       Find the global mean of the local variance
5.       Set local variance to zero if it is less than the global mean else set it to one


MATLAB code:
%Boundary Detection - Local Variance
%Read an image
I = imread('rice.png');
figure,imagesc(I);colormap(gray);

I = double(I);

Explanation:
A grayscale image is taken as input for edge detection. If the input image is RGB then convert it to gray scaleusing ‘rgb2gray’.







MATLAB code:

%Define the window size
sz=3;
window = ones(sz)/sz.^2;

%Find the local mean
mu = conv2(I,window,'same');

%Find the local Variance
II = conv2(I.^2,window,'same');
Lvar = II-mu.^2;

figure,imagesc(Lvar);colormap(gray);title('Local Variance of the image');

Explanation:
A window size of 3 by 3 is defined and local variance is computed. Check ‘local variance- matlab code’ to understand how local variance is estimated.

MATLAB CODE:
%Define a Threshold
meanL = mean(Lvar(:));

%Set the pixel values based on threshold
Boundary = zeros(size(Lvar));
Boundary(Lvar < meanL)=1;
Boundary(Lvar >= meanL) = 0;

figure,imagesc(Boundary);colormap(gray);title('Boundary Extracted Image');

Explanation:
 The mean of the local variance is obtained and using the mean value as threshold, the boundary is defined for the image.  The mean value of the given image is 239.3638.



The threshold value can also be set randomly by the user. For instance, set the threshold value to 500.