- Improvements on Corner Detection
I tried to improve Harris Corner Detection by
Considering diagonal derivatives as well as horizontal and vertical derivativesThis was motivated by a lot of 30~60 degree edges being detected in the initial stage. I defined a 2x2 matrix using diagonal derivatives and also carried out same calculation on it. Then I took the minimum of the two results ( I also tried multiplying them, but it didn't make much difference or sometimes performed worse. ). This adds possible directions the Harris window can move around particular pixel and penalizes diagonal edges.
Taking the top N candidates that are also local maxima in their neighborhoodsThe number N varies according to image size. Then I can avoid using arbitrary thresholds which vary from image set to image set. By choosing only local maxima, I can spread the detected points rather evenly throughout the image. The radius of local maxima checking is also set according to image size.
EtcI use 7x7 Harris window but weight the values with Gaussian Kernel to more closely approximate circular window. Standard deviation for the Gaussian kernel is 1. I also consider all three color channel for derivative calculation. For example, Ix is sum of squares of derivatives of each color channel.
- Window descriptor
Bigger windows for bigger images (But not by a lot)I observed from trial and error that sometimes bigger windows for bigger images work better. However, this change is not very noticeable, and might even be some particular property for given test sets.
Blurred windowBlurred windows will be more robust against small changes in the location of the detected points. Since I am taking top N detected points, some of the detected points show rather lower repeatibility. I take the 5x shrinked image and store the neighborhood points in the window, effectively taking blurred large window. This is a minor variation of Rick's technique.
Normalized Entries.Before storing the window values into the feature descriptors, I normalize the values to make it more robust against intensity changes. Currently, each color channel computes its own normalization.
- Rotated descriptor
In an effort to make it rotation invariant, I calculated the principal gradient direction in the circular window around the detected point and took the rectangular window rotated by the angle of the principal direction. When needed, I bilinearly interpoilate the pixel values from the image.
ThresholdsTo improve the Matcher that uses Euclidean distances, I used the ratio of the best distance and second best distance and thresholded it. It gave much better performance over just thresholding the best distance because of the changes in intensity, changes in different image sets, and changes in window size.
Raised powerAlso, in Euclidean distance, I raised the power to be more than 3, so that the discrepancies are penalized even more severely. This improved the performance quite a lot.
Benchmark values
leuven 12.339780 wall 2.974932 bikes 52.521001 graf 193.226052
Picture samples
Yongjoon Lee (yongjoon).