GithubHelp home page GithubHelp logo

correlation's Introduction

README

This application perform digital image correlation based on the optical flow method by Lucas and Kanade. A small video that illustrates how this program works is at https://youtu.be/Ak4puzdqWDM

gui

What is this repository for?

It consists of a Qt GUI that calls a multi-threading computational engine, running on the CPU and a CUDA engine to perform the computations in the GPU.

A set of images can be selected in the GUI, which will display the first two images of the set. Selection of the domain to be correlated can be done using rectangular domains, annular domains and "blob" domain, which are defined by a continuous trace of the mouse over the image. Domains can also be adjusted numerically and via mouse clicks.

Initial guess for the correlation algorithm can be automatic, null or user-selected. In the last mode, the user can adjust the position of the domain in the first deformed image via mouse clicks. After the initial guess is defined for the first two images, the motion is assumed to be at constant velocity, so past deformations are extrapolated to produce the next initial guesses.

Reports can be saved with the resulting correlation parameters, number of iterations and chi.

Check out the video for an example (correlation_class/video_instructions.mp4)

How do I get set up?

Summary of set up

The project is currenly set up as a Qt Creator project in Ubuntu 18.04. It uses the openCV 4.5 libraries, CUDA 11.1, openmp and Eigen. Of course also uses Qt 15.1.

Configuration

File defines.h allows for defining the number of thread used in the CPU, which I currnetly have at 20. When I run the code in my laptop (smaller chip) I change that to 4-8. Also in "defines.h" one can choose if you want to use CUDA and the GPU. Since I don't have a CUDA compatible laptop, I set CUDA_ENABLED to false. The maximum number of GPUs is set to 32. I just use that variable to statically define a small array for the cuda class, so there is not that much down side. The code detects the number of available GPUs. At the moment, since the implementation of the GPU image pyramids, I set the number of GPUs = 1 always.

I use -std=c++17, -fopenmp and -use_fast_math in anticipation of using some of the abbreviated function in the future.

Dependencies

Project needs to link to

openCV: I use version 4.5. Other earlier version will probably work too, since I am not using functionality other than the very basic, such us opening images. Used libraries are -lopencv_highgui -lopencv_core -lopencv_imgproc -lopencv_imgcodecs

CUDA: I used a somehow more complex version of CUDA than what I need at the moment, in anticipation of playing around with the dynamic parallelism. For this I do separate compilation with relocatable device code, which requires the separate compilation (and CUDA linking with -lcudadevrt). Other than that, I use -lcudart -lcuda -lcusolver -lcublas. I use the CUDA version 11.1.

Eigen: This is a easy one to setup. Just needs the header files.

Qt: I use core, gui, widgets and printsupport. 5.3, 5.9, 5.11, 5.12 and 5.15 work.

openmp: parallelization of some loops.

I also link to the nvToolsExt from nVidia to make CPU side debug traces in the nvvp profiler.

Who do I talk to?

Send me an email at [email protected] with comments/suggestions.

correlation's People

Contributors

namascar avatar

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.