Commit 94aaf7a9 authored by Patrik Huber's avatar Patrik Huber

Added Matlab bindings for render() function

The diff looks really weird because I clang-formatted the whole document. But there should be no changes in extract_texture, except for tabs->spaces.
parent 60eae2ea
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "eos/core/Mesh.hpp" #include "eos/core/Mesh.hpp"
#include "eos/fitting/RenderingParameters.hpp" #include "eos/fitting/RenderingParameters.hpp"
#include "eos/render/texture_extraction.hpp" #include "eos/render/texture_extraction.hpp"
#include "eos/render/render.hpp"
#include "mexplus_opencv.hpp" #include "mexplus_opencv.hpp"
#include "mexplus_eos_types.hpp" #include "mexplus_eos_types.hpp"
...@@ -34,13 +35,15 @@ ...@@ -34,13 +35,15 @@
using namespace eos; using namespace eos;
using namespace mexplus; using namespace mexplus;
MEX_DEFINE(extract_texture) (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) MEX_DEFINE(extract_texture)(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{ {
// Check for proper number of input and output arguments: // Check for proper number of input and output arguments:
if (nrhs != 5) { if (nrhs != 5)
{
mexErrMsgIdAndTxt("eos:render:nargin", "extract_texture requires 5 input arguments."); mexErrMsgIdAndTxt("eos:render:nargin", "extract_texture requires 5 input arguments.");
} }
if (nlhs != 1) { if (nlhs != 1)
{
mexErrMsgIdAndTxt("eos:render:nargout", "extract_texture returns one output argument."); mexErrMsgIdAndTxt("eos:render:nargout", "extract_texture returns one output argument.");
} }
...@@ -53,16 +56,50 @@ MEX_DEFINE(extract_texture) (int nlhs, mxArray *plhs[], int nrhs, const mxArray ...@@ -53,16 +56,50 @@ MEX_DEFINE(extract_texture) (int nlhs, mxArray *plhs[], int nrhs, const mxArray
// We expect to be given a RGB image. Let's convert it to BGR for OpenCV. // We expect to be given a RGB image. Let's convert it to BGR for OpenCV.
// Actually, it doesn't matter at all for the texture extraction - just keep it! // Actually, it doesn't matter at all for the texture extraction - just keep it!
//cv::Mat image_as_bgr;// = image.clone(); // cv::Mat image_as_bgr;// = image.clone();
//cv::cvtColor(image, image_as_bgr, cv::COLOR_RGB2BGR); // cv::cvtColor(image, image_as_bgr, cv::COLOR_RGB2BGR);
// Now do the actual extraction: // Now do the actual extraction:
const cv::Mat affine_from_ortho = fitting::get_3x4_affine_camera_matrix(rendering_params, image.cols, image.rows); const cv::Mat affine_from_ortho =
const cv::Mat isomap = render::extract_texture(mesh, affine_from_ortho, image, compute_view_angle, render::TextureInterpolation::NearestNeighbour, isomap_resolution); fitting::get_3x4_affine_camera_matrix(rendering_params, image.cols, image.rows);
const cv::Mat isomap =
render::extract_texture(mesh, affine_from_ortho, image, compute_view_angle,
render::TextureInterpolation::NearestNeighbour, isomap_resolution);
// Return the extracted texture-map: // Return the extracted texturemap:
OutputArguments output(nlhs, plhs, 1); OutputArguments output(nlhs, plhs, 1);
output.set(0, isomap); output.set(0, isomap);
}; };
MEX_DEFINE(render)(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
// Check for proper number of input and output arguments:
if (nrhs != 6)
{
mexErrMsgIdAndTxt("eos:render:nargin", "render requires 6 input arguments.");
}
if (nlhs != 2)
{
mexErrMsgIdAndTxt("eos:render:nargout", "render returns two output arguments.");
}
InputArguments input(nrhs, prhs, 6);
const auto mesh = input.get<core::Mesh>(0);
const auto modelview_matrix = input.get<glm::mat4x4>(1);
const auto projection_matrix = input.get<glm::mat4x4>(2);
const auto image_width = input.get<int>(3);
const auto image_height = input.get<int>(4);
const auto texture = input.get<cv::Mat>(5);
cv::Mat colorbuffer, depthbuffer;
std::tie(colorbuffer, depthbuffer) =
render::render(mesh, modelview_matrix, projection_matrix, image_width, image_height,
render::create_mipmapped_texture(texture), true, false,
false); // backface culling = true, near & far plane clipping = false
OutputArguments output(nlhs, plhs, 2);
output.set(0, colorbuffer);
output.set(1, depthbuffer);
};
MEX_DISPATCH; MEX_DISPATCH;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment