hugbed / opens3d Goto Github PK
View Code? Open in Web Editor NEWOpen Source Stereoscopic 3D Production Assistance Tools
License: BSD 3-Clause "New" or "Revised" License
Open Source Stereoscopic 3D Production Assistance Tools
License: BSD 3-Clause "New" or "Revised" License
Currently only the inliers in the right image are returned.
Having both could be useful since vertical disparities are lost if we only have points in one image and disparities as the results.
As stated in the article cited below, solving STAN alignment with tiltKeystone and zParallaxDeformation may lead to numerical stability issues since they depend on multiple parameters. These parameters should be removed from the estimation for use with RANSAC since a small error in the inputs may lead to inconsistent large output errors.
Note: it would be nice to control the number of parameters to solve without having to change the StanFundamentalMatrixSolver class.
Zilly, Frederik, et al. "Joint estimation of epipolar geometry and rectification parameters using point correspondences for stereoscopic TV sequences." Proceedings of 3DPVT. 2010.
Dealing with videos, a frame may have a large number of detected features (lets say more than 100) while the next frame may have not enough features to give a correct answer (not enough inliers for ransac --> not large enough probability for a good answer).
The alignment and rectification parameters should not be updated if there are not enough features found.
Add a way to easily display feature matches (inliers) that correspond to the model computed by DisparityAnalyzer.
To prevent having to define (and repeat in each class) all the operations (move, copy) when defining a virtual destructor for an abstract class.
So:
Interfaces should inherit privately this base class to use the features of this base class without any conceptual relationship between the 2 classes.
Quote from Scott Meyers' book :
Example:
#include <iostream>
#include <memory>
using namespace std;
class Empty {};
// defines virtual destructor for interface (pure abstract) class
// deletes copy (don't know if derived will contain incopiable types)
// allows move (everything is movable)
template <class B = Empty>
class rule_of_five_interface : B {
public:
virtual ~rule_of_five_interface() = default;
rule_of_five_interface(const rule_of_five_interface&) = delete;
rule_of_five_interface& operator=(const rule_of_five_interface&) = delete;
rule_of_five_interface(rule_of_five_interface&&) = default;
rule_of_five_interface& operator=(rule_of_five_interface&&) = default;
virtual gsl::owner<rule_of_five_interface*> clone() = 0;
protected:
constexpr rule_of_five_interface() = default;
};
class Interface : rule_of_five_interface<> {
public:
virtual int next() = 0;
};
class Impl : public Interface {
public:
Impl() {}
~Impl() override = default;
int next() override { return 1; }
};
int main() {
std::unique_ptr<Interface> p = std::make_unique<Impl>();
cout << p->next() << endl;
return 0;
}
References:
This seems promising. Can I use it to just produce the stereoscopic image without any sort of putting in the file or rendering, so to get rid of ffmpeg or qt?
Thanks a lot.
In order to compare the current algorithms to the articles and to visualize results. There should be simple programs using S3D features:
It is hardcoded to 720p 60fps. It was 1080p 30fps before since the camera used previously only supported these specs. It would be nice to be able to set the resolution fps to different resolutions supported by the Decklink interface.
When the video ends, the play button stays in pause mode so the video cannot be restarted.
Implement a class to display epipolar lines from fundamental matrix, 2 images and 2 sets of points (1 in each image).
Implement a function to draw features from a list of 3d points on cv image (same behaviour as cv::drawMatches)
Would prevent having to carry around cv::DMatch everywhere.
If you press compute again, instead of rectifying the original image, it rectifies the previous rectified image since it retrieves the image from the textureManager.
A list of ImageOperation that can be toggled (on/off).
ImageOperations will have an input image, and an output image that will be the output of all the operation chain (each activated operation in order transform the image).
This will help with #31 since it will be possible the operations will always be done on the input image instead of the output image as of right now.
Give better variable names for StanAlignment. Currently the variable names are based on the article (a, c, f). They should have readable names such as verticalOffset, rollAngle, Zoom, tiltOffset.
Note: where to put the units for this so it's not confusing and variable names are not too long?
Instead of left right images, only the right image is shown twice in the StereoSideBySideEntity
To rectify images from rectification matrix.
Currently only points in the right image are output to results.
Check for missing noexcept or const (for member functions not modifying member variables)
Integrate VideoCaptureDeviceDecklink in S3DAnalyzer.
We should be able to toggle visualisation of:
There will be classes children to computation classes (MatchFinder, DisparityAnalyzer) that will provide visual debugging tools).
It would be nice to use factories to enable these Debugging features through some flag.
Convert DisparityAnalyzerSTAN::Results to STAN alignment
It would be useful to be able to display the feature matches after rectification to see if they are on the same image row.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.