Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ped-dyn-emp/petrack
1 result
Show changes
Commits on Source (16)
Showing
with 647 additions and 94 deletions
......@@ -32,7 +32,7 @@ stages:
# from the repository
build_container:
stage: build_environment
image:
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
......@@ -72,9 +72,10 @@ unit_test_linux:
artifacts:
when: always
paths:
- build/tests/unit_test/unit_test_report.xml
- build/tests/unit_test/unit_test_report.xml
reports:
junit: "build/tests/unit_test/unit_test_report.xml"
needs: ["build_linux"]
# Execute regression tests
regression_test_linux:
......@@ -82,13 +83,14 @@ regression_test_linux:
stage: test
script:
- cd tests/regression_test/tests
- python3 -m pytest --path=../../../build/petrack --junitxml=pytest_report.xml >> "RegressionTestLog.txt"
- python3 -m pytest --path=../../../build/petrack --junitxml=pytest_report.xml | tee "RegressionTestLog.txt"
artifacts:
when: on_failure
paths:
- "tests/regression_test/tests/RegressionTestLog.txt"
reports:
junit: "tests/regression_test/tests/pytest_report.xml"
needs: ["build_linux"]
###############################################################################
......@@ -122,7 +124,7 @@ unit_test_windows:
artifacts:
when: always
paths:
- build/tests/unit_test/unit_test_report.xml
- build/tests/unit_test/unit_test_report.xml
reports:
junit: "build/tests/unit_test/unit_test_report.xml"
needs: ["build_windows"]
......@@ -143,7 +145,7 @@ regression_test_windows:
junit: "tests/regression_test/tests/pytest_report.xml"
needs: ["build_windows"]
build_windows_installer:
build_installer_windows:
stage: build_installer
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
......@@ -162,18 +164,87 @@ build_windows_installer:
paths:
- "build/petrack-installer-*"
expire_in: 2hrs
dependencies: []
make_release:
make_release_windows:
image: alpine
stage: deploy
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
needs: ["build_windows_installer"]
needs: ["build_installer_windows"]
script:
- apk --no-cache add curl
- cd build
- winInst=$(echo petrack-installer-*)
- curl -k -T $winInst -u "${SCIEBO_TOKEN}:" https://fz-juelich.sciebo.de/public.php/webdav/$winInst
- curl -k -T $winInst -u "${SCIEBO_WIN_INSTALLER_PATH}:" https://fz-juelich.sciebo.de/public.php/webdav/$winInst --fail-with-body
###############################################################################
# MacOS CI
###############################################################################
# Build petrack and petrack unit_tests
build_macos:
stage: build
tags:
- macos
script:
- mkdir build
- cd build
- cmake -G Ninja .. -DBUILD_BUNDLE=ON -DBUILD_UNIT_TESTS=ON -DCMAKE_PREFIX_PATH=/Users/tobias/programs/petrack-deps -DCatch2_DIR=/Users/tobias/programs/petrack-deps/lib/cmake/Catch2/ -Dtrompeloeil_DIR=/Users/tobias/programs/petrack-deps/lib/cmake/trompeloeil/
- cmake --build .
- cpack -C Release -G DragNDrop --verbose
- rm -r petrack.app
- find _CPack_Packages/ -type d -name "petrack.app" | xargs -I _ cp -r _ petrack.app
artifacts:
paths:
- "build/"
- "build/petrack-installer-*"
expire_in: 2 hrs
# Execute unit tests
unit_test_macos:
stage: test
tags:
- macos
script:
- cd build/tests/unit_test
- ./petrack_tests -r junit -o unit_test_report.xml
artifacts:
when: always
paths:
- build/tests/unit_test/unit_test_report.xml
reports:
junit: "build/tests/unit_test/unit_test_report.xml"
needs: ["build_macos"]
# Execute regression tests
regression_test_macos:
stage: test
tags:
- macos
script:
- cd tests/regression_test/tests
- python3 -m pytest --path=../../../build/petrack.app/Contents/MacOS/petrack --junitxml=pytest_report.xml | tee "RegressionTestLog.txt"
artifacts:
when: on_failure
paths:
- "tests/regression_test/tests/RegressionTestLog.txt"
reports:
junit: "tests/regression_test/tests/pytest_report.xml"
needs: ["build_macos"]
make_release_macos:
image: alpine
stage: deploy
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
script:
- apk --no-cache add curl
- cd build
- macosInst=$(echo petrack-installer-*)
- curl -k -T $macosInst -u "${SCIEBO_MACOS_INSTALLER_PATH}:" https://fz-juelich.sciebo.de/public.php/webdav/$macosInst --fail-with-body
dependencies: [ "build_macos" ]
......@@ -19,7 +19,7 @@
# Project setup
################################################################################
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
project(petrack LANGUAGES CXX VERSION 0.9.0)
project(petrack LANGUAGES CXX VERSION 0.9.1)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
......@@ -142,7 +142,7 @@ endif ()
# Qt
find_package(
Qt5 5.14
COMPONENTS Widgets OpenGL Xml Core PrintSupport Concurrent
COMPONENTS Widgets OpenGL Xml Core PrintSupport Concurrent Test
REQUIRED
)
message("Building with Qt${QT_DEFAULT_MAJOR_VERSION} (${Qt5Core_VERSION_STRING})")
......@@ -289,8 +289,6 @@ if(BUILD_UNIT_TESTS)
find_package(trompeloeil REQUIRED)
endif()
find_package(Qt5Test REQUIRED)
add_subdirectory(${CMAKE_SOURCE_DIR}/tests/unit_test)
target_link_libraries(petrack_tests PRIVATE petrack_core git-info)
......
......@@ -41,21 +41,23 @@ elseif(APPLE)
INSTALL_RPATH @executable_path/../Frameworks
)
install(CODE [[
include(BundleUtilities)
# This string is crazy-long enough that it's worth folding into a var...
set (_plugin_file "$<TARGET_FILE_NAME:Qt5::QCocoaIntegrationPlugin>")
install(CODE [[
include(BundleUtilities)
# Ditto the output paths for our installation
set (_appdir "${CMAKE_INSTALL_PREFIX}/petrack.app")
set (_outdir "${_appdir}/Contents/PlugIns/platforms")
# the output paths for our installation
set (_appdir "${CMAKE_INSTALL_PREFIX}/petrack.app")
set (_outdir "${_appdir}/Contents/PlugIns/platforms")
file(INSTALL DESTINATION "${_outdir}"
TYPE FILE FILES "$<TARGET_FILE:Qt5::QCocoaIntegrationPlugin>")
# copy the needed plugins
file(INSTALL DESTINATION "${_outdir}"
TYPE FILE FILES "$<TARGET_FILE:Qt5::QCocoaIntegrationPlugin>" "$<TARGET_FILE:Qt5::QOffscreenIntegrationPlugin>")
fixup_bundle("${_appdir}/Contents/MacOS/petrack" "${_outdir}/${_plugin_file}" "")
]] COMPONENT Runtime)
fixup_bundle(
"${_appdir}/Contents/MacOS/petrack"
"${_outdir}/$<TARGET_FILE_NAME:Qt5::QCocoaIntegrationPlugin>;${_outdir}/$<TARGET_FILE_NAME:Qt5::QOffscreenIntegrationPlugin>"
""
)
]] COMPONENT Runtime)
endif()
......
......@@ -44,6 +44,13 @@ private:
Parameter mK4;
Parameter mK5;
Parameter mK6;
Parameter mS1;
Parameter mS2;
Parameter mS3;
Parameter mS4;
Parameter mTAUX;
Parameter mTAUY;
double mReprojectionError;
cv::Mat map1;
cv::Mat map2;
......@@ -64,6 +71,14 @@ public:
Parameter *getK4();
Parameter *getK5();
Parameter *getK6();
Parameter *getS1();
Parameter *getS2();
Parameter *getS3();
Parameter *getS4();
Parameter *getTAUX();
Parameter *getTAUY();
double getReprojectionError() const;
void setReprojectionError(double d);
};
#endif
......@@ -64,54 +64,81 @@ public:
int getFilterBorderSize();
double getCalibFxValue();
double getCalibFxValue() const;
void setCalibFxValue(double d);
void setCalibFxMin(double d);
void setCalibFxMax(double d);
double getCalibFyValue();
double getCalibFyValue() const;
void setCalibFyValue(double d);
void setCalibFyMin(double d);
void setCalibFyMax(double d);
double getCalibCxValue();
double getCalibCxValue() const;
void setCalibCxValue(double d);
void setCalibCxMin(double d);
void setCalibCxMax(double d);
double getCalibCyValue();
double getCalibCyValue() const;
void setCalibCyValue(double d);
void setCalibCyMin(double d);
void setCalibCyMax(double d);
double getCalibR2Value();
double getCalibR2Value() const;
void setCalibR2Value(double d);
void setCalibR2Min(double d);
void setCalibR2Max(double d);
double getCalibR4Value();
double getCalibR4Value() const;
void setCalibR4Value(double d);
void setCalibR4Min(double d);
void setCalibR4Max(double d);
double getCalibTxValue();
double getCalibTxValue() const;
void setCalibTxValue(double d);
void setCalibTxMin(double d);
void setCalibTxMax(double d);
double getCalibTyValue();
double getCalibTyValue() const;
void setCalibTyValue(double d);
void setCalibTyMin(double d);
void setCalibTyMax(double d);
double getCalibR6Value();
double getCalibR6Value() const;
void setCalibR6Value(double d);
void setCalibR6Min(double d);
void setCalibR6Max(double d);
double getCalibK4Value();
double getCalibK4Value() const;
void setCalibK4Value(double d);
void setCalibK4Min(double d);
void setCalibK4Max(double d);
double getCalibK5Value();
double getCalibK5Value() const;
void setCalibK5Value(double d);
void setCalibK5Min(double d);
void setCalibK5Max(double d);
double getCalibK6Value();
double getCalibK6Value() const;
void setCalibK6Value(double d);
void setCalibK6Min(double d);
void setCalibK6Max(double d);
double getCalibS1Value() const;
void setCalibS1Value(double d);
void setCalibS1Min(double d);
void setCalibS1Max(double d);
double getCalibS2Value() const;
void setCalibS2Value(double d);
void setCalibS2Min(double d);
void setCalibS2Max(double d);
double getCalibS3Value() const;
void setCalibS3Value(double d);
void setCalibS3Min(double d);
void setCalibS3Max(double d);
double getCalibS4Value() const;
void setCalibS4Value(double d);
void setCalibS4Min(double d);
void setCalibS4Max(double d);
double getCalibTAUXValue() const;
void setCalibTAUXValue(double d);
void setCalibTAUXMin(double d);
void setCalibTAUXMax(double d);
double getCalibTAUYValue() const;
void setCalibTAUYValue(double d);
void setCalibTAUYMin(double d);
void setCalibTAUYMax(double d);
double getCalibReprErrorValue() const;
void setCalibReprErrorValue(double d);
void setNewModelChecked(bool b);
double getCalibExtrRot1();
void setCalibExtrRot1(double d);
......@@ -459,9 +486,20 @@ private slots:
void on_r6_valueChanged(double d);
void on_tx_valueChanged(double d);
void on_ty_valueChanged(double d);
void on_k4_valueChanged(double d);
void on_k5_valueChanged(double d);
void on_k6_valueChanged(double d);
void on_s1_valueChanged(double d);
void on_s2_valueChanged(double d);
void on_s3_valueChanged(double d);
void on_s4_valueChanged(double d);
void on_taux_valueChanged(double d);
void on_tauy_valueChanged(double d);
void on_quadAspectRatio_stateChanged(int i);
void on_fixCenter_stateChanged(int i);
void on_tangDist_stateChanged(int i);
void on_newModelCheckBox_stateChanged(int i);
void on_autoCalib_clicked();
void on_calibFiles_clicked();
......@@ -546,8 +584,7 @@ private:
bool mColorChanging;
bool mIndexChanging; // shows, if the index of the color model is really changing; nor while constructor (initialer
// durchlauf) and may be while loading xml file
bool mLoading; // shows, if new project is just loading
QDoubleSpinBox *k4, *k5, *k6; // Muss noch in die Oberflaeche eingebaut werden
bool mLoading; // shows, if new project is just loading
};
#endif
......@@ -134,6 +134,7 @@ public slots:
void openProject(QString fileName = "", bool openSequence = true);
void saveXml(QDomDocument &doc);
bool saveSameProject();
bool saveProjectAs();
bool saveProject(QString fileName = "");
void writeXmlElement(QXmlStreamWriter &xmlStream, QDomElement element);
void openSequence(QString fileName = "");
......
......@@ -95,7 +95,6 @@ bool AutoCalib::openCalibFiles()
{
lastDir = QFileInfo(mCalibFiles.first()).path();
}
QStringList calibFiles = QFileDialog::getOpenFileNames(
mMainWindow,
Petrack::tr("Open calibration sequence"),
......@@ -140,7 +139,7 @@ void AutoCalib::autoCalib()
std::vector<cv::Point2f> corners;
std::vector<std::vector<cv::Point2f>> image_points;
cv::Mat camera_matrix = cv::Mat::eye(3, 3, CV_64F);
cv::Mat dist_coeffs = cv::Mat::zeros(1, 8, CV_64F);
cv::Mat dist_coeffs = cv::Mat::zeros(1, 14, CV_64F);
cv::Mat extr_params;
double reproj_errs;
cv::Mat view, view_gray;
......@@ -172,6 +171,7 @@ void AutoCalib::autoCalib()
break;
}
// cannot load image
view = cv::imread(mCalibFiles.at(i).toStdString(), cv::IMREAD_COLOR);
if(view.empty())
......@@ -196,7 +196,6 @@ void AutoCalib::autoCalib()
{
imgSize = cv::Size(view.rows, view.cols);
}
// search for chessboard corners
found = findChessboardCorners(view, board_size, corners, cv::CALIB_CB_ADAPTIVE_THRESH);
......@@ -243,14 +242,12 @@ void AutoCalib::autoCalib()
.arg(board_size.height));
return;
}
// set flags for calibration
if(mControlWidget->quadAspectRatio->isChecked())
{
flags |= CV_CALIB_FIX_ASPECT_RATIO; // durch setzen von aspect_ratio kann fix ascpect anders als 1:1
// eingestellt werden
}
if(mControlWidget->fixCenter->isChecked())
{
flags |= CV_CALIB_FIX_PRINCIPAL_POINT;
......@@ -259,7 +256,10 @@ void AutoCalib::autoCalib()
{
flags |= CV_CALIB_ZERO_TANGENT_DIST;
}
// run calibration
if(mControlWidget->newModelCheckBox->isChecked())
{
flags |= CV_CALIB_RATIONAL_MODEL + CV_CALIB_THIN_PRISM_MODEL + CV_CALIB_TILTED_MODEL;
}
bool ok = runCalibration(
image_points,
......@@ -291,6 +291,9 @@ void AutoCalib::autoCalib()
debout << "tx: " << dist_coeffs.at<double>(0, 2) << " ty: " << dist_coeffs.at<double>(0, 3) << std::endl;
debout << "k4: " << dist_coeffs.at<double>(0, 5) << " k5: " << dist_coeffs.at<double>(0, 6)
<< " k6: " << dist_coeffs.at<double>(0, 7) << std::endl;
debout << "s1: " << dist_coeffs.at<double>(0, 8) << " s2: " << dist_coeffs.at<double>(0, 9)
<< " s3: " << dist_coeffs.at<double>(0, 10) << " s4: " << dist_coeffs.at<double>(0, 11) << std::endl;
debout << "taux: " << dist_coeffs.at<double>(0, 12) << " tauy: " << dist_coeffs.at<double>(0, 13) << std::endl;
// set calibration values
mControlWidget->setCalibFxValue(camera_matrix.at<double>(0, 0));
......@@ -305,6 +308,13 @@ void AutoCalib::autoCalib()
mControlWidget->setCalibK4Value(dist_coeffs.at<double>(0, 5));
mControlWidget->setCalibK5Value(dist_coeffs.at<double>(0, 6));
mControlWidget->setCalibK6Value(dist_coeffs.at<double>(0, 7));
mControlWidget->setCalibS1Value(dist_coeffs.at<double>(0, 8));
mControlWidget->setCalibS2Value(dist_coeffs.at<double>(0, 9));
mControlWidget->setCalibS3Value(dist_coeffs.at<double>(0, 10));
mControlWidget->setCalibS4Value(dist_coeffs.at<double>(0, 11));
mControlWidget->setCalibTAUXValue(dist_coeffs.at<double>(0, 12));
mControlWidget->setCalibTAUYValue(dist_coeffs.at<double>(0, 13));
mControlWidget->setCalibReprErrorValue(reproj_errs);
#ifdef SHOW_CALIB_MAINWINDOW
......@@ -368,9 +378,11 @@ int AutoCalib::runCalibration(
camera_matrix.ptr<double>(1)[1] = 1.;
}
*reproj_errs = calibrateCamera(
object_points, image_points, img_size, camera_matrix, dist_coeffs, rot_vects, trans_vects, flags);
code = 1;
return code;
}
......@@ -84,6 +84,38 @@ CalibFilter::CalibFilter() : Filter()
getK6()->setMaximum(5.);
getK6()->setValue(0.);
getK6()->setFilter(this);
getS1()->setMinimum(-5.);
getS1()->setMaximum(5.);
getS1()->setValue(0.);
getS1()->setFilter(this);
getS2()->setMinimum(-5.);
getS2()->setMaximum(5.);
getS2()->setValue(0.);
getS2()->setFilter(this);
getS3()->setMinimum(-5.);
getS3()->setMaximum(5.);
getS3()->setValue(0.);
getS3()->setFilter(this);
getS4()->setMinimum(-5.);
getS4()->setMaximum(5.);
getS4()->setValue(0.);
getS4()->setFilter(this);
getTAUX()->setMinimum(-5.);
getTAUX()->setMaximum(5.);
getTAUX()->setValue(0.);
getTAUX()->setFilter(this);
getTAUY()->setMinimum(-5.);
getTAUY()->setMaximum(5.);
getTAUY()->setValue(0.);
getTAUY()->setFilter(this);
mReprojectionError = std::numeric_limits<double>::quiet_NaN();
}
/**
......@@ -111,14 +143,20 @@ cv::Mat CalibFilter::act(cv::Mat &img, cv::Mat &res)
0,
1);
cv::Mat dist =
(cv::Mat_<float>(1, 8) << getR2()->getValue(),
(cv::Mat_<float>(1, 14) << getR2()->getValue(),
getR4()->getValue(),
getTx()->getValue(),
getTy()->getValue(),
getR6()->getValue(),
getK4()->getValue(),
getK5()->getValue(),
getK6()->getValue());
getK6()->getValue(),
getS1()->getValue(),
getS2()->getValue(),
getS3()->getValue(),
getS4()->getValue(),
getTAUX()->getValue(),
getTAUY()->getValue());
initUndistortRectifyMap(camera, dist, cv::Mat_<double>::eye(3, 3), camera, img.size(), CV_16SC2, map1, map2);
......@@ -176,3 +214,35 @@ Parameter *CalibFilter::getK6()
{
return &mK6;
}
Parameter *CalibFilter::getS1()
{
return &mS1;
}
Parameter *CalibFilter::getS2()
{
return &mS2;
}
Parameter *CalibFilter::getS3()
{
return &mS3;
}
Parameter *CalibFilter::getS4()
{
return &mS4;
}
Parameter *CalibFilter::getTAUX()
{
return &mTAUX;
}
Parameter *CalibFilter::getTAUY()
{
return &mTAUY;
}
double CalibFilter::getReprojectionError() const
{
return mReprojectionError;
}
void CalibFilter::setReprojectionError(double d)
{
mReprojectionError = d;
}
......@@ -182,19 +182,19 @@ void CodeMarkerWidget::getXml(QDomElement &elem)
if(subElem.tagName() == "PARAM")
{
if(subElem.hasAttribute("ADAPTIVE_TRHESH_WIN_SIZE_MIN"))
if(subElem.hasAttribute("ADAPTIVE_THRESH_WIN_SIZE_MIN"))
{
mUi->adaptiveThreshWinSizeMin->setValue(subElem.attribute("ADAPTIVE_THRESH_WIN_SIZE_MIN").toInt());
}
if(subElem.hasAttribute("ADAPTIVE_TRHESH_WIN_SIZE_MAX"))
if(subElem.hasAttribute("ADAPTIVE_THRESH_WIN_SIZE_MAX"))
{
mUi->adaptiveThreshWinSizeMax->setValue(subElem.attribute("ADAPTIVE_THRESH_WIN_SIZE_MAX").toInt());
}
if(subElem.hasAttribute("ADAPTIVE_TRHESH_WIN_SIZE_STEP"))
if(subElem.hasAttribute("ADAPTIVE_THRESH_WIN_SIZE_STEP"))
{
mUi->adaptiveThreshWinSizeStep->setValue(subElem.attribute("ADAPTIVE_THRESH_WIN_SIZE_STEP").toInt());
}
if(subElem.hasAttribute("ADAPTIVE_TRHESH_CONSTANT"))
if(subElem.hasAttribute("ADAPTIVE_THRESH_CONSTANT"))
{
mUi->adaptiveThreshConstant->setValue(subElem.attribute("ADAPTIVE_THRESH_CONSTANT").toInt());
}
......
......@@ -70,12 +70,7 @@ Control::Control(QWidget &parent, QGraphicsScene &scene, reco::Recognizer &recog
// calibrateCamera die Flag CALIB_RATIONAL_MODEL übergibt; Ergibt eine genauere Kalibration Auch rechenintensiver,
// aber da wir das einmal machen und dann Speichern, ist das auch egal Diese Boxen müssten in die UI eingebaut und
// der entsprechende Aufruf in AutoCalib müsste angepasst werden
k4 = new QDoubleSpinBox(this);
k4->hide();
k5 = new QDoubleSpinBox(this);
k5->hide();
k6 = new QDoubleSpinBox(this);
k6->hide();
filterBrightContrast->setCheckState(
mMainWindow->getBrightContrastFilter()->getEnabled() ? Qt::Checked : Qt::Unchecked);
......@@ -133,6 +128,38 @@ Control::Control(QWidget &parent, QGraphicsScene &scene, reco::Recognizer &recog
setCalibK6Max(mMainWindow->getCalibFilter()->getK6()->getMaximum());
setCalibK6Value(mMainWindow->getCalibFilter()->getK6()->getValue());
setCalibS1Min(mMainWindow->getCalibFilter()->getS1()->getMinimum());
setCalibS1Max(mMainWindow->getCalibFilter()->getS1()->getMaximum());
setCalibS1Value(mMainWindow->getCalibFilter()->getS1()->getValue());
setCalibS2Min(mMainWindow->getCalibFilter()->getS2()->getMinimum());
setCalibS2Max(mMainWindow->getCalibFilter()->getS2()->getMaximum());
setCalibS2Value(mMainWindow->getCalibFilter()->getS2()->getValue());
setCalibS3Min(mMainWindow->getCalibFilter()->getS3()->getMinimum());
setCalibS3Max(mMainWindow->getCalibFilter()->getS3()->getMaximum());
setCalibS3Value(mMainWindow->getCalibFilter()->getS3()->getValue());
setCalibS4Min(mMainWindow->getCalibFilter()->getS4()->getMinimum());
setCalibS4Max(mMainWindow->getCalibFilter()->getS4()->getMaximum());
setCalibS4Value(mMainWindow->getCalibFilter()->getS4()->getValue());
setCalibTAUXMin(mMainWindow->getCalibFilter()->getTAUX()->getMinimum());
setCalibTAUXMax(mMainWindow->getCalibFilter()->getTAUX()->getMaximum());
setCalibTAUXValue(mMainWindow->getCalibFilter()->getTAUX()->getValue());
setCalibTAUYMin(mMainWindow->getCalibFilter()->getTAUY()->getMinimum());
setCalibTAUYMax(mMainWindow->getCalibFilter()->getTAUY()->getMaximum());
setCalibTAUYValue(mMainWindow->getCalibFilter()->getTAUY()->getValue());
setCalibReprErrorValue(mMainWindow->getCalibFilter()->getReprojectionError());
// statt folgender Zeile kann zB on_cx_valueChanged einfach kodiert werden (su)
// connect(cx, SIGNAL(valueChanged(double cx)), this, SLOT(on_cx_valueChanged));
// will be done by designer: colorPlot->setParent(colorBox); //because it is just integrated via frame in designer
connect(newModelCheckBox, &QCheckBox::stateChanged, this, &Control::on_newModelCheckBox_stateChanged);
colorPlot->setControlWidget(this);
mIndexChanging = false;
......@@ -337,7 +364,7 @@ int Control::getFilterBorderSize()
return filterBorderParamSize->value();
}
double Control::getCalibFxValue()
double Control::getCalibFxValue() const
{
return fx->value();
}
......@@ -357,7 +384,7 @@ void Control::setCalibFxMax(double d)
fx->setMaximum(d);
}
double Control::getCalibFyValue()
double Control::getCalibFyValue() const
{
return fy->value();
}
......@@ -377,7 +404,7 @@ void Control::setCalibFyMax(double d)
fy->setMaximum(d);
}
double Control::getCalibCxValue()
double Control::getCalibCxValue() const
{
return cx->value();
}
......@@ -397,7 +424,7 @@ void Control::setCalibCxMax(double d)
cx->setMaximum(d);
}
double Control::getCalibCyValue()
double Control::getCalibCyValue() const
{
return cy->value();
}
......@@ -417,7 +444,7 @@ void Control::setCalibCyMax(double d)
cy->setMaximum(d);
}
double Control::getCalibR2Value()
double Control::getCalibR2Value() const
{
return r2->value();
}
......@@ -437,7 +464,7 @@ void Control::setCalibR2Max(double d)
r2->setMaximum(d);
}
double Control::getCalibR4Value()
double Control::getCalibR4Value() const
{
return r4->value();
}
......@@ -457,7 +484,7 @@ void Control::setCalibR4Max(double d)
r4->setMaximum(d);
}
double Control::getCalibR6Value()
double Control::getCalibR6Value() const
{
return r6->value();
}
......@@ -476,6 +503,125 @@ void Control::setCalibR6Max(double d)
r6->setMaximum(d);
}
double Control::getCalibS1Value() const
{
return s1->value();
}
void Control::setCalibS1Value(double d)
{
s1->setValue(d);
}
void Control::setCalibS1Min(double d)
{
s1->setMinimum(d);
}
void Control::setCalibS1Max(double d)
{
s1->setMaximum(d);
}
double Control::getCalibS2Value() const
{
return s2->value();
}
void Control::setCalibS2Value(double d)
{
s2->setValue(d);
}
void Control::setCalibS2Min(double d)
{
s2->setMinimum(d);
}
void Control::setCalibS2Max(double d)
{
s2->setMaximum(d);
}
double Control::getCalibS3Value() const
{
return s3->value();
}
void Control::setCalibS3Value(double d)
{
s3->setValue(d);
}
void Control::setCalibS3Min(double d)
{
s3->setMinimum(d);
}
void Control::setCalibS3Max(double d)
{
s3->setMaximum(d);
}
double Control::getCalibS4Value() const
{
return s4->value();
}
void Control::setCalibS4Value(double d)
{
s4->setValue(d);
}
void Control::setCalibS4Min(double d)
{
s4->setMinimum(d);
}
void Control::setCalibS4Max(double d)
{
s4->setMaximum(d);
}
double Control::getCalibTAUXValue() const
{
return taux->value();
}
void Control::setCalibTAUXValue(double d)
{
taux->setValue(d);
}
void Control::setCalibTAUXMin(double d)
{
taux->setMinimum(d);
}
void Control::setCalibTAUXMax(double d)
{
taux->setMaximum(d);
}
double Control::getCalibTAUYValue() const
{
return tauy->value();
}
void Control::setCalibTAUYValue(double d)
{
tauy->setValue(d);
}
void Control::setCalibTAUYMin(double d)
{
tauy->setMinimum(d);
}
void Control::setCalibTAUYMax(double d)
{
tauy->setMaximum(d);
}
void Control::setCalibReprErrorValue(double d)
{
intrError->setText(QString("%1").arg(d));
}
void Control::setNewModelChecked(bool b)
{
if(b)
{
newModelCheckBox->setChecked(true);
}
else
{
newModelCheckBox->setChecked(false);
}
}
double Control::getCalibExtrRot1()
{
return rot1->value();
......@@ -536,7 +682,7 @@ void Control::setCalibExtrTrans3(double d)
trans3->setValue(d);
}
double Control::getCalibTxValue()
double Control::getCalibTxValue() const
{
return tx->value();
}
......@@ -556,7 +702,7 @@ void Control::setCalibTxMax(double d)
tx->setMaximum(d);
}
double Control::getCalibTyValue()
double Control::getCalibTyValue() const
{
return ty->value();
}
......@@ -576,7 +722,7 @@ void Control::setCalibTyMax(double d)
ty->setMaximum(d);
}
double Control::getCalibK4Value()
double Control::getCalibK4Value() const
{
return k4->value();
}
......@@ -596,7 +742,7 @@ void Control::setCalibK4Max(double d)
k4->setMaximum(d);
}
double Control::getCalibK5Value()
double Control::getCalibK5Value() const
{
return k5->value();
}
......@@ -616,7 +762,7 @@ void Control::setCalibK5Max(double d)
k5->setMaximum(d);
}
double Control::getCalibK6Value()
double Control::getCalibK6Value() const
{
return k6->value();
}
......@@ -2064,6 +2210,7 @@ void Control::on_fx_valueChanged(double d)
mMainWindow->updateImage();
}
setMeasuredAltitude();
intrError->setText(QString("invalid"));
}
void Control::on_fy_valueChanged(double d)
......@@ -2074,6 +2221,7 @@ void Control::on_fy_valueChanged(double d)
mMainWindow->updateImage();
}
setMeasuredAltitude();
intrError->setText(QString("invalid"));
}
void Control::on_cx_valueChanged(double d)
......@@ -2084,6 +2232,7 @@ void Control::on_cx_valueChanged(double d)
{
mMainWindow->updateCoord();
}
intrError->setText(QString("invalid"));
}
void Control::on_cy_valueChanged(double d)
......@@ -2094,6 +2243,7 @@ void Control::on_cy_valueChanged(double d)
{
mMainWindow->updateCoord();
}
intrError->setText(QString("invalid"));
}
void Control::on_r2_valueChanged(double d)
......@@ -2103,6 +2253,7 @@ void Control::on_r2_valueChanged(double d)
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_r4_valueChanged(double d)
......@@ -2112,6 +2263,7 @@ void Control::on_r4_valueChanged(double d)
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_r6_valueChanged(double d)
......@@ -2121,8 +2273,64 @@ void Control::on_r6_valueChanged(double d)
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_s1_valueChanged(double d)
{
mMainWindow->getCalibFilter()->getS1()->setValue(d);
if(!mMainWindow->isLoading())
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_s2_valueChanged(double d)
{
mMainWindow->getCalibFilter()->getS2()->setValue(d);
if(!mMainWindow->isLoading())
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_s3_valueChanged(double d)
{
mMainWindow->getCalibFilter()->getS3()->setValue(d);
if(!mMainWindow->isLoading())
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_s4_valueChanged(double d)
{
mMainWindow->getCalibFilter()->getS4()->setValue(d);
if(!mMainWindow->isLoading())
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_taux_valueChanged(double d)
{
mMainWindow->getCalibFilter()->getTAUX()->setValue(d);
if(!mMainWindow->isLoading())
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_tauy_valueChanged(double d)
{
mMainWindow->getCalibFilter()->getTAUY()->setValue(d);
if(!mMainWindow->isLoading())
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_tx_valueChanged(double d)
{
mMainWindow->getCalibFilter()->getTx()->setValue(d);
......@@ -2130,6 +2338,7 @@ void Control::on_tx_valueChanged(double d)
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_ty_valueChanged(double d)
......@@ -2139,8 +2348,35 @@ void Control::on_ty_valueChanged(double d)
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_k4_valueChanged(double d)
{
mMainWindow->getCalibFilter()->getK4()->setValue(d);
if(!mMainWindow->isLoading())
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_k5_valueChanged(double d)
{
mMainWindow->getCalibFilter()->getK5()->setValue(d);
if(!mMainWindow->isLoading())
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_k6_valueChanged(double d)
{
mMainWindow->getCalibFilter()->getK6()->setValue(d);
if(!mMainWindow->isLoading())
{
mMainWindow->updateImage();
}
intrError->setText(QString("invalid"));
}
void Control::on_quadAspectRatio_stateChanged(int i)
{
static double oldFyValue = 0;
......@@ -2156,6 +2392,7 @@ void Control::on_quadAspectRatio_stateChanged(int i)
fy->setEnabled(true);
fy->setValue(oldFyValue);
}
intrError->setText(QString("invalid"));
}
void Control::on_fixCenter_stateChanged(int i)
......@@ -2182,6 +2419,7 @@ void Control::on_fixCenter_stateChanged(int i)
cx->setValue(oldCxValue);
cy->setValue(oldCyValue);
}
intrError->setText(QString("invalid"));
}
void Control::on_tangDist_stateChanged(int i)
......@@ -2205,8 +2443,37 @@ void Control::on_tangDist_stateChanged(int i)
tx->setDisabled(true);
ty->setDisabled(true);
}
intrError->setText(QString("invalid"));
}
void Control::on_newModelCheckBox_stateChanged(int i)
{
if(i == Qt::Checked)
{
k4->setEnabled(true);
k5->setEnabled(true);
k6->setEnabled(true);
s1->setEnabled(true);
s2->setEnabled(true);
s3->setEnabled(true);
s4->setEnabled(true);
taux->setEnabled(true);
tauy->setEnabled(true);
}
else if(i == Qt::Unchecked)
{
k4->setDisabled(true);
k5->setDisabled(true);
k6->setDisabled(true);
s1->setDisabled(true);
s2->setDisabled(true);
s3->setDisabled(true);
s4->setDisabled(true);
taux->setDisabled(true);
tauy->setDisabled(true);
}
intrError->setText(QString("invalid"));
}
void Control::on_autoCalib_clicked()
{
mMainWindow->getAutoCalib()->autoCalib();
......@@ -2719,6 +2986,14 @@ void Control::setXml(QDomElement &elem)
subSubElem.setAttribute("K4", k4->value());
subSubElem.setAttribute("K5", k5->value());
subSubElem.setAttribute("K6", k6->value());
subSubElem.setAttribute("S1", s1->value());
subSubElem.setAttribute("S2", s2->value());
subSubElem.setAttribute("S3", s3->value());
subSubElem.setAttribute("S4", s4->value());
subSubElem.setAttribute("TAUX", taux->value());
subSubElem.setAttribute("TAUY", tauy->value());
subSubElem.setAttribute("ReprError", mMainWindow->getCalibFilter()->getReprojectionError());
subSubElem.setAttribute("QUAD_ASPECT_RATIO", quadAspectRatio->isChecked());
subSubElem.setAttribute("FIX_CENTER", fixCenter->isChecked());
subSubElem.setAttribute("TANG_DIST", tangDist->isChecked());
......@@ -2735,6 +3010,7 @@ void Control::setXml(QDomElement &elem)
subSubElem.setAttribute("CALIB_FILES", fl.join(", "));
subElem.appendChild(subSubElem);
subSubElem = (elem.ownerDocument()).createElement("EXTRINSIC_PARAMETERS");
subSubElem.setAttribute("EXTR_ROT_1", rot1->value());
......@@ -3248,6 +3524,34 @@ void Control::getXml(QDomElement &elem)
{
k6->setValue(subSubElem.attribute("K6").toDouble());
}
if(subSubElem.hasAttribute("S1"))
{
s1->setValue(subSubElem.attribute("S1").toDouble());
}
if(subSubElem.hasAttribute("S2"))
{
s2->setValue(subSubElem.attribute("S2").toDouble());
}
if(subSubElem.hasAttribute("S3"))
{
s3->setValue(subSubElem.attribute("S3").toDouble());
}
if(subSubElem.hasAttribute("S4"))
{
s4->setValue(subSubElem.attribute("S4").toDouble());
}
if(subSubElem.hasAttribute("TAUX"))
{
taux->setValue(subSubElem.attribute("TAUX").toDouble());
}
if(subSubElem.hasAttribute("TAUY"))
{
tauy->setValue(subSubElem.attribute("TAUY").toDouble());
}
if(subSubElem.hasAttribute("ReprError"))
{
intrError->setText(QString("%1").arg(subSubElem.attribute("ReprError").toDouble()));
}
if(subSubElem.hasAttribute("QUAD_ASPECT_RATIO"))
{
quadAspectRatio->setCheckState(
......
......@@ -34,7 +34,9 @@ QString commandLineOptionsString = QObject::tr(
"markerIdFile]</code><br>"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>[-autoReadHeight|-autoreadheight "
"heightFile]</code><br>"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>[-autoPlay|-autoplay trackerFile]</code></p>"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>[-autoPlay|-autoplay trackerFile]</code><br>"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>[-autoExportView|-autoexportview "
"outputFile]</code></p>"
"<dl><dt><kbd>-help|-?</kbd></dt><dd>shows help information for command line options</dd>"
"<dt><kbd>-project</kbd></dt><dd>optional option to set project file; otherwise the argument without option flag "
"is used as project file</dd>"
......@@ -53,7 +55,9 @@ QString commandLineOptionsString = QObject::tr(
"<dt><kbd>-autoReadHeight|-autoreadheight heightFile</kbd></dt><dd> automatically reads the <kbd>trackerFile</kbd> "
"including markerID and individual height and applies the heights to the corresponding person</dd>"
"<dt><kbd>-autoPlay|-autoplay trackerFile</kbd></dt><dd>plays the video or image sequence and stores the "
"trajectories to <kbd>trackerFile</kbd></dd></dl>"
"trajectories to <kbd>trackerFile</kbd></dd>"
"<dt><kbd>-autoExportView|-autoexportview outputFile</kbd></dt><dd>exports the view, e.g., the undistorted video "
"or the video with trajectories, to <kbd>outputFile</kbd></dd></dl>"
"<p>Example:<br>To generate trajectories from a single image sequence starting with <kbd>frame000.jpg</kbd>"
"with settings stored in the project file <kbd>project.pet</kbd>, export tracker file <kbd>trackerFile</kbd>"
"and exit with saving the project to <kbd>project.pet</kbd> again:</p>"
......
......@@ -41,7 +41,6 @@ static QApplication *gApp = nullptr;
void quit(int sig_number)
{
gApp->quit();
return;
}
int main(int argc, char *argv[])
......@@ -76,13 +75,14 @@ int main(int argc, char *argv[])
bool autoPlay = false;
bool autoIntrinsic = false;
QString intrinsicDir;
QString autoReadHeightFile;
bool autoReadHeight = false;
QString autoReadMarkerFile;
bool autoReadMarkerID = false;
QString autoSaveTrackerFile;
bool autoSaveTracker = false;
QString autoReadHeightFile;
bool autoReadHeight = false;
QString autoReadMarkerFile;
bool autoReadMarkerID = false;
QString autoSaveTrackerFile;
bool autoSaveTracker = false;
bool autoExportView = false;
QString exportViewFile;
for(int i = 1; i < arg.size(); ++i) // i=0 ist Programmname
{
......@@ -154,6 +154,11 @@ int main(int argc, char *argv[])
autoIntrinsic = true;
intrinsicDir = arg.at(++i);
}
else if((arg.at(i) == "-autoExportView") || (arg.at(i) == "-autoexportview"))
{
autoExportView = true;
exportViewFile = arg.at(++i);
}
else
{
// hier koennte je nach dateiendung *pet oder *avi oder *png angenommern werden
......@@ -226,6 +231,13 @@ int main(int argc, char *argv[])
petrack.getAutoCalib()->autoCalib();
}
if(autoExportView)
{
QFile outputFile{exportViewFile};
petrack.saveSequence(true, true, outputFile.fileName());
return EXIT_SUCCESS;
}
// hat tracker_file bestimmte Dateiendung txt oder trc, dann wird nur genau diese exportiert, sonst beide
if(autoTrack)
{
......
......@@ -638,6 +638,16 @@ void Petrack::openProject(QString fileName, bool openSeq) // default fileName=""
}
}
openXml(doc, openSeq);
if(mControlWidget->getCalibS1Value() == 0 && mControlWidget->getCalibS2Value() == 0 &&
mControlWidget->getCalibS3Value() == 0 && mControlWidget->getCalibS4Value() == 0 &&
mControlWidget->getCalibTAUXValue() == 0 && mControlWidget->getCalibTAUYValue() == 0)
{
PWarning(
this,
tr("PeTrack"),
tr("You are using an old project! Therefore the old intr. calibration model is set the default"));
mControlWidget->setNewModelChecked(false);
}
updateWindowTitle();
}
}
......@@ -740,6 +750,13 @@ bool Petrack::saveSameProject()
return saveProject(mProFileName);
}
bool Petrack::saveProjectAs()
{
auto fileName = QFileDialog::getSaveFileName(
this, tr("Select project file"), mProFileName, tr("PeTrack project file (*.pet);;All files (*.*)"));
return saveProject(fileName);
}
/// rueckgabewert zeigt an, ob gesichert werden konnte
bool Petrack::saveProject(QString fileName) // default fileName=""
{
......@@ -1728,7 +1745,7 @@ void Petrack::createActions()
mSavePrAct = new QAction(tr("&Save Project As"), this);
mSavePrAct->setShortcut(tr("Ctrl+Shift+S"));
connect(mSavePrAct, SIGNAL(triggered()), this, SLOT(saveProject()));
connect(mSavePrAct, &QAction::triggered, this, &Petrack::saveProjectAs);
mSaveAct = new QAction(tr("&Save Project"), this);
mSaveAct->setShortcut(tr("Ctrl+S"));
......@@ -2048,6 +2065,15 @@ void Petrack::resetUI()
mControlWidget->r6->setValue(0);
mControlWidget->tx->setValue(0);
mControlWidget->ty->setValue(0);
mControlWidget->k4->setValue(0);
mControlWidget->k5->setValue(0);
mControlWidget->k6->setValue(0);
mControlWidget->s1->setValue(0);
mControlWidget->s2->setValue(0);
mControlWidget->s3->setValue(0);
mControlWidget->s4->setValue(0);
mControlWidget->taux->setValue(0);
mControlWidget->tauy->setValue(0);
mControlWidget->quadAspectRatio->setCheckState(Qt::Unchecked);
mControlWidget->fixCenter->setCheckState(Qt::Unchecked);
mControlWidget->tangDist->setCheckState(Qt::Checked);
......@@ -3769,6 +3795,7 @@ void Petrack::updateImage(bool imageChanged) // default = false (only true for n
else
{
getScene()->update(); // repaint();
qApp->processEvents();
// update pixel color (because image pixel moves)
setStatusColor();
}
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE PETRACK>
<PETRACK VERSION="0.9.0">
<PETRACK VERSION="0.9.1">
<MAIN SRC="blackdotMarker.mp4" STATUS_HEIGHT="0"/>
<CONTROL TAB="2">
<CALIBRATION>
......@@ -10,7 +10,7 @@
<SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
<BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
<PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="9" SQUARE_SIZE="3"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="1038" CY="798" ENABLED="1" FIX_CENTER="0" FX="835.65999999999997" FY="835.75999999999999" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.246701" R4="0.072692000000000007" R6="-0.010224" TANG_DIST="1" TX="0.00033700000000000001" TY="6.9999999999999999e-06"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="1038" CY="798" ENABLED="1" FIX_CENTER="0" FX="835.65999999999997" FY="835.75999999999999" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.246701" R4="0.072692000000000007" R6="-0.010224" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0.00033700000000000001" TY="6.9999999999999999e-06"/>
<EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="225" COORD3D_TRANS_Y="350" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="-2.2050000000000001" EXTR_ROT_2="-2.177" EXTR_ROT_3="0.104" EXTR_TRANS_1="-224.46700000000001" EXTR_TRANS_2="-629.58500000000004" EXTR_TRANS_3="-408.82499999999999" FIX="1" ROTATE="0" SCALE="1" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
<ALIGNMENT_GRID FIX="1" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="75" GRID3D_TRANS_Y="-18" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" ROTATE="0" SCALE="1" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
</CALIBRATION>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE PETRACK>
<PETRACK VERSION="0.9.0">
<PETRACK VERSION="0.9.1">
<MAIN SRC="codeMarker.mp4" STATUS_HEIGHT="0"/>
<CONTROL TAB="2">
<CALIBRATION>
......@@ -10,7 +10,7 @@
<SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
<BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
<PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="1397.98" CY="1138.9300000000001" ENABLED="1" FIX_CENTER="0" FX="835.65999999999997" FY="835.75999999999999" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.246701" R4="0.072692000000000007" R6="-0.010224" TANG_DIST="1" TX="0.00033700000000000001" TY="6.9999999999999999e-06"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="1397.98" CY="1138.9300000000001" ENABLED="1" FIX_CENTER="0" FX="835.65999999999997" FY="835.75999999999999" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.246701" R4="0.072692000000000007" R6="-0.010224" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0.00033700000000000001" TY="6.9999999999999999e-06"/>
<EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0.012" EXTR_ROT_2="-0.014" EXTR_ROT_3="0.22700000000000001" EXTR_TRANS_1="50.128" EXTR_TRANS_2="23.611999999999998" EXTR_TRANS_3="-400.09800000000001" FIX="1" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
<ALIGNMENT_GRID FIX="1" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
</CALIBRATION>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE PETRACK>
<PETRACK VERSION="0.9.0">
<PETRACK VERSION="0.9.1">
<MAIN SRC="markerCasern.avi" STATUS_HEIGHT="180"/>
<CONTROL TAB="0">
<CALIBRATION>
......@@ -10,7 +10,7 @@
<SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
<BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
<PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="589.5" CY="461.5" ENABLED="1" FIX_CENTER="1" FX="882.15999999999997" FY="882.15999999999997" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="1" R2="-0.378664" R4="0.15861700000000001" R6="0" TANG_DIST="1" TX="-0.000241" TY="0.00031199999999999999"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="589.5" CY="461.5" ENABLED="1" FIX_CENTER="1" FX="882.15999999999997" FY="882.15999999999997" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="1" R2="-0.378664" R4="0.15861700000000001" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="-0.000241" TY="0.00031199999999999999"/>
<EXTRINSIC_PARAMETERS ALTITUDE="537" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="1" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="1" ROTATE="27" SCALE="767" SHOW="1" SHOW_CALIB_POINTS="0" TRANS_X="5179" TRANS_Y="2170" UNIT="46" USE_INTRINSIC_CENTER="0"/>
<ALIGNMENT_GRID FIX="1" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="1" ROTATE="27" SCALE="768" SHOW="1" TRANS_X="245" TRANS_Y="657"/>
</CALIBRATION>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE PETRACK>
<PETRACK VERSION="0.9.0">
<PETRACK VERSION="0.9.1">
<MAIN SRC="markerJapan/000100000.jpg" STATUS_HEIGHT="0"/>
<CONTROL TAB="0">
<CALIBRATION>
......@@ -10,7 +10,7 @@
<SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
<BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
<PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="973" CY="620" ENABLED="1" FIX_CENTER="0" FX="1653.49" FY="1673.5599999999999" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="0.00068099999999999996" R4="-0.22715399999999999" R6="0" TANG_DIST="1" TX="0.0042729999999999999" TY="0.00044799999999999999"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="973" CY="620" ENABLED="1" FIX_CENTER="0" FX="1653.49" FY="1673.5599999999999" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="0.00068099999999999996" R4="-0.22715399999999999" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0.0042729999999999999" TY="0.00044799999999999999"/>
<EXTRINSIC_PARAMETERS ALTITUDE="2035" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="1" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="1" ROTATE="3594" SCALE="1000" SHOW="1" SHOW_CALIB_POINTS="0" TRANS_X="14450" TRANS_Y="5468" UNIT="120" USE_INTRINSIC_CENTER="0"/>
<ALIGNMENT_GRID FIX="1" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="1" ROTATE="895" SCALE="1001" SHOW="0" TRANS_X="392" TRANS_Y="586"/>
</CALIBRATION>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE PETRACK>
<PETRACK VERSION="0.9.0">
<PETRACK VERSION="0.9.1">
<MAIN SRC="multiColorMarkerWithAruco.mp4" STATUS_HEIGHT="0"/>
<CONTROL TAB="1">
<CALIBRATION>
......@@ -10,7 +10,7 @@
<SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
<BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
<PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="983.10000000000002" CY="572.13" ENABLED="1" FIX_CENTER="0" FX="1860.1700000000001" FY="1862.24" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.37733299999999997" R4="0.242947" R6="-0.15323500000000001" TANG_DIST="1" TX="-0.0040350000000000004" TY="-0.001372"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="983.10000000000002" CY="572.13" ENABLED="1" FIX_CENTER="0" FX="1860.1700000000001" FY="1862.24" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.37733299999999997" R4="0.242947" R6="-0.15323500000000001" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="-0.0040350000000000004" TY="-0.001372"/>
<EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="-2.1299999999999999" EXTR_ROT_2="2.1579999999999999" EXTR_ROT_3="-0.036999999999999998" EXTR_TRANS_1="14.253" EXTR_TRANS_2="14.198" EXTR_TRANS_3="-528.09799999999996" FIX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
<ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
</CALIBRATION>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE PETRACK>
<PETRACK VERSION="0.9.0">
<PETRACK VERSION="0.9.1">
<MAIN SRC="multiColorMarkerWithAruco_dictMip36h12.mp4" STATUS_HEIGHT="0"/>
<CONTROL TAB="1">
<CALIBRATION>
......@@ -10,7 +10,7 @@
<SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
<BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
<PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="2380.0599999999999" CY="1911.8699999999999" ENABLED="1" FIX_CENTER="0" FX="1716.1300000000001" FY="1716.6199999999999" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.23147100000000001" R4="0.060733000000000002" R6="-0.0072639999999999996" TANG_DIST="1" TX="0.000106" TY="0.00046500000000000003"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="2380.0599999999999" CY="1911.8699999999999" ENABLED="1" FIX_CENTER="0" FX="1716.1300000000001" FY="1716.6199999999999" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.23147100000000001" R4="0.060733000000000002" R6="-0.0072639999999999996" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0.000106" TY="0.00046500000000000003"/>
<EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="3.1219999999999999" EXTR_ROT_2="0.041000000000000002" EXTR_ROT_3="0.050999999999999997" EXTR_TRANS_1="-1.2969999999999999" EXTR_TRANS_2="6.5439999999999996" EXTR_TRANS_3="-423.565" FIX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
<ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
</CALIBRATION>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE PETRACK>
<PETRACK VERSION="0.9.0">
<PETRACK VERSION="0.9.1">
<MAIN SRC="multicolor.mp4" STATUS_HEIGHT="0"/>
<CONTROL TAB="2">
<CALIBRATION>
......@@ -10,7 +10,7 @@
<SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
<BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
<PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="1134.04" CY="880.72000000000003" ENABLED="1" FIX_CENTER="0" FX="842.57000000000005" FY="842.69000000000005" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.27662599999999998" R4="0.093287999999999996" R6="-0.01423" TANG_DIST="1" TX="-0.00024699999999999999" TY="5.5000000000000002e-05"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="1134.04" CY="880.72000000000003" ENABLED="1" FIX_CENTER="0" FX="842.57000000000005" FY="842.69000000000005" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.27662599999999998" R4="0.093287999999999996" R6="-0.01423" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="-0.00024699999999999999" TY="5.5000000000000002e-05"/>
<EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="1" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="-2.1920000000000002" EXTR_ROT_2="-2.1829999999999998" EXTR_ROT_3="0.016" EXTR_TRANS_1="-1043.473" EXTR_TRANS_2="13.741" EXTR_TRANS_3="-626.84199999999998" FIX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
<ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="91" GRID3D_TRANS_Y="34" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
</CALIBRATION>
......