Simple descriptor – Bike 1
Download
Report
Transcript Simple descriptor – Bike 1
Harris detector
Convert image to greyscale
Apply Gaussian convolution to blur the image and
remove noise
Calculate gradient of image in x and y direction for
every pixel
For each point in the image,
consider a 3x3 square window of pixels around that
point.
Compute the Harris matrix H for that point,
Compute the corner strength function
Choose points whose c(H) is above threshold and
c(H) is local maxima in a 10x10 neighborhood.
These points will be called the feature points
My simple descriptor
For each feature points
Take a 45x45 window centered at the feature point
Normalise the color of each pixels in the window
Make a 9x9 window feature descriptor by applying
linear weights to every 5 points and summing up
the RGB values separately.
The feature descriptor will contain the RGB value
of the points, hence in total our feature
descriptor has 9x9x3 dimensions
Simple descriptor – Bike 1
Simple descriptor – Bike 2
Simple descriptor – bike 3
Simple descriptor – bike 4
Simple descriptor – bike 5
Simple descriptor – bike 6
My simple feature descriptor: bikes 1 – bikes 2 – matching with ratio
My simple feature descriptor : bikes 1 –bikes 3 – matching with ratio
Simple descriptor numbers
(testMatch results)
The total error is the average Euclidean distance between a
(correctly) transformed feature point in the first image and its
matched feature point in the second image.
My descriptor
SIFT
Img1-img2
43.651483
7.281360
Img1-img3
64.347448
13.653063
Img1-img4
112.002063
19.995964
Img1-img5
320.155898
34.570192
• Your error number will be slightly different:
(nInliers/nMatches)
My evaluation:
for (unsigned int i=0; i<f1.size(); i++) {
applyHomography(f1[i].x, f1[i].y, xNew, yNew, h);
if (matches[i].id > 0) {
d += sqrt(pow(xNew-f2[matches[i].id-1].x,2)+pow(yNew-f2[matches[i].id-1].y,2));
n++;
}
}
return d / n;
Your evaluation in skeleton code:
for (unsigned int i=0; i<f1.size(); i++) {
applyHomography(f1[i].x, f1[i].y, xNew, yNew, h);
if (matches[i].id > 0) {
d = sqrt(pow(xNew-f2[matches[i].id-1].x,2)+pow(yNew-f2[matches[i].id-1].y,2));
if (d < epsilon)
nInliers++;
nMatches++;
}
}
return (nInliers / (float)nMatches);