Giter Club home page Giter Club logo

online_place_recognition's Introduction

Graph-based matching of image sequences

This project is not maintained. Please consider a newer version image_sequence_localizer.

What does this code do?

Given two sequences of images represented by the descriptors, the code constructs a data association graph and performs a search within this graph, so that for every query image, the code computes a matching hypothesis to an image in a database sequence as well as matching hypothesis for the previous images.

The matching procedure can be perfomed in two modes --- feature based and cost matrix based mode.

For more theoretical details, please refer to our paper Lazy data association for image sequence matching under substantial appearance changes.

Checkout the video:

Matching example video

Installation guide

Prerequisites

  • Yaml-cpp (requires BOOST till now): sudo apt-get install libyaml-cpp-dev
  • OpenCV: sudo apt-get install libopencv-dev
  • Qt5: sudo apt-get install qt5-default
  • (optional) Doxygen (generate documentation): sudo apt-get install doxygen

For the OSX install, you may need to run the following commands:

  • brew install yaml-cpp
  • brew install opencv
  • brew install doxygen
  • brew install qt5
  • export CMAKE_PREFIX_PATH=/usr/local/Cellar/qt/[YOUR VERSION] For example eg. export CMAKE_PREFIX_PATH=/usr/local/Cellar/qt/5.8.0_2

Build

To build the project, run the following commands from the main directory:

  • mkdir build
  • cd build
  • cmake ..
  • make -j4

Additionally, you should be able to generate documentation as follows:

  • cd doc
  • doxygen online_place_recognition.conf

To access the documentation run firefox html/index.html.

What do I need to run this code?

  • Precomputed image descriptors or cost matrix
  • Configuration file

An example of how to run the code please see RUN EXAMPLES.

Feature based matching

In this mode, the program operates using precomputed image descriptors. To run the matching procedure you need to provide the feature files. An example of how to run the code can be found feature based matching example.

For details on used feature descriptors please refer to feature description.

Note: In this mode, individual features will be loaded and matched on demand. In order to be able to deal with dramatic visual changes, we typically operate with high-dimensional features and the matching procedure can take quite a long time--depending on the size and the complexity of the sequences.

Cost matrix based matching

For this mode, we require the cost matrix between two sequences to be given/pre-computed. To compute the matching matrix, please see the following estimating of a cost matrix example.

An example on how to run the matching procedure in this mode can be found cost matrix matching example.

Note: This method may be used if you have rather small sequences (up to 1000 images). For bigger sequences, you may run into memory issues since the programs has to store a quite big matrix.

Adapting the code for custom features

This framework can be adapted to matching features of the different type --- your own features. To use the graph matching strategy with your own features see the following description.

Related publication

Please cite the related publication, if you use the code:

@article{vysotska2016lazy, 
  title     = {Lazy Data Association for Image Sequences Matching Under Substantial Appearance Changes},
  author    = {Vysotska, Olga and Stachniss, Cyrill},
  year      = {2016},
  publisher = {IEEE Robotics and Automation Letters}
  number    = {1},
  pages     = {1-8},
  volume    = {1},
  doi       = {10.1109/LRA.2015.2512936}
}

Troubleshooting

In case the code is not working for you or you experience some code related problems, please consider openning an issue.

online_place_recognition's People

Contributors

ovysotska avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

online_place_recognition's Issues

vertical line in matching matrix

I set Sunny_Day as reference and RainyNight query. However, I get a vertical line in matching matrix, which means that the car is staying within the query sequence. But in case of Alderley dataset it is not the case.
Olga gave me two situations that might be happening here:
"

  1. Your non-matching cost is too high. This means that you allow images with "high" matching cost to be considered as a match and the system do not differentiate between good and bad matches. To check this try to gradually reduce the non-matching cost until you see blue nodes appearing on the line and check if the shape of the line is changing. If, however, only small amount of red nodes are left, than you restrict your search to only peak very good matches.

  2. Something is wrong with the way the costs are computed. The only way this search algorithm can give reasonable results is if the "underlying" cost matrix actually has a pattern ( this you in theory should not compute for online case). To check if this is the case you can construct the full matching matrix and see if you as a user can see a pattern in the matrix. For this you can use apps/create_cost_matrix code. If not, something is wrong with cost computation or the features + metric is not good enough for dealing with such challenges (but I don't think this is the case for Alderley and OverFeat (10th layer)).
    "
    I am trying these two and will update later.
    Thanks so much to Olga.

About off-line implementation?

Hi, Thanks for the code.
We want to implement a off-line place recognition. That is, the reference is first gone through to generate a database, then the query will be gone through to achieve place recognition. In this case, the system is more like a loop detection framework. Can u tell us what should we do?

Pixmap is a null pixmap

I extract Alderley datasets of Sunny_Day and Rainy_Night.
Firstly, I compared two identical sequences, so the expected result should be a diagonal line, which it is. So this is correct. However, the two windows have no photos been retrieved, which said "Pixmap is a null pixmap".

dyld: Library not loaded

When I create cost matrix with "./create_cost_matrix config.yaml" in folder online_place_recognition/build/bin/, it said:
"
dyld: Library not loaded: @rpath/libopenblasp-r0.2.19.dylib
Referenced from: /Users/zhanghui/anaconda/lib/libopencv_stitching.3.2.dylib
Reason: image not found
Abort trap: 6
"
Besides, my config.yaml writes as below:
path2ref: reference/OverFeat_features/
path2qu: query/OverFeat_features/
querySize: 999
expansionRate: 0.1
fanOut: 1
nonMatchCost: 2.0
path2refImg: reference/images/
path2quImg: query/images/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.