added simple homography transforamtion filter

This commit is contained in:
Steffen Vogel 2015-06-13 14:45:52 +02:00
parent 8cca486a2c
commit 31514f2455
5 changed files with 92 additions and 3 deletions

View File

@ -43,7 +43,8 @@ SOURCES += main.cpp\
filters/padfilter.cpp \
rangeslider.cpp \
filters/rectify.cpp \
filters/rotate.cpp
filters/rotate.cpp \
filters/homography.cpp
HEADERS += mainwindow.h \
camera.h \
@ -78,7 +79,8 @@ HEADERS += mainwindow.h \
rangeslider.h \
range.h \
filters/rectify.h \
filters/rotate.h
filters/rotate.h \
filters/homography.h
SOURCES += filters/filter.cpp \
filters/undistort.cpp \

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.3.0, 2015-01-29T12:14:43. -->
<!-- Written by QtCreator 3.3.0, 2015-02-04T09:00:50. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>

View File

@ -46,6 +46,7 @@
#include "filters/pathplanner.h"
#include "filters/resize.h"
#include "filters/rotate.h"
#include "filters/homography.h"
#endif // FILTERS_H

62
filters/homography.cpp Normal file
View File

@ -0,0 +1,62 @@
/*
* This file is part of Pastie
*
* Pastie is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* Pastie is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Pastie. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @copyright 2015 Steffen Vogel
* @license http://www.gnu.org/licenses/gpl.txt GNU Public License
* @author Steffen Vogel <steffen.vogel@rwth-aachen.de>
* @link http://www.steffenvogel.de
*/
#include "homography.h"
Homography::Homography(const Mat &ho, int i = INTER_LINEAR) :
interpolation(i)
{
QMap<int, QString> interMap;
interMap[INTER_NEAREST] = "Nearest Neighbour";
interMap[INTER_LINEAR] = "Linear";
interMap[INTER_AREA] = "Pixel Area Relation";
interMap[INTER_CUBIC] = "Bi-Cubic (4x4)";
interMap[INTER_LANCZOS4] = "Lanczos4 (8x8)";
settings["Inverse"] = new BooleanSetting(this, inverse, "Invert the homography before transformation");
settings["Interpolation"] = new EnumSetting(this, (int &) interpolation, interMap);
for (int i=0; i<9; i++) {
h[i] = ho.at<double>(i);
settings["h[" + QString::number(i) + "]"] = new DoubleSetting(this, h[i], Range<double>(-2, 2));
}
}
Result * Homography::applyInternal(Image *img)
{
Mat &m = img->getMat();
Mat ho(3, 3, CV_64F);
for (int i=0; i<9; i++)
ho.at<double>(i) = h[i];
warpPerspective(m, m, ho, m.size(), interpolation);
return new Result(toQTransform(ho));
}
Homography::~Homography()
{
}

24
filters/homography.h Normal file
View File

@ -0,0 +1,24 @@
#ifndef HOMOGRAPHY_H
#define HOMOGRAPHY_H
#include "filter.h"
class Homography : public Filter
{
Q_OBJECT
public:
Homography(const Mat &h, int inter);
~Homography();
QString getName() const { return "Homography"; }
protected:
Result * applyInternal(Image *img);
double h[9];
int interpolation;
bool inverse;
};
#endif // HOMOGRAPHY_H