Click here to Skip to main content
Click here to Skip to main content

Edge Detection in Images with Wavelet Transform

By , 14 Nov 2007
 
Screenshot - edges.jpg

Introduction

Edge detection is used in computer vision applications for contours extraction of objects. The usual method is to use convolution operation of the image with complex filters like Sobel or Prewitt.

Sobel Filter

Real
1.0  0.0 -1.0
2.0  0.0 -2.0
1.0  0.0 -1.0
Imaginary
1.0  2.0  1.0
0.0  0.0  0.0
-1.0 -2.0 -1.0

Prewitt Filter

Real
0.5  0.0 -0.5
0.5  0.0 -0.5
0.5  0.0 -0.5
Imaginary
0.5  0.5  0.5
0.0  0.0  0.0
-0.5 -0.5 -0.5

You may extract the edges for example with my vec2D wrapper described in my article Vector Class Wrapper SSE Optimized for Math Operations.

However unless integer optimized, floating point operations might take quite a long time. With wavelet transform, you might achieve similar results with a few mathematical operations. For example, Haar transform of the image provides details of that image contained in the high frequency bands very similar in appearance if you used X and Y difference filters on the same image.

X Difference Filter

0.0  0.0  0.0
0.5  0.0 -0.5
0.0  0.0  0.0

Y Difference Filter

0.0  0.5  0.0
0.0  0.0  0.0
0.0 -0.5  0.0

If we keep the details of the image obtained with Haar transform, remove the coarse-grained low frequency component and perform image reconstruction, we obtain the edges of the objects present in the image.

Background

Image processing background for Edge Detection is needed. You might also consult my articles about wavelet analysis of image data: 2D Fast Wavelet Transform Library for Image Processing and Fast Dyadic Image Scaling with Haar Transform.

Using the Code

The code and the demo application are used from my article 2D Fast Wavelet Transform Library for Image Processing where you may find details on how to run the code and use the library. In this project, I added several edge specific operations so you may experiment with different wavelet filters, scales, and denoising thresholds to select the best combination. Below I demonstrate the daub1 filter application, which is the filter used in Haar transform.

Open the image and transform it to 1, 2 or 3 scales. You might add the threshold to remove the noise. Below, the daub1 filter is selected with 1 scale transform without denoising:

1 scale daub1 FWT

You will get this FWT spectrum:

FWT spectrum

Now click Transform->Denoise menu item to remove low frequency component:

Removed low freq component

You might find the corresponding function in the BaseFWT2D class:

void BaseFWT2D::remove_LLband()
{
        if (m_status <= 0)
                return;

        unsigned int width = m_width / 
            (unsigned int)(pow(2.0f, (float)getJ()));
        unsigned int height = m_height / 
            (unsigned int)(pow(2.0f, (float)getJ()));
        
        for (unsigned int y = 0; y < height; y++) 
                for (unsigned int x = 0; x < width; x++)                     
                        spec2d[y][x] = 0;                
}

Now you may reconstruct the image:

In two steps to get edges

It does not seem like the edges yet. You need just subtract 128 from the image and compute the absolute value with Transform->Abs values menu item:

The edges

But the edges are rather vague. First I proceeded with contrast stretching, that is normalizing the image to 0 ... 255 range. But there might be several pixels at the upper limit of the range and it does not really improve the situation. The better choice would be non-linear normalization like logarithmic scale but I just multiply the pixel data by some value and obtain the more prominent edges. For 1 scale transform, the multiplication by 7 works well and does not overflow the 255 limit for the majority of pixels, but for 2 or 3 scales you might diminish the multiplication number.

Now click Transform->Contrast stretch to amplify your edges:

The more prominent edges

You may compare the same picture results I obtained with the Sobel filter. It looks smoother, but then you might proceed to morphological operations like erosion and dilation and get a thin skeleton of the contour so in the end, the results will be very close.

The edges by Sobel filter

I've developed Haar transform MMX optimization and in future, plan to provide an update to the code as EdgeDetector class or something similar and compare the performance.

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)

About the Author

Chesnokov Yuriy
Engineer
Russian Federation Russian Federation
Member
Former Cambridge University postdoc (http://www-ucc-old.ch.cam.ac.uk/research/yc274-research.html), Department of Chemistry, Unilever Centre for Molecular Informatics, where I worked on the problem of complexity analysis of cardiac data.
 
As a subsidiary result we achieved 1st place in the annual PhysioNet/Computers in Cardiology Challenge 2006: QT Interval Measurement (http://physionet.org/challenge/2006/)
 
My research intrests are: digital signal processing in medicine, image and video processing, pattern recognition, AI, computer vision.
 
My recent publications are:
 
Complexity and spectral analysis of the heart rate variability dynamics for distant prediction of paroxysmal atrial fibrillation with artificial intelligence methods. Artificial Intelligence in Medicine. 2008. V43/2. PP. 151-165 (http://dx.doi.org/10.1016/j.artmed.2008.03.009)
 
Face Detection C++ Library with Skin and Motion Analysis. Biometrics AIA 2007 TTS. 22 November 2007, Moscow, Russia. (http://www.dancom.ru/rus/AIA/2007TTS/ProgramAIA2007TTS.html)
 
Screening Patients with Paroxysmal Atrial Fibrillation (PAF) from Non-PAF Heart Rhythm Using HRV Data Analysis. Computers in Cardiology 2007. V. 34. PP. 459–463 (http://www.cinc.org/archives/2007/pdf/0459.pdf)
 
Distant Prediction of Paroxysmal Atrial Fibrillation Using HRV Data Analysis. Computers in Cardiology 2007. V. 34. PP. 455-459 (http://www.cinc.org/archives/2007/pdf/0455.pdf)
 
Individually Adaptable Automatic QT Detector. Computers in Cardiology 2006. V. 33. PP. 337-341 http://www.cinc.org/archives/2006/pdf/0337.pdf)

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 5memberKakuOceam21 May '13 - 16:59 
very clear
Questionthanksmembertnla14 Jan '12 - 23:20 
good job
Rose | [Rose] Rose | [Rose] Rose | [Rose]
GeneralMy vote of 5memberabcdezhao200817 Nov '11 - 2:21 
study
GeneralJust commentsmemberVaclav_Sal6 Nov '10 - 11:08 
It seems that this article is geared to ideal academical conditions and is mostly of academic exercise value.
I just started experimenting with image processing and I am finding out that the source is so noisy that even a simple "motion detection" is not so simple. I am also finding out that in this real enviroment edge detection is good for a show and not for serious image processing.
So far I can identify an object using histogram with better and more predictable results.
If would be nice if your future articles reflected a real enviroment.
AnswerRe: Just commentsmemberChesnokov Yuriy7 Nov '10 - 8:14 
that is not the article about motion detection to compare againts your histogram based object identification.
there are numerous filters available in addition to daub1 example: daub, coifs, biorth to experiment with number of decomposition scales, thresholds that can componsate for noises.
the larger the filter the more noise it can reduce.
Чесноков

GeneralQuestionmembersergiodd24 Aug '10 - 2:46 
Hi,
 
i tried your little demo and i want to use your source for a small project.
But i developing in c# and want to use it in a dll. It is possible?
 
Thank you for your answer!
GeneralRe: QuestionmemberChesnokov Yuriy24 Aug '10 - 2:57 
you may put it into Dll and use PInvoke from C# application
Чесноков

GeneralRe: Question [modified]membersergiodd24 Aug '10 - 3:12 
Ok this was my first idea too.
But i´m not sure how to do it. Because i only need the wavelet classes
and not any Gui. And i´m not sure about using an unmanaged dll in managed runtime like
c#. Any ideas for me? This is important for my diploma paper.
 
Thx

modified on Tuesday, August 24, 2010 2:28 PM

GeneralMy vote of 1memberG.subburaju21 Dec '09 - 18:15 
sdsds
GeneralDe-noisingmemberCPPCoder16 Apr '08 - 14:33 
I need to filter out noise in an image. How this denoising can be achieved using this library. By default FWT library take filter name and for denoising is there any specific filter which will suppress high frequency noises alone. If I do FWT2D RGB Transform (With no filter selected and threshold is 3), Denoise and FWT2D RGB Synth the reconstructed image is not denoised by lost considerable image data. It will be great if you could provide help on this.

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130523.1 | Last Updated 14 Nov 2007
Article Copyright 2007 by Chesnokov Yuriy
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid