4.0

4.0 | 5 ratings Rate this file 20 Downloads (last 30 days) File Size: 7.59 KB File ID: #22390
image thumbnail

Robust Image Corner Detection based on the Chord-to-Point Distance Accumulation Technique

by Mohammad Awrangjeb

 

10 Dec 2008 (Updated 25 May 2009)

A robust scale-space corner detector that outperforms existing single and multi-scale detectors.

| Watch this File

File Information
Description

1. Find the edge image using the Canny edge detector.

2. Extract edges (curves) from the edge image:
    2a. fill gaps if they are within a range and select long edges,
    2b. find T-junctions and mark them as T-corners.
    2c. obtain the `status' of each selected edge ${\Gamma}$ as either `loop' or `line'.

3. Smooth ${\Gamma}$ using a small width Gaussian kernel in order to remove quantization noises and trivial details. This small scale Gaussian smoothing also offers good localization of corners.

4. At each point of the smoothed curve ${\Gamma_s}$, compute three discrete curvatures following the CPDA technique using three chords of different lengths.

5. Find three normalized curvatures at each point of ${\Gamma_s}$ and then multiply them to obtain the curvature product.

6. Find the local maxima of the absolute curvature products as candidate corners and remove weak corners by comparing with the curvature-threshold ${T_h}$.

7. Calculate angles at each candidate corners obtained from the previous step and compare with the angle-threshold ${\delta}$ to remove false corners.

8. Find corners, if any, between the ends of smoothed `loop' curves and add those corners which are far away from the detected corners.

9. Compare T-corners with the detected corners and add those T-corners which are far away from the detected corners.

Acknowledgements

A Corner Detector Based On Global And Local Curvature Properties inspired this file.

This file inspired A Fast Corner Detector Based On The Chord To Point Distance Accumulation Technique, Affine Resilient Curvature Scale Space Corner Detector, and A Robust Corner Matching Technique.

Required Products Image Processing Toolbox
MATLAB release MATLAB 7 (R14)
Other requirements (Should be compatible with Unix as well as Windows)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (8)
27 Apr 2009 Mohammad Awrangjeb

Hi Mike,
Thanks for your enquiries.

1. The absolute CPDA curvature values are calculated before normalization. In the previous code I forgot to take absolute value before normalization. Absolute function will protect some normalized values to become infinite (when maxium positive curvature value is 0) or to become greater than 1 (when maximum curvature value is negative). Please apply abs() function on line 118: C3(j,1:L) = abs(accumulate_chord_distance(xs,ys,chordLen,L,curve_mode(i,:)));

Note: updated code will be uploaded soon.

2. This is just an assumption that the CPDA curvature value at a T-junction point is 10. It is just to distinguish T-junctions from actual corner locations in any later applications. This value in fact cannot be used to compare with other corners during matching.

You may set any other value for your convenience.

26 Apr 2009 Mike

Hi, great program

I have a couple of question.
1. Are the curvature values normalized or absolution, as I have encountered values from very small to very large (up to 10^17)?

2. some curvature values are just 10's (exactly 10). I've looked through the code, it seems that 10 is appended to the curvature matrix on some occasions. Could you tell me what is the criteria?

19 Jan 2009 Mohammad Awrangjeb  
19 Jan 2009 Mohammad Awrangjeb  
19 Jan 2009 Mohammad Awrangjeb

Sorry, own rating! it happended accidentally. I could not removed afterwards! I did re-rate to make the previous rating back!

19 Jan 2009 Mohammad Awrangjeb

I fixed and updated the bug today. Mathworks will show the change soon.

Bug fixing: add/update the following two lines

left = smoothed_curve(extremum(1):-1:1,:);
right = smoothed_curve(end:-1:extremum(end),:);

before the follwoing line

ang=curve_tangent([left;right],extremum(1));

Thanks to Natalia and Piao Lin.

06 Jan 2009 piao lin

"left = smoothed_curve(extremum(1)+W:-1:W+1,:);"

I don't konw what the "right " means
I just added below code

"right = smoothed_curve(extremum(end)+W:-1:W+1,:); "

it can work , the output result it seams not bad
the x coordinates of extracted points is the second col of cout(the result), y is the first , a little different from general situation, hoho

06 Jan 2009 Natalia

Hi, thanks for your code, it seems a good approach, however when run you get the following error:

??? Undefined function or variable 'right'.
Error in ==> cpda>getcorner at 208
ang=curve_tangent([left;right],extremum(1));

I had a look at the code and definitely, the variable right it's never defined....
Hopefully you can solve it.,,
Nat

Updates
19 Jan 2009

Bug fixed at function getcorner(). Thanks to users Natalia & piao lin.

27 Apr 2009

The absolute CPDA curvature values are calculated before normalization (line 118).

25 May 2009

We set sigma=3 for all curves for the CPDA detector, since setting the sigma value based on the curve-length is rather impractical. This change improves the performance of the detector.

Contact us