Changed fhog coordinate transforms so that they are properly invertible.

This commit is contained in:
Davis King 2013-10-20 11:04:32 -04:00
parent a67c7c73c9
commit 011758824a
3 changed files with 35 additions and 1 deletions

View File

@ -434,7 +434,13 @@ namespace dlib
)
{
// Convert to image space and then set to the center of the cell.
return (p+point(1,1))*cell_size + point(1,1) + point(cell_size/2,cell_size/2);
point offset;
if (p.x() >= 0 && p.y() >= 0) offset = point(cell_size/2,cell_size/2);
if (p.x() < 0 && p.y() >= 0) offset = point(-cell_size/2,cell_size/2);
if (p.x() >= 0 && p.y() < 0) offset = point(cell_size/2,-cell_size/2);
if (p.x() < 0 && p.y() < 0) offset = point(-cell_size/2,-cell_size/2);
return (p+point(1,1))*cell_size + point(1,1) + offset;
}
// ----------------------------------------------------------------------------------------

View File

@ -130,6 +130,8 @@ namespace dlib
invertible. Therefore, the returned location will be the center of the cell
in the original image that contained the FHOG vector at position p. Moreover,
cell_size should be set to the value used by the call to extract_fhog_features().
- Mapping from fhog space to image space is an invertible transformation. That
is, for any point P we have P == image_to_fhog(fhog_to_image(P,cell_size),cell_size).
!*/
// ----------------------------------------------------------------------------------------
@ -144,6 +146,8 @@ namespace dlib
ensures
- maps a rectangle from fhog space to image space. In particular this function returns:
rectangle(fhog_to_image(rect.tl_corner(),cell_size), fhog_to_image(rect.br_corner(),cell_size))
- Mapping from fhog space to image space is an invertible transformation. That
is, for any rectangle R we have R == image_to_fhog(fhog_to_image(R,cell_size),cell_size).
!*/
// ----------------------------------------------------------------------------------------

View File

@ -103,9 +103,33 @@ namespace
}
}
void test_point_transforms()
{
for (int cell_size = 1; cell_size < 10; ++cell_size)
{
print_spinner();
for (long i = -10; i <= 10; ++i)
{
for (long j = -10; j <= 10; ++j)
{
for (long k = -10; k <= 10; ++k)
{
for (long l = -10; l <= 10; ++l)
{
rectangle rect(point(i,j), point(k,l));
DLIB_TEST(rect == image_to_fhog(fhog_to_image(rect,cell_size),cell_size));
}
}
}
}
}
}
void perform_test (
)
{
test_point_transforms();
test_on_small();
print_spinner();