You are on page 1of 8

30/1/2018 Lee filter | IMAGE PROCESSING

Email address... Submit

HOME TABLE OF CONTENTS ABOUT ME CONTACT ME PAID PROJECTS VIDEOS PYTHON

IMAGE PROCESSING
Lets Learn together... Happy Reading FOLLOW US
Follow @AaronAngel_
" 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.

Select your favorite


MATLAB code: topic
%Read an Image Denoising
I = imread('coins.png'); Biomedical Imaging
%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

Votes so far: 167


Poll closed

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

GRAB YOUR FREE


GIFT TODAY

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
your valuable comments and a
like on Facebook Fan Page.
THANKS FOR READING

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);

Subscribe in a reader
%Preallocate the Output Matrix
Y = zeros(size(R));
mn = round((sz-1)/2);
Tot = sz(1,1)*sz(1,2);
EImg = padarray(E,mn);

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

Nrhs – To find the number of right hand side parameters

Prhs – Contains the input 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[0]=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[0]);
CIndx = mxGetScalar(prhs[1]);
inMatrix = mxGetPr(prhs[2]);
ncols = mxGetN(prhs[2]);

plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL)


out = mxGetPr(plhs[0]);

/* 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[0]);
CIndx = mxGetScalar(prhs[1]);
inMatrix = mxGetPr(prhs[2]);

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[2]);

ncols will obtain total number of elements in kernel.

plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);


out = mxGetPr(plhs[0]);

The final result will be stored in the variable ‘outMatrix’.

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.

Like "IMAGE PROCESSING" page

Labels: Removing Image noise


Your Reactions: Useful (0) Interesting (0) Not bad (0) :-( (0)

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

4 comments:
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

Ghazal Ba Khadher said...


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

Enjoyed Reading? Share Your Views

Enter your comment...

Comment as: Unknown (Goo Sign out

Publish Preview Notify me

Today's Popular Posts

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
Powered by Blogger.

3015839

Google ping Hypersmash.com

https://angeljohnsy.blogspot.com/2014/08/lee-filter.html 8/8