You are on page 1of 8

# 30/1/2018 Lee filter | IMAGE PROCESSING

IMAGE PROCESSING
" Two roads diverged in a wood, and I,
I took the one less traveled by,
And that has made all the difference "-Robert Frost Search This Blog

Search
Lee filter

## Let’s realize a Lee filter using MATLAB for despeckling of an image.

Since it’s a patch based processing, the computation cost will be high.

In order to reduce the same, a part of the code is realized in C language for improved performance.

MATLAB code: topic
%Add multiplicative noise to the image Image Segmentation
J = imnoise(I,'speckle',0.01); Multiresolution processin

## figure,imshow(J); Computer vision

Machine Learning
Remote Sensing
Compression Techniques

Poll closed

https://angeljohnsy.blogspot.com/2014/08/lee-filter.html 1/8
30/1/2018 Lee filter | IMAGE PROCESSING

Featured Post

## Image Processing with

%Apply Lee filter Python
K = Lee_filter_C(I,J,[5 5]);
Python is a high level
figure,imshow(uint8(K));
programming language which has
easy to code syntax and offers
packages for wide range of
applications including nu...

Image Processing
7,726 likes

## Create MATLAB function Lee_filter_C :

This function takes the reference image, speckled/noisy image and the window size as input and Like Page

## performs the following steps.

Be the first of your friends to like this

1. The variance of the reference image is found. Variance can be found either by using MATLAB built-in
function or user defined function. Here in this case, a user defined function is used to find the variance.
2. Based on the size of the kernel, the noisy image is padded with zeros on all sides.
3. The center index of the kernel is found
LIKE "IMAGE
4. The noisy image is processed patch by patch. PROCESSING"
5. The code written in C computelee.c to despeckle the image is used. Support this blog by leaving

MATLAB code:
function Y = Lee_filter_C(R,E,sz)
%R is the Reference Image ADD ME
%E is the Error or Noisy Image
%K is the Kernel or Window IMAGE PROCES
%Y is the Output Image
Follow

% Y = mean(K)+W*(C-mean(K);
% W = variance(K)/(variance(K)+variance(R))

## %Define the type

R = double(R); Subscribe Now:
E = double(E);

%Preallocate the Output Matrix
Y = zeros(size(R));
mn = round((sz-1)/2);
Tot = sz(1,1)*sz(1,2);

https://angeljohnsy.blogspot.com/2014/08/lee-filter.html 2/8
30/1/2018 Lee filter | IMAGE PROCESSING

## %Variance of the reference Image

Rvar = myvar(R);
%Rvar = var(R(:));

Indx = floor(median(1:Tot));
TAGS
for i = 1:size(R,1)
for j = 1:size(R,2) Removing Image
K = EImg(i:i+sz(1,1)-1,j:j+sz(1,2)-1); noise GUI
Y(i,j) = computelee(Rvar,K(Indx),K(:)'); Components in
MATLAB Image
end Conversion Edge detection
end Photoshop effects in
MATLAB MATLAB
BUILT_IN FUNCTIONS
end Morphological Image Processing
Video Processing Array functions
in MATLAB Files Histogram
NOTE: save the above function as Lee_filter_C.m equalization Image Compression
Object Identification Optical
Function to find the variance: illusion Shapes Templates Image
MATLAB code: Geometry Image Arithmetic

## function var_v = myvar(I)

I = I(:); Followers
var_v = sum((I-mean(I)).^2)/numel(I);
end Seguidores (107) Siguiente

## NOTE: Save the above function as myvar.m

C program: computelee.c

## Basics on MEX files in MATLAB:

If you are familiar with C programming then we just need to understand the gateway from MATLAB to
C programming. The rest of the procedures will be same as we code in c.
The main gateway function for writing the C program is Mex function and it normally takes 4
parameters. Seguir

## Nlhs – To find number of left hand side parameters

Plhs – Contains all the output parameters in an array

C code:

#include "mex.h"

## /* Find variance and mean of the pixels in the window */

void arrayProduct(double v, double In, double *y, double *z, mwSize n)
{
double VarW,MeanW,W;
mwSize i;

MeanW=0;
for (i=0; i
MeanW=MeanW+y[i];
}
MeanW=MeanW/n;
VarW=0;
for(i=0;i
{
VarW=VarW+((y[i]-MeanW)*(y[i]-MeanW));
}
VarW=VarW/n;

W=VarW/(VarW+v);
z=MeanW+W*(In-MeanW);

https://angeljohnsy.blogspot.com/2014/08/lee-filter.html 3/8
30/1/2018 Lee filter | IMAGE PROCESSING
}

## void mexFunction( int nlhs, mxArray *plhs[],

int nrhs, const mxArray *prhs[])
{
double Rvariance,CIndx,*inMatrix,*out;
size_t ncols;

Rvariance = mxGetScalar(prhs);
CIndx = mxGetScalar(prhs);
inMatrix = mxGetPr(prhs);
ncols = mxGetN(prhs);

## plhs = mxCreateDoubleMatrix(1, 1, mxREAL)

out = mxGetPr(plhs);

## /* Call the function arrayProduct */

arrayProduct(Rvariance,CIndx,inMatrix,out,(mwSize)ncols);
}

Let’s compare the calling function in MATLAB and the C code for better understanding.

MATLAB code:

computelee(Rvar,K(Indx),K(:)');

## Three parameters are passed to the function computeelee.c

1. Variance of the reference image
2. Centre pixel from the kernel
3. All the pixels from the kernel based on the window size

C code:
Rvariance = mxGetScalar(prhs);
CIndx = mxGetScalar(prhs);
inMatrix = mxGetPr(prhs);

## Rvariance contains the variance of the reference image

CIndx contains the centre pixel of the corresponding kernel/patch
inMatrix contains all the pixels of the corresponding kernel/patch

ncols = mxGetN(prhs);

## plhs = mxCreateDoubleMatrix(1, 1, mxREAL);

out = mxGetPr(plhs);

## The function ‘arrayProduct’ written in C language is called to perform the computation.

Steps to be performed:

https://angeljohnsy.blogspot.com/2014/08/lee-filter.html 4/8
30/1/2018 Lee filter | IMAGE PROCESSING

Let’s see how Lee filter works on homogeneous area and edge based area.

Homogeneous Patch

https://angeljohnsy.blogspot.com/2014/08/lee-filter.html 5/8
30/1/2018 Lee filter | IMAGE PROCESSING

## Edges and lines

The result shows that the filter works well on homogeneous area rather than on edges and lines.

## Points to remember when using Mex file:

1. If you are using the C code for the first time, its better to find the appropriate compiler and configure to
use it.
2. Compile the C code if the compiler is already present and make sure the compilation is successful.
3. Syntax to setup the compiler: mex - setup
The above syntax will identify the available compilers in your local system and you can configure it
manually.
4. For compiling the above c code: mex computelee.c
For successful compilation, the sample output will look like below:
Building with 'lcc-win32'.
MEX completed successfully.
5. The result of successful compilation will generate computelee.mexw32 for 32 bit system and for 64 bit
system, you can find computelee.mexw64 file in your local directory.

To sum up, the two functions Lee_filter_C.m and myvar.m should be placed in the same directory.
Computelee.c should also be placed in the same directory and the successful compilation of the same is
mandatory.

I hope the readers of my blog will be familiar with working on Mex files. If you need any tutorial or post
on this topic, kindly post or mail your suggestions.

## Labels: Removing Image noise

https://angeljohnsy.blogspot.com/2014/08/lee-filter.html 6/8
30/1/2018 Lee filter | IMAGE PROCESSING

Sun flower said...
very nice blog http://www.softql.com/
December 24, 2014 at 4:09 PM

## Raj Aryan said...

really nice blog.
E2matrix
January 20, 2015 at 5:21 PM

saikrishna k said...
how to convert cmexfile to matalab code sir
March 18, 2015 at 1:13 PM

what if you do not know the variance of the original data
May 19, 2017 at 2:17 AM

## Gaussian Filter without using the MATLAB built_in function

Gaussian Filter Gaussian Filter is used to blur the image. It is used to reduce the noise and the image details. ...

## FACE DETECTION - MATLAB CODE

Lets see how to detect face, nose, mouth and eyes using the MATLAB built-in class
and function. Based on...

Find Area, Perimeter, Centroid, Equivdiameter, Roundness and Bounding Box without Using MATLAB Function ‘regionprops’
In MATLAB, the function ‘regionprops’ is used to measure the image properties. Here are some basic properties computed
without using the ...

## Otsu’s thresholding without using MATLAB function graythresh

To perform the thresholding I followed these steps: a. Reshape the 2 dimensional grayscale
image to 1 dimens...

## Image Sharpening using second order derivative –(Laplacian)

Prerequisite: Read EdgeDetection- fundamentals The derivative operator Laplacian for an Image is defined as For X-
dire...

https://angeljohnsy.blogspot.com/2014/08/lee-filter.html 7/8
30/1/2018 Lee filter | IMAGE PROCESSING