Giter Site home page Giter Site logo

visionworkbench / visionworkbench Goto Github PK

View Code? Open in Web Editor NEW
463.0 463.0 229.0 31.49 MB

The NASA Vision Workbench is a general purpose image processing and computer vision library developed by the Autonomous Systems and Robotics (ASR) Area in the Intelligent Systems Division at the NASA Ames Research Center.

Home Page: http://irg.arc.nasa.gov/nasa-vision-workbench

License: Other

Shell 0.04% C++ 93.03% Python 0.78% Perl 1.22% JavaScript 0.09% C 0.17% Makefile 0.44% Tcl 0.05% GLSL 1.19% M4 0.89% CMake 0.72% SWIG 1.37%

visionworkbench's Introduction

visionworkbench's People

Contributors

anefian avatar broxtronix avatar deleted avatar ekpneo avatar harguess avatar iansaxton avatar iceboundflame avatar jwakely avatar khusmann avatar ljexplore avatar mallan avatar mathnathan avatar maxerbubba avatar mdhancher avatar mstyer avatar novas0x2a avatar oleg-alexandrov avatar panovr avatar patrickauld avatar radishman avatar rsargent avatar schwehr avatar scottmcmichael avatar trey0 avatar yasirs avatar zmoratto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

visionworkbench's Issues

Problem with ./autogen?

I have e4aa14a, ran "make distclean" and then when I ran ./autogen, I get this error:

src/vw/Stereo/tests/Makefile.am:17: variable TestCorrelation_SOURCES' is defined but no program or src/vw/Stereo/tests/Makefile.am:17: library hasTestCorrelation' as canonical name (possible typo)

Image2plate insertion of Global Imagery not perfect

Inserting global imagery such as a render of LOLA does not fill the entire sphere for "image2plate -m toast". Inserting the image into a projection of "-m equi" also still leaves a line. This has something to do with the EdgeExtension not being chosen correctly. EdgeExtension probably needs to be kicked on after the uncrop of L104 in PlateCarreePlateManager.cc.

DIRTiff fails tests on Ubuntu 10.04

DiskCacheImageView.Construction fails on DiskImageResourceTIFF reading. This test will only kick on if the user compiles against LibTIFF (as opposed to only using GDAL).

Fix gtest on OSX

Google Test is broken on newer versions of OSX. Upgrading from v1.6 to v1.8 may fix this but VW uses a modified version of gtest with no documentation about how or why it was modified. The proper long-term solution is probably to replace VW's custom gtest setup with a conventional gtest setup using the latest version.

linking libvw doesn't work on osx

For some reason, linking with libvw doesn't work on osx. Instead, libCore libMath, etc must be individually linked.

I'm not sure if this is related, but on linux I find that an ldd of libvw outputs:

    libvwCore-2.1.0_post.so => not found
    libvwMath-2.1.0_post.so => not found
    libvwImage-2.1.0_post.so => not found
    libvwFileIO-2.1.0_post.so => not found

Python binding for Camera

Is there any python bindings to access the Camera ?
I'd would like to perform sensitivity analysis of the orthorectification (mapproject in ASP) to the intrinsic/extrinsic parameters of the camera. That would be more comfortable in python...

Efficient subpixel image registration algorithms

Hi

Can you share some idea on improving the perfermance of Upsample,according to this survey
Phase correlation with sub-pixel accuracy A comparative study in 1Dand 2D
Fitting is much faster than Upsample, Will you implement other method?

Thanks

Lens Distortion solver returns 0,0

When using PhotometrixLensDistortion and given a very bad point sometimes the camera projects it to pixel (0,0) and returns no solver error. Investigate in LensDistortion.cc and our solver code.

get_n_unique_integers() fails once in a blue moon.

Actually once in RAND_MAX times. The problem is this line:
samples[i] = int( (double(std::rand()) / double(RAND_MAX)) * size )
When rand() returns it's maximum value, samples[i] is assigned size, when it should never be higher than size-1.

out of date installation instructions

it looks like the project has transitioned to use cmake but the documentation still discusses autotools bits like ./configure which are now absent from the repository. looking at the cmake files it looks like there should be a whole new set of new instructions are needed to document how to compile given the dependencies on the ASP_DEPS_DIR which sounds like is relying on a conda environment for asp

camera_bbox fails on very large DEMs

If camera_bbox() is called with quick=false and the DEM is very large, say a constant DEM that covers half the planet, the function will return an enormous value for the bbox size. This is probably because points on the other side of the earth successfully project in to the camera. This can be seen if it is called in the ASP mapproject tool with quick=false, IceBridge data, and a datum DEM.

use popcnt in sgm?

Hi,

It seems that the sgm implementation uses lookup table to compare the cost of binary census code. This has some limitations: 1. involves in consecutive memory read from the table and 2. the table can only account for 8 bit at a time.

I have experimented LUT against the __popcnt instruction in windows, and __popcnt is way faster. And for linux and Mac, I believe the same alternative names '__builtin_popcount', which counts uint64_t at one instruction.

Because I do not quite follow your sgm implementation, it's hard for me to send a PR. However, I think it's easy for you to find the correct position to change the cost computation part.

Han

ipmatch - more RANSAC constraint?

If I'm correct, ipmatch only accepts complex RANSAC constraints like similarity or homography. In many cases, the only transformation I expect between my images are a translation, and possibly a (small) rotation.
Would it be difficult to add more constraint to allow just for these kind of transformations? For some historical, scanned, images I have a lot of low quality IPs and ipmatch tend to favor matches that have large scaling and translation, which I know is not the case. Constraining RANSAC to simple transformation would help excluding outliers.
Thanks!

Fail to compile the latest VW, on Ubuntu 18.04

Hi,
When building ASP using BinaryBuilder, all other libraries were built successfully except VW. I'm running into compile errors as following(Ubuntu 18.04, gcc 7.3.0). Any ideas on what's causing the problem? Thanks!

error 1: no type named 'type' in **

/home/ghtao/ASP/projects/BinaryBuilder/build_asp/build/visionworkbench/visionworkbench-git/src/vw/../vw/Image/PerPixelViews.h: In instantiation of 'class vw::UnaryPerPixelView<vw::ImageView<vw::PixelRGBA >, vw::SelectChannelFunctor<vw::ImageView<vw::PixelRGBA > > >':
/home/ghtao/ASP/projects/BinaryBuilder/build_asp/build/visionworkbench/visionworkbench-git/src/vw/../vw/Mosaic/ImageComposite.h:535:38: required from 'vw::ImageView vw::mosaic::ImageComposite::blend_patch(const BBox2i&) const [with PixelT = vw::PixelRGBA; vw::BBox2i = vw::math::BBox<int, 2>]'
/home/ghtao/ASP/projects/BinaryBuilder/build_asp/build/visionworkbench/visionworkbench-git/src/vw/../vw/Mosaic/ImageComposite.h:254:30: required from 'vw::ImageView vw::mosaic::ImageComposite::generate_patch(const BBox2i&) const [with PixelT = vw::PixelRGBA; vw::BBox2i = vw::math::BBox<int, 2>]'
/home/ghtao/ASP/projects/BinaryBuilder/build_asp/build/visionworkbench/visionworkbench-git/src/vw/../vw/Mosaic/ImageComposite.h:275:28: required from 'vw::mosaic::ImageComposite::pixel_type vw::mosaic::ImageComposite::operator()(int, int, int) const [with PixelT = vw::PixelRGBA; vw::mosaic::ImageComposite::pixel_type = vw::PixelRGBA]'
/home/ghtao/ASP/projects/BinaryBuilder/build_asp/build/visionworkbench/visionworkbench-git/src/vw/../vw/Image/ImageViewRef.h:161:91: required from 'vw::ImageViewRefImpl::pixel_type vw::ImageViewRefImpl::operator()(vw::int32, vw::int32, vw::int32) const [with ViewT = vw::mosaic::ImageComposite<vw::PixelRGBA >; vw::ImageViewRefImpl::pixel_type = vw::PixelRGBA; vw::int32 = int]'
/home/ghtao/ASP/projects/BinaryBuilder/build_asp/build/visionworkbench/visionworkbench-git/src/vw/tools/image2qtree_help.cc:35:146: required from here
/home/ghtao/ASP/projects/BinaryBuilder/build_asp/build/visionworkbench/visionworkbench-git/src/vw/../vw/Image/PerPixelViews.h:107:81: error: no type named 'type' in 'struct boost::result_of<vw::SelectChannelFunctor<vw::ImageView<vw::PixelRGBA > >(vw::PixelRGBA)>'
typedef typename boost::result_of<FuncT(typename ImageT::pixel_type)>::type result_type;
/home/ghtao/ASP/projects/BinaryBuilder/build_asp/build/visionworkbench/visionworkbench-git/src/vw/../vw/Image/PerPixelViews.h:108:98: error: no type named 'type' in 'struct boost::result_of<vw::SelectChannelFunctor<vw::ImageView<vw::PixelRGBA > >(vw::PixelRGBA)>'
typedef typename boost::remove_cv<typename boost::remove_reference<result_type>::type>::type pixel_type;

error 2: template argument deduction/substitution failed

/home/ghtao/ASP/projects/BinaryBuilder/build_asp/build/visionworkbench/visionworkbench-git/src/vw/../vw/Image/ImageMath.h:278:143: note: template argument deduction/substitution failed:
/home/ghtao/ASP/projects/BinaryBuilder/build_asp/build/visionworkbench/visionworkbench-git/src/vw/../vw/Image/ImageMath.h:278:479: note: candidate: template<class Image1T, class Image2T> typename boost::enable_if_c<vw::IsMasked::value, const Image1T&>::type vw::operator/=(const vw::ImageViewBase&, const vw::ImageViewBase&)
VW_IMAGE_MATH_BINARY_IP_II_FUNCTION_ENABLE_IF( IsMasked::value, operator /=, vw::ArgArgInPlaceMaskedSafeQuotientFunctor )

install error

I install boost ๏ผŒbut checking for package BOOST_THREAD... no, and then configure: error: cannot build the Vision Workbench core modules!
platform:ubuntu16.04

checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking whether to use ar.sh wrapper script... no
configure: WARNING: Libtool does not cope well with whitespace in pwd
checking how to print strings... printf
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for fgrep... /bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @file support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /bin/dd
checking how to truncate binary pipes... /bin/dd bs=4096 count=1
checking for mt... mt
checking if mt is a manifest tool... no
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /usr/bin/ld -m elf_x86_64
checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld... yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC -DPIC
checking if g++ PIC flag -fPIC -DPIC works... yes
checking if g++ static flag -static works... yes
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether make sets $(MAKE)... (cached) yes
checking for package TCMALLOC... no (not found)
checking for package GOOGLE_PROFILER... no (disabled)
checking whether the current compiler supports -Wno-missing-field-initializers... yes
configure: VW will use 4 THREADS by default
checking whether the current compiler supports noreturn... yes
checking whether the current compiler supports deprecated... yes
checking for unistd.h... (cached) yes
checking pwd.h usability... yes
checking pwd.h presence... yes
checking for pwd.h... yes
checking for getpwuid... yes
checking for getpid... yes
checking for fabsl... yes
checking for llabs... yes
checking for exp2... yes
checking for log2... yes
checking for tgamma... yes
checking for a Python interpreter with version >= 2.4... python
checking for python... /usr/bin/python
checking for python version... 2.7
checking for python platform... linux2
checking for python script directory... ${prefix}/lib/python2.7/dist-packages
checking for python extension module directory... ${exec_prefix}/lib/python2.7/dist-packages
checking for the distutils Python package... yes
checking for Python include path... -I/usr/include/python2.7
checking for Python library path... -L/usr/lib/python2.7 -lpython2.7
checking for Python site-packages path... /usr/lib/python2.7/dist-packages
checking python extra libraries... -L/usr/lib -lz -lpthread -ldl -lutil
checking python extra linking flags... -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions
checking consistency of all components of python development environment... yes
checking for swig... /usr/bin/swig
checking for swig version >= 1.3.29... no (found 3.0.8)
checking for lcov... no
checking for genhtml... no
checking for apxs2... no
checking for apxs... no
checking for package PTHREADS... yes
configure: Checking if Boost at /usr/local/include/boost is OK
checking for sed... /bin/sed
checking for package BOOST_PROGRAM_OPTIONS... yes
checking for package BOOST_SYSTEM... yes
checking for package BOOST_FILESYSTEM... yes
checking for package BOOST_REGEX... yes
checking for package BOOST_DATETIME... yes
checking for package BOOST_THREAD... no
checking for package BOOST_IOSTREAMS... yes
checking for package BOOST_GRAPH... yes
configure: /usr/local/include/boost is missing these required libraries: BOOST_THREAD
configure: Checking if Boost at /usr/include/boost is OK
checking for sed... (cached) /bin/sed
checking for package BOOST_PROGRAM_OPTIONS... yes
checking for package BOOST_SYSTEM... yes
checking for package BOOST_FILESYSTEM... yes
checking for package BOOST_REGEX... yes
checking for package BOOST_DATETIME... yes
checking for package BOOST_THREAD... no
checking for package BOOST_IOSTREAMS... yes
checking for package BOOST_GRAPH... yes
configure: /usr/include/boost is missing these required libraries: BOOST_THREAD
checking for package BOOST... no
checking for package THREADS... no (missing BOOST_THREAD)
checking for package M... yes
checking for package APPLE_LAPACK... no
checking for package INTEL_LAPACK with functions (dgelss_)... no (not found)
checking for package CLAPACK with functions (dgelss_)... no (not found)
checking for package SLAPACK with functions (dgelss_)... yes
checking for package LAPACK... yes
checking for package Z... yes
checking for package PNG... yes
checking for package JPEG... yes
checking for package ILMBASE... no (not found)
checking for package OPENEXR... no (missing ILMBASE)
checking for package HDF_PLAIN... no (not found)
checking for package HDF_SUBDIR... no (not found)
checking for package HDF... no
checking for package APPLE_GL... no
checking for package X11... yes
checking for package LINUX_GL with functions (glCreateShader)... yes
checking for package GL... yes
checking for package GLEW... yes
checking for package CG... no (not found)
checking for package GDAL... no (not found)
checking for package TIFF... yes
checking for BigTIFF in TIFF... yes
checking if VW has BigTIFF support... yes
checking for package PROJ4... yes
checking for qmake... /usr/bin/qmake
checking for moc... /usr/bin/moc
checking for uic... /usr/bin/uic
checking for rcc... /usr/bin/rcc
checking whether host operating system is Darwin... no
checking whether we can build a simple Qt app... ok, looks like Qt 4
checking for the DEFINES to use with Qt... -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED
checking for the CFLAGS to use with Qt... -m64 -pipe -O2 -Wall -W -D_REENTRANT $(QT_DEFINES)
checking for the CXXFLAGS to use with Qt... -m64 -pipe -O2 -Wall -W -D_REENTRANT $(QT_DEFINES)
checking for the INCPATH to use with Qt... -I/usr/share/qt4/mkspecs/linux-g++-64 -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtOpenGL -I/usr/include/qt4/QtSql -I/usr/include/qt4 -I. -I/usr/X11R6/include -I.
checking for the LDFLAGS to use with Qt... -m64 -Wl,-O1
checking for the LIBS to use with Qt... -L/usr/lib/x86_64-linux-gnu -L/usr/X11R6/lib64 -lQtSql -lQtOpenGL -lQtGui -lQtNetwork -lQtCore -lGL -lpthread
checking for Qt's version... 4.8.7
checking for package QT_QMAKE... yes
checking for package ARBITRARY_QT... no (Set $QT_ARBITRARY_MODULES)
checking for package APPLE_QMAKE_QT... no
checking for package QT_QMAKE_OPENGL... yes
checking for package QT_QMAKE_GUI... yes
checking for package QT_QMAKE_SQL... yes
checking for package QT_QMAKE_NETWORK... yes
checking for package LINUX_QMAKE_QT... yes
checking for package QT... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for CAIROMM... no
checking for package CAIROMM... no (No package 'cairomm-1.0' found)
checking for package RABBITMQ_C... no (not found)
checking for package PROTOBUF... yes
checking for package OPENCV... no (not found)
checking whether to build module CORE... no (missing BOOST THREADS)
checking whether to build module MATH... no (missing CORE)
checking whether to build module IMAGE... no (missing MATH)
checking whether to build module FILEIO... no (missing IMAGE)
checking whether to build module VW... no (missing IMAGE MATH CORE)
configure: error: cannot build the Vision Workbench core modules!

GDAL 2.x compatibility

Hi all,

There have been a ton of changes in the last year+ going from GDAL 1.11.x to GDAL 2.y.z. Looking at the head of master, it looks like DiskImageResourceGDAL.cc is likely to see the same issue. Hopefully pretty easy to just check the results. These happen to be from 2.0. And there are likely to be more in GeoReferenceResourceGDAL.cc

VisionWorkbench/src/vw/FileIO/DiskImageResourceGDAL.cc:610:13: error: ignoring return value of function declared with warn_unused_result attribute [-Werror,-Wunused-result]
        band->RasterIO( GF_Read, bbox.min().x(), bbox.min().y(), bbox.width(), bbox.height(),
        ^~~~~~~~~~~~~~
VisionWorkbench/src/vw/FileIO/DiskImageResourceGDAL.cc:619:9: error: ignoring return value of function declared with warn_unused_result attribute [-Werror,-Wunused-result]
    band->RasterIO( GF_Read, bbox.min().x(), bbox.min().y(), bbox.width(), bbox.height(),
    ^~~~~~~~~~~~~~
VisionWorkbench/src/vw/FileIO/DiskImageResourceGDAL.cc:660:11: error: ignoring return value of function declared with warn_unused_result attribute [-Werror,-Wunused-result]
      band->RasterIO( GF_Write, bbox.min().x(), bbox.min().y(), bbox.width(), bbox.height(),

RpcChannel.cc errors

When I run make on Vision Workbench, it moves along happily, and then gives these errors:

RpcChannel.cc: In member function 'void vw::platefile::IChannel::send_message(vw::platefile::RpcWrapper&)':
RpcChannel.cc:45: error: invalid use of undefined type 'struct vw::platefile::RpcWrapper'
/Users/rbeyer/software/visionworkbench/src/vw/Plate/RpcChannel.h:18: error: forward declaration of 'struct vw::platefile::RpcWrapper'
RpcChannel.cc:46: error: invalid use of undefined type 'struct vw::platefile::RpcWrapper'
/Users/rbeyer/software/visionworkbench/src/vw/Plate/RpcChannel.h:18: error: forward declaration of 'struct vw::platefile::RpcWrapper'
RpcChannel.cc:49: error: invalid use of undefined type 'struct vw::platefile::RpcWrapper'
/Users/rbeyer/software/visionworkbench/src/vw/Plate/RpcChannel.h:18: error: forward declaration of 'struct vw::platefile::RpcWrapper'
RpcChannel.cc: In member function 'vw::int32 vw::platefile::IChannel::recv_message(vw::platefile::RpcWrapper&)':
RpcChannel.cc:57: error: invalid use of undefined type 'struct vw::platefile::RpcWrapper'
/Users/rbeyer/software/visionworkbench/src/vw/Plate/RpcChannel.h:18: error: forward declaration of 'struct vw::platefile::RpcWrapper'
RpcChannel.cc:59: error: invalid use of undefined type 'struct vw::platefile::RpcWrapper'
/Users/rbeyer/software/visionworkbench/src/vw/Plate/RpcChannel.h:18: error: forward declaration of 'struct vw::platefile::RpcWrapper'
RpcChannel.cc: In static member function 'static vw::uint32 vw::platefile::IChannel::checksum(const vw::platefile::RpcWrapper&)':
RpcChannel.cc:119: error: invalid use of undefined type 'const struct vw::platefile::RpcWrapper'
/Users/rbeyer/software/visionworkbench/src/vw/Plate/RpcChannel.h:18: error: forward declaration of 'const struct vw::platefile::RpcWrapper'
RpcChannel.cc:119: error: invalid use of undefined type 'const struct vw::platefile::RpcWrapper'
/Users/rbeyer/software/visionworkbench/src/vw/Plate/RpcChannel.h:18: error: forward declaration of 'const struct vw::platefile::RpcWrapper'
RpcChannel.cc:120: error: invalid use of undefined type 'const struct vw::platefile::RpcWrapper'
/Users/rbeyer/software/visionworkbench/src/vw/Plate/RpcChannel.h:18: error: forward declaration of 'const struct vw::platefile::RpcWrapper'
RpcChannel.cc:120: error: invalid use of undefined type 'const struct vw::platefile::RpcWrapper'
/Users/rbeyer/software/visionworkbench/src/vw/Plate/RpcChannel.h:18: error: forward declaration of 'const struct vw::platefile::RpcWrapper'
make[6]: *** [RpcChannel.lo] Error 1
make[5]: *** [all-recursive] Error 1
make[4]: *** [all] Error 2
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive] Error 1

My guess is that the protobuffer files where the RpcWrapper class is defined are not properly pulled in, but I don't know enough about how protobuffers work to debug it.

Undefined reference 'vw:DiskImageResourceTIFF::construct_create'

Hi,
I am trying to install the workbench on Manjaro Linux (Arch based) and I am running into the compile error:

CXXLD    print_exif
../../../src/vw/FileIO/.libs/libvwFileIO.so: undefined reference to `vw::DiskImageResourceTIFF::construct_create(std::string const&, vw::ImageFormat const&)'
../../../src/vw/FileIO/.libs/libvwFileIO.so: undefined reference to `vw::DiskImageResourceTIFF::construct_open(std::string const&)'
collect2: error: ld returned 1 exit status
Makefile:1466: recipe for target 'print_exif' failed
make[3]: *** [print_exif] Error 1
make[3]: Leaving directory '/home/stringham/Downloads/VisionWorkbench/src/vw/tools'
Makefile:1029: recipe for target 'install-recursive' failed
make[2]: *** [install-recursive] Error 1
make[2]: Leaving directory '/home/stringham/Downloads/VisionWorkbench/src/vw'
Makefile:775: recipe for target 'install-recursive' failed
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory '/home/stringham/Downloads/VisionWorkbench/src'
Makefile:845: recipe for target 'install-recursive' failed
make: *** [install-recursive] Error 1

Any ideas on what's causing the problem?

Compile the latest VW failed when enable cairomm

When cairomm package are enable, there are some errors when compile VW mainly focus on contour tools:

make[4]: entering directory /home/ylzhao/project/visionworkbench/src/vw/tools' CXXLD contourgen contourgen-contour.o: In functionconrec(vw::ImageView&,
std::multimap<int, std::list<vw::math::Vector<double, 2ul>,
std::allocator<vw::math::Vector<double, 2ul> > >, std::less,
std::allocator<std::pair<int const, std::list<vw::math::Vector<double,
2ul>, std::allocator<vw::math::Vector<double, 2ul> > > > > >&, int,
float, std::list<ContourSegment, std::allocator >&)':
contour.cpp:(.text+0x9ed): undefined reference to vw::vw_out(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' contour.cpp:(.text+0xa38): undefined reference tovw::vw_out(int,
std::basic_string<char, std::char_traits, std::allocator >
const&)'
contour.cpp:(.text+0x163b): undefined reference to vw::vw_out(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' contourgen-contourgen.o: In function read_segments_from_file(std::list<ContourSegment,
std::allocator >&, std::basic_string<char,
std::char_traits, std::allocator >, int&, int&)':
contourgen.cc:(.text+0x33f): undefined reference to vw::vw_out(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' contourgen.cc:(.text+0x4db): undefined reference tovw::vw_out(int,
std::basic_string<char, std::char_traits, std::allocator >
const&)'
contourgen-contourgen.o:contourgen.cc:(.text+0x829): more undefined
references to vw::vw_out(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' follow contourgen-contourgen.o: In function load_dem_from_file(std::basic_string<char, std::char_traits,
std::allocator >)':
contourgen.cc:(.text+0x231f): undefined reference to
vw::DiskImageResource::open(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' contourgen.cc:(.text+0x2345): undefined reference tovw::vw_out(int,
std::basic_string<char, std::char_traits, std::allocator >
const&)'
contourgen.cc:(.text+0x239c): undefined reference to
vw::num_channels(vw::PixelFormatEnum)' contourgen.cc:(.text+0x23e6): undefined reference tovw::vw_out(int,
std::basic_string<char, std::char_traits, std::allocator >
const&)'
contourgen-contourgen.o: In function std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& boost::program_options::validators::get_single_string<char>(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool) [clone .constprop.828]': contourgen.cc:(.text+0x28ef): undefined reference to boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t,
std::basic_string<char, std::char_traits, std::allocator >
const&, std::basic_string<char, std::char_traits,
std::allocator > const&)'
contourgen.cc:(.text+0x29c6): undefined reference to
boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' contourgen-contourgen.o: In function boost::program_options::typed_value<std::basic_string<char,
std::char_traits, std::allocator >,
char>::xparse(boost::any&, std::vector<std::basic_string<char,
std::char_traits, std::allocator >,
std::allocator<std::basic_string<char, std::char_traits,
std::allocator > > > const&) const':
contourgen.cc:(.text._ZNK5boost15program_options11typed_valueISscE6xparseERNS_3anyERKSt6vectorISsSaISsEE[boost::program_options::typed_value<std::basic_string<char,
std::char_traits, std::allocator >,
char>::xparse(boost::any&, std::vector<std::basic_string<char,
std::char_traits, std::allocator >,
std::allocator<std::basic_string<char, std::char_traits,
std::allocator > > > const&) const]+0x19): undefined reference
to `boost::program_options::validate(boost::any&,
std::vector<std::basic_string<char, std::char_traits,
std::allocator >, std::allocator<std::basic_string<char,
std::char_traits, std::allocator > > > const&,
std::basic_string<char, std::char_traits, std::allocator

, int)'
contourgen-contourgen.o: In function
boost::program_options::invalid_option_value::~invalid_option_value()': contourgen.cc:(.text._ZN5boost15program_options20invalid_option_valueD2Ev[_ZN5boost15program_options20invalid_option_valueD5Ev]+0x7): undefined reference tovtable for
boost::program_options::validation_error'
contourgen-contourgen.o: In function
boost::program_options::invalid_option_value::~invalid_option_value()': contourgen.cc:(.text._ZN5boost15program_options20invalid_option_valueD0Ev[_ZN5boost15program_options20invalid_option_valueD5Ev]+0x7): undefined reference tovtable for
boost::program_options::validation_error'
contourgen-contourgen.o: In function
boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::invalid_option_value> ::clone() const': contourgen.cc:(.text._ZNK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options20invalid_option_valueEEEE5cloneEv[boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::invalid_option_value> ::clone() const]+0x4f): undefined reference tovtable for
boost::program_options::validation_error'
contourgen-contourgen.o: In function
boost::program_options::typed_value<int, char>::name() const': contourgen.cc:(.text._ZNK5boost15program_options11typed_valueIicE4nameEv[boost::program_options::typed_value<int, char>::name() const]+0x14e): undefined reference to boost::program_options::arg'
contourgen-contourgen.o: In function
boost::program_options::typed_value<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char>::name() const': contourgen.cc:(.text._ZNK5boost15program_options11typed_valueISscE4nameEv[boost::program_options::typed_value<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char>::name() const]+0x14e): undefined reference toboost::program_options::arg'
contourgen-contourgen.o: In function
boost::program_options::typed_value<float, char>::name() const': contourgen.cc:(.text._ZNK5boost15program_options11typed_valueIfcE4nameEv[boost::program_options::typed_value<float, char>::name() const]+0x14e): undefined reference to boost::program_options::arg'
contourgen-contourgen.o: In function
boost::program_options::validation_error::~validation_error()': contourgen.cc:(.text._ZN5boost15program_options16validation_errorD2Ev[_ZN5boost15program_options16validation_errorD5Ev]+0x7): undefined reference tovtable for
boost::program_options::validation_error'
contourgen-contourgen.o: In function
boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::validation_error> ::clone() const': contourgen.cc:(.text._ZNK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options16validation_errorEEEE5cloneEv[boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::validation_error> ::clone() const]+0x4f): undefined reference tovtable for
boost::program_options::validation_error'
contourgen-contourgen.o: In function
boost::program_options::validation_error::~validation_error()': contourgen.cc:(.text._ZN5boost15program_options16validation_errorD0Ev[_ZN5boost15program_options16validation_errorD5Ev]+0x7): undefined reference tovtable for
boost::program_options::validation_error'
contourgen-contourgen.o: In function
boost::exception_detail::error_info_injector<boost::program_options::invalid_option_value>::~error_info_injector()': contourgen.cc:(.text._ZN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEED2Ev[_ZN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEED5Ev]+0x23): undefined reference tovtable for
boost::program_options::validation_error'
contourgen-contourgen.o: In function
boost::exception_detail::error_info_injector<boost::program_options::validation_error>::~error_info_injector()': contourgen.cc:(.text._ZN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEED2Ev[_ZN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEED5Ev]+0x23): undefined reference tovtable for
boost::program_options::validation_error'
contourgen-contourgen.o:contourgen.cc:(.text.ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options16validation_errorEEEED2Ev[ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options16validation_errorEEEED5Ev]+0x2b):
more undefined references to vtable for boost::program_options::validation_error' follow contourgen-contourgen.o: In functionboost::shared_mutex::lock()':
contourgen.cc:(.text.ZN5boost12shared_mutex4lockEv[boost::shared_mutex::lock()]+0x1e):
undefined reference to
boost::this_thread::disable_interruption::disable_interruption()' contourgen.cc:(.text._ZN5boost12shared_mutex4lockEv[boost::shared_mutex::lock()]+0x5d): undefined reference toboost::detail::get_current_thread_data()'
contourgen.cc:(.text.ZN5boost12shared_mutex4lockEv[boost::shared_mutex::lock()]+0xf0):
undefined reference to boost::this_thread::interruption_point()' contourgen.cc:(.text._ZN5boost12shared_mutex4lockEv[boost::shared_mutex::lock()]+0x151): undefined reference to boost::this_thread::disable_interruption::~disable_interruption()'
contourgen.cc:(.text.ZN5boost12shared_mutex4lockEv[boost::shared_mutex::lock()]+0x218):
undefined reference to
boost::this_thread::disable_interruption::~disable_interruption()' contourgen-contourgen.o: In function boost::program_options::basic_command_line_parser::basic_command_line_parser(int,
char const
const
)':
contourgen.cc:(.text.ZN5boost15program_options25basic_command_line_parserIcEC2EiPKPKc[ZN5boost15program_options25basic_command_line_parserIcEC5EiPKPKc]+0x155):
undefined reference to
boost::program_options::to_internal(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' contourgen.cc:(.text._ZN5boost15program_options25basic_command_line_parserIcEC2EiPKPKc[_ZN5boost15program_options25basic_command_line_parserIcEC5EiPKPKc]+0x1a7): undefined reference to boost::program_options::detail::cmdline::cmdline(std::vector<std::basic_string<char,
std::char_traits, std::allocator >,
std::allocator<std::basic_string<char, std::char_traits,
std::allocator > > > const&)'
contourgen-contourgen.o: In function
boost::program_options::variables_map::~variables_map()': contourgen.cc:(.text._ZN5boost15program_options13variables_mapD2Ev[_ZN5boost15program_options13variables_mapD5Ev]+0xe): undefined reference tovtable for
boost::program_options::variables_map'
contourgen-contourgen.o: In function
boost::program_options::variables_map::~variables_map()': contourgen.cc:(.text._ZN5boost15program_options13variables_mapD0Ev[_ZN5boost15program_options13variables_mapD5Ev]+0xe): undefined reference tovtable for
boost::program_options::variables_map'
contourgen-contourgen.o: In function
vw::ImageView<float>::set_size(int, int, int)': contourgen.cc:(.text._ZN2vw9ImageViewIfE8set_sizeEiii[vw::ImageView<float>::set_size(int, int, int)]+0x26b): undefined reference tovw::vw_log()'
contourgen.cc:(.text.ZN2vw9ImageViewIfE8set_sizeEiii[vw::ImageView::set_size(int,
int, int)]+0x27d): undefined reference to vw::Log::is_enabled(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' contourgen.cc:(.text._ZN2vw9ImageViewIfE8set_sizeEiii[vw::ImageView<float>::set_size(int, int, int)]+0x39f): undefined reference tovw::vw_throw(vw::Exception
const&)'
contourgen.cc:(.text.ZN2vw9ImageViewIfE8set_sizeEiii[vw::ImageView::set_size(int,
int, int)]+0x425): undefined reference to vw::vw_out(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' contourgen.cc:(.text._ZN2vw9ImageViewIfE8set_sizeEiii[vw::ImageView<float>::set_size(int, int, int)]+0x517): undefined reference tovw::vw_throw(vw::Exception
const&)'
contourgen.cc:(.text.ZN2vw9ImageViewIfE8set_sizeEiii[vw::ImageView::set_size(int,
int, int)]+0x5c1): undefined reference to vw::vw_throw(vw::Exception const&)' contourgen.cc:(.text._ZN2vw9ImageViewIfE8set_sizeEiii[vw::ImageView<float>::set_size(int, int, int)]+0x657): undefined reference tovw::vw_throw(vw::Exception
const&)'
contourgen-contourgen.o: In function void vw::read_image<float>(vw::ImageView<float>&, vw::SrcImageResource const&, vw::math::BBox<int, 2ul> const&)': contourgen.cc:(.text._ZN2vw10read_imageIfEEvRNS_9ImageViewIT_EERKNS_16SrcImageResourceERKNS_4math4BBoxIiLm2EEE[void vw::read_image<float>(vw::ImageView<float>&, vw::SrcImageResource const&, vw::math::BBox<int, 2ul> const&)]+0x3e): undefined reference tovw::num_channels(vw::PixelFormatEnum)'
contourgen.cc:(.text.ZN2vw10read_imageIfEEvRNS_9ImageViewIT_EERKNS_16SrcImageResourceERKNS_4math4BBoxIiLm2EEE[void
vw::read_image(vw::ImageView&, vw::SrcImageResource
const&, vw::math::BBox<int, 2ul> const&)]+0x77): undefined reference
to vw::vw_throw(vw::Exception const&)' contourgen.cc:(.text._ZN2vw10read_imageIfEEvRNS_9ImageViewIT_EERKNS_16SrcImageResourceERKNS_4math4BBoxIiLm2EEE[void vw::read_image<float>(vw::ImageView<float>&, vw::SrcImageResource const&, vw::math::BBox<int, 2ul> const&)]+0x8c): undefined reference tovw::num_channels(vw::PixelFormatEnum)'
contourgen-contourgen.o: In function
boost::program_options::basic_command_line_parser<char>::run()': contourgen.cc:(.text._ZN5boost15program_options25basic_command_line_parserIcE3runEv[boost::program_options::basic_command_line_parser<char>::run()]+0x3d): undefined reference to boost::program_options::detail::cmdline::run()'
contourgen-contourgen.o: In function main': contourgen.cc:(.text.startup+0x14): undefined reference to boost::program_options::options_description::m_default_line_length'
contourgen.cc:(.text.startup+0x8b): undefined reference to
boost::program_options::options_description::options_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)' contourgen.cc:(.text.startup+0x34d): undefined reference to boost::program_options::bool_switch(bool
)'
contourgen.cc:(.text.startup+0x35d): undefined reference to
boost::program_options::options_description::add_options()' contourgen.cc:(.text.startup+0x37c): undefined reference to boost::program_options::options_description_easy_init::operator()(char
const
, char const
)'
contourgen.cc:(.text.startup+0x391): undefined reference to
boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)' contourgen.cc:(.text.startup+0x3a6): undefined reference to boost::program_options::options_description_easy_init::operator()(char
const, boost::program_options::value_semantic const, char const)'
contourgen.cc:(.text.startup+0x3bd): undefined reference to
boost::program_options::options_description_easy_init::operator()(char const_, boost::program_options::value_semantic const_, char const_)' contourgen.cc:(.text.startup+0x3d4): undefined reference to boost::program_options::options_description_easy_init::operator()(char
const*, boost::program_options::value_semantic const*, char const*)'
contourgen.cc:(.text.startup+0x3e9): undefined reference to
boost::program_options::options_description_easy_init::operator()(char const_, boost::program_options::value_semantic const_, char const_)' contourgen-contourgen.o:contourgen.cc:(.text.startup+0x3fe): more undefined references to boost::program_options::options_description_easy_init::operator()(char
const, boost::program_options::value_semantic const, char const)'
follow
contourgen-contourgen.o: In function main': contourgen.cc:(.text.startup+0x45a): undefined reference to boost::program_options::options_description::options_description(std::basic_string<char,
std::char_traits, std::allocator > const&, unsigned int,
unsigned int)'
contourgen.cc:(.text.startup+0x4b4): undefined reference to
boost::program_options::options_description::add_options()' contourgen.cc:(.text.startup+0x4e6): undefined reference to boost::program_options::options_description_easy_init::operator()(char
const, boost::program_options::value_semantic const_, char const_)'
contourgen.cc:(.text.startup+0x50b): undefined reference to
boost::program_options::options_description_easy_init::operator()(char const_, boost::program_options::value_semantic const_, char const_)' contourgen.cc:(.text.startup+0x531): undefined reference to boost::program_options::options_description::options_description(unsigned
int, unsigned int)'
contourgen.cc:(.text.startup+0x541): undefined reference to
boost::program_options::options_description::add(boost::program_options::options_description const&)' contourgen.cc:(.text.startup+0x551): undefined reference to boost::program_options::options_description::add(boost::program_options::options_description
const&)'
contourgen.cc:(.text.startup+0x55e): undefined reference to
boost::program_options::positional_options_description::positional_options_description()' contourgen.cc:(.text.startup+0x585): undefined reference to boost::program_options::positional_options_description::add(char
const*, int)'
contourgen.cc:(.text.startup+0x5ac): undefined reference to
boost::program_options::positional_options_description::add(char const_, int)' contourgen.cc:(.text.startup+0x5c6): undefined reference to boost::program_options::variables_map::variables_map()'
contourgen.cc:(.text.startup+0x5f4): undefined reference to
boost::program_options::detail::cmdline::set_options_description(boost::program_options::options_description const&)' contourgen.cc:(.text.startup+0x611): undefined reference to boost::program_options::detail::cmdline::set_positional_options(boost::program_options::positional_options_description
const&)'
contourgen.cc:(.text.startup+0x63a): undefined reference to
boost::program_options::store(boost::program_options::basic_parsed_options<char> const&, boost::program_options::variables_map&, bool)' contourgen.cc:(.text.startup+0x66e): undefined reference to boost::program_options::notify(boost::program_options::variables_map&)'
contourgen.cc:(.text.startup+0x6d5): undefined reference to
boost::program_options::operator<<(std::basic_ostream<char, std::char_traits<char> >&, boost::program_options::options_description const&)' contourgen.cc:(.text.startup+0x7f6): undefined reference to boost::program_options::abstract_variables_map::operator[](std::basic_string<char,
std::char_traits, std::allocator > const&) const'
contourgen.cc:(.text.startup+0x89f): undefined reference to
boost::program_options::abstract_variables_map::operator[](std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const' contourgen.cc:(.text.startup+0x8fb): undefined reference to boost::program_options::abstract_variables_map::operator[](std::basic_string<char,
std::char_traits, std::allocator > const&) const'
contourgen.cc:(.text.startup+0x94c): undefined reference to
boost::program_options::abstract_variables_map::operator[](std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const' contourgen.cc:(.text.startup+0x99d): undefined reference to boost::program_options::abstract_variables_map::operator[](std::basic_string<char,
std::char_traits, std::allocator > const&) const'
contourgen-contourgen.o:contourgen.cc:(.text.startup+0x9ee): more
undefined references to
boost::program_options::abstract_variables_map::operator[](std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const' follow contourgen-contourgen.o: In function main':
contourgen.cc:(.text.startup+0xa56): undefined reference tovw::vw_log()' contourgen.cc:(.text.startup+0xa6a): undefined reference to vw::LogRuleSet::clear()'
contourgen.cc:(.text.startup+0xa89): undefined reference tovw::vw_log()' contourgen.cc:(.text.startup+0xaaa): undefined reference to vw::LogRuleSet::add_rule(int, std::basic_string<char,
std::char_traits, std::allocator > const&)'
contourgen.cc:(.text.startup+0xae0): undefined reference tovw::vw_log()' contourgen.cc:(.text.startup+0xb01): undefined reference to vw::LogRuleSet::add_rule(int, std::basic_string<char,
std::char_traits, std::allocator > const&)'
contourgen.cc:(.text.startup+0xb6e): undefined reference to
vw::vw_out(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' contourgen.cc:(.text.startup+0xbc7): undefined reference to vw::vw_out(int, std::basic_string<char, std::char_traits,
std::allocator > const&)'
contourgen.cc:(.text.startup+0xc20): undefined reference to
vw::vw_out(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' contourgen.cc:(.text.startup+0xc7e): undefined reference to vw::vw_out(int, std::basic_string<char, std::char_traits,
std::allocator > const&)'
contourgen.cc:(.text.startup+0xcdc): undefined reference to
vw::vw_out(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' contourgen-contourgen.o:contourgen.cc:(.text.startup+0xd3a): more undefined references to vw::vw_out(int, std::basic_string<char,
std::char_traits, std::allocator > const&)' follow
contourgen-contourgen.o: In function_GLOBAL__sub_I__Z18load_dem_from_fileSs': contourgen.cc:(.text.startup+0x1c1b): undefined reference to boost::system::generic_category()'
contourgen.cc:(.text.startup+0x1c27): undefined reference to
boost::system::generic_category()' contourgen.cc:(.text.startup+0x1c33): undefined reference to boost::system::system_category()'
contourgen-contourgen.o: In function
boost::program_options::validation_error::validation_error(boost::program_options::validation_error const&)': contourgen.cc:(.text._ZN5boost15program_options16validation_errorC2ERKS1_[_ZN5boost15program_options16validation_errorC5ERKS1_]+0x35): undefined reference to vtable for
boost::program_options::validation_error'
contourgen-contourgen.o: In function
boost::exception_detail::error_info_injectorboost::program_options::invalid_option_value::error_info_injector(boost::exception_detail::error_info_injectorboost::program_options::invalid_option_value const&)': contourgen.cc:(.text._ZN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEC2ERKS4_[_ZN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEC5ERKS4_]+0x35): undefined reference to vtable for
boost::program_options::validation_error'
contourgen-contourgen.o: In function
boost::exception_detail::error_info_injectorboost::program_options::validation_error::error_info_injector(boost::exception_detail::error_info_injectorboost::program_options::validation_error const&)': contourgen.cc:(.text._ZN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEEC2ERKS4_[_ZN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEEC5ERKS4_]+0x35): undefined reference to vtable for
boost::program_options::validation_error'
contourgen-contourgen.o: In functionvoid boost::program_options::validate<int, char>(boost::any&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, int_, long)': contourgen.cc:(.text._ZN5boost15program_options8validateIicEEvRNS_3anyERKSt6vectorISbIT0_St11char_traitsIS5_ESaIS5_EESaIS9_EEPT_l[void boost::program_options::validate<int, char>(boost::any&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, int_, long)]+0x10): undefined reference to boost::program_options::validators::check_first_occurrence(boost::any
const&)'
contourgen.cc:(.text.ZN5boost15program_options8validateIicEEvRNS_3anyERKSt6vectorISbIT0_St11char_traitsIS5_ESaIS5_EESaIS9_EEPT_l[void
boost::program_options::validate<int, char>(boost::any&,
std::vector<std::basic_string<char, std::char_traits,
std::allocator >, std::allocator<std::basic_string<char,
std::char_traits, std::allocator > > > const&, int
,
long)]+0x2e5): undefined reference to
boost::program_options::invalid_option_value::invalid_option_value(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' contourgen-contourgen.o: In functionvoid
boost::program_options::validate<float, char>(boost::any&,
std::vector<std::basic_string<char, std::char_traits,
std::allocator >, std::allocator<std::basic_string<char,
std::char_traits, std::allocator > > > const&, float_,
long)':
contourgen.cc:(.text.ZN5boost15program_options8validateIfcEEvRNS_3anyERKSt6vectorISbIT0_St11char_traitsIS5_ESaIS5_EESaIS9_EEPT_l[void
boost::program_options::validate<float, char>(boost::any&,
std::vector<std::basic_string<char, std::char_traits,
std::allocator >, std::allocator<std::basic_string<char,
std::char_traits, std::allocator > > > const&, float
,
long)]+0x10): undefined reference to
boost::program_options::validators::check_first_occurrence(boost::any const&)' contourgen.cc:(.text._ZN5boost15program_options8validateIfcEEvRNS_3anyERKSt6vectorISbIT0_St11char_traitsIS5_ESaIS5_EESaIS9_EEPT_l[void boost::program_options::validate<float, char>(boost::any&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, float*, long)]+0x2e5): undefined reference to boost::program_options::invalid_option_value::invalid_option_value(std::basic_string<char,
std::char_traits, std::allocator > const&)'
contourgen-contourgen.o:(.rodata._ZTVN5boost15program_options11typed_valueIicEE[vtable
for boost::program_options::typed_value<int, char>]+0x38): undefined
reference to boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool) const' contourgen-contourgen.o:(.rodata._ZTVN5boost15program_options11typed_valueIfcEE[vtable for boost::program_options::typed_value<float, char>]+0x38): undefined reference toboost::program_options::value_semantic_codecvt_helper::parse(boost::any&,
std::vector<std::basic_string<char, std::char_traits,
std::allocator >, std::allocator<std::basic_string<char,
std::char_traits, std::allocator > > > const&, bool)
const'
contourgen-contourgen.o:(.rodata._ZTVN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEEE[vtable
for boost::exception_detail::error_info_injectorboost::program_options::validation_error]+0x20):
undefined reference to
boost::program_options::validation_error::what() const' contourgen-contourgen.o:(.rodata._ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options16validation_errorEEEEE[vtable for boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::validation_error> ]+0x20): undefined reference to boost::program_options::validation_error::what() const'
contourgen-contourgen.o:(.rodata._ZTVN5boost15program_options20invalid_option_valueE[vtable
for boost::program_options::invalid_option_value]+0x20): undefined
reference to boost::program_options::validation_error::what() const' contourgen-contourgen.o:(.rodata._ZTVN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEE[vtable for boost::exception_detail::error_info_injector<boost::program_options::invalid_option_value>]+0x20): undefined reference to boost::program_options::validation_error::what() const'
contourgen-contourgen.o:(.rodata._ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options20invalid_option_valueEEEEE[vtable
for boost::exception_detail::clone_implboost::exception_detail::error_info_injector<boost::program_options::invalid_option_value
]+0x20): undefined reference to
boost::program_options::validation_error::what() const' contourgen-contourgen.o:(.rodata._ZTVN5boost15program_options11typed_valueISscEE[vtable for boost::program_options::typed_value<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char>]+0x38): undefined reference to boost::program_options::value_semantic_codecvt_helper::parse(boost::any&,
std::vector<std::basic_string<char, std::char_traits,
std::allocator >, std::allocator<std::basic_string<char,
std::char_traits, std::allocator > > > const&, bool)
const'
contourgen-contourgen.o:(.rodata._ZTIN5boost15program_options11typed_valueIicEE[typeinfo
for boost::program_options::typed_value<int, char>]+0x18): undefined
reference to typeinfo for boost::program_options::value_semantic_codecvt_helper<char>' contourgen-contourgen.o:(.rodata._ZTIN5boost15program_options11typed_valueIfcEE[typeinfo for boost::program_options::typed_value<float, char>]+0x18): undefined reference totypeinfo for
boost::program_options::value_semantic_codecvt_helper'
contourgen-contourgen.o:(.rodata._ZTIN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEEE[typeinfo
for boost::exception_detail::error_info_injectorboost::program_options::validation_error]+0x18):
undefined reference to typeinfo for boost::program_options::validation_error' contourgen-contourgen.o:(.rodata._ZTIN5boost15program_options20invalid_option_valueE[typeinfo for boost::program_options::invalid_option_value]+0x10): undefined reference totypeinfo for boost::program_options::validation_error'
contourgen-contourgen.o:(.rodata._ZTIN5boost15program_options11typed_valueISscEE[typeinfo
for boost::program_options::typed_value<std::basic_string<char,
std::char_traits, std::allocator >, char>]+0x18):
undefined reference to `typeinfo for
boost::program_options::value_semantic_codecvt_helper'
collect2: ld returned 1 exit status

PinholeModel coordinate vectors not fully supported

The three coordinate vectors (u, v, and w directions) in the PinholeModel class are not handled everywhere in the code and failures will happen if they are used. Map projection seems to work but bundle adjustment fails.

C++11?

How do the owners and maintainers of VisionWorkbench feel about changes that use C++11 features?

Is the VW community ready to make that jump or is backwards compatibility more important? (A third option: we could #ifdef all C++11 constructs--at the expense of added complexity.)

In my experience, VW is much nicer to work with in a C++11 context. Judicious use of C++11 features in VW itself could make the code simpler and perhaps faster.

(Thanks to Matt Hancher for suggesting that I put this question to the larger group.)

Best regards,
Aaron Yonas

gdal bug?

Sometimes, when I create a DiskImageResourceGDAL like so:
DiskImageResourceGDAL out_rsrc("foo.tif", source.format(), Vector2i(1024, 1024));
I get the error:
ERROR 4: `foo.tif' not recognised as a supported file format.
Has anyone else seen this?

FileIO Tests are failing

Disk Image Resource and Block File IO are failing in Mac OSX with:
Running 3 tests..TestBlockFileIO(81861) malloc: *** error for object 0x1be60a8: Non-aligned pointer being freed
*** set a breakpoint in malloc_error_break to debug
TestBlockFileIO(81861) malloc: *** error for object 0x21: Non-aligned pointer being freed
*** set a breakpoint in malloc_error_break to debug
TestBlockFileIO(81861) malloc: *** error for object 0x229a24c: Non-aligned pointer being freed
*** set a breakpoint in malloc_error_break to debug
TestBlockFileIO(81861) malloc: *** error for object 0x22ae000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
/bin/sh: line 1: 81861 Bus error               ${dir}$tst
FAIL: TestBlockFileIO

and

Running 13 testsTestDiskImageResource(81806) malloc: *** error for object 0x1c0a0a8: Non-aligned pointer being freed
*** set a breakpoint in malloc_error_break to debug
TestDiskImageResource(81806) malloc: *** error for object 0x21: Non-aligned pointer being freed
*** set a breakpoint in malloc_error_break to debug
TestDiskImageResource(81806) malloc: *** error for object 0x228906c: Non-aligned pointer being freed
*** set a breakpoint in malloc_error_break to debug
TestDiskImageResource(81806) malloc: *** error for object 0x22a0000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
/bin/sh: line 1: 81806 Bus error               ${dir}$tst
FAIL: TestDiskImageResource

CDFAccumulator merge bug

The vw::math::CDFAccumulator class has a function where it is supposed to merge with another class instance but it sometimes throws unexpectedly.

InterpolationView shouldn't touch floating point accessible Images

The idea is that if the underlining type is floating point accessible then no interpolation is required. More extreme requests are that InterpolationView shouldn't prerasterize its child if it's floating point accessible since that would destroy data. Finally InterpolationView should be MultiplyAccessible if the inner type is floating point accessible and is also MultiplyAccessible. In the event that the underlining type is floating point accessible then InterpolationView should be entirely transparent and that means passing traits.

There's a disabled test for this at L116 of TestInterpolation.cxx that hopefully shows my complaint. I have a solution available for this in one of my development branches http://github.com/zmoratto/visionworkbench/commits/ortho_interp_edge_fix

Pinhole scaling bug

The scale_camera function in PinholeModel.h does not handle the pixel pitch and this will cause problems in some cases.

Bounding box empty handling

Use of the bounding box class is not consistent between whether it is inclusive or exclusive of the end coordinate. This leads to unwanted behavior such as functions failing to have their effect because min()[1] == max()[1].

Log::add ignores the rule set

The function

/// Add a stream to the Log manager. You may optionally specify a LogRuleSet.
void Log::add(std::ostream &stream, LogRuleSet /rule_set/ = LogRuleSet()) {
Mutex::Lock lock(m_system_log_mutex);
m_logs.push_back( boost::shared_ptr(new LogInstance(stream)) );
}

should be

/// Add a stream to the Log manager.  You may optionally specify a LogRuleSet.
void  Log::add(std::ostream &stream, LogRuleSet rule_set = LogRuleSet()) {
  boost::mutex::scoped_lock lock(m_system_log_mutex);
  m_logs.push_back( boost::shared_ptr<LogInstance>(new LogInstance(stream)) );
  m_logs.back()->rule_set() = rule_set;
  return;
}

vwv pixel shader code is too complex

When trying to run vwv on my netbook (with a less than powerful graphics card), I get the error:

i915_program_error: Exceeded max instructions (213 out of 123)

This is because the fragment shader code (https://github.com/visionworkbench/visionworkbench/blob/master/src/vw/gui/GlPreviewWidget.cc#L37) has too many nested-if statements.

To minimize the number of instructions in the shader, it would be better to break that single pixel shader into multiple shaders that are swapped in depending on what function (channel select, hillshade, etc) is selected. This way it would run on graphics cards like mine.

vwv OpenGL ERROR (1281)

On my netbook (again, with the less than powerful graphics card), when trying to view any plate I get:

Error: OpenGL ERROR (1281): invalid value

This is because vwv is trying to internally store its textures as float on the graphics card, which my card apparently doesn't support. Look at https://github.com/visionworkbench/visionworkbench/blob/master/src/vw/gui/GlPreviewWidget.cc#L317:

glTexImage2D(GL_TEXTURE_2D, 0, texture_pixel_type, tile->cols(), tile->rows(), 0, source_pixel_type, source_channel_type, tile->native_ptr().get() );

texture_pixel_type takes on the value of GL_RGBA32F_ARB (or something similar, depending on the pixel type). This mode isn't supported on my card, so as a hack I replace texture_pixel_type with tile->channels():

glTexImage2D(GL_TEXTURE_2D, 0, tile->channels(), tile->cols(), tile->rows(), 0, source_pixel_type, source_channel_type, tile->native_ptr().get() );

I think this allows the card to choose the best internal representation type. (My guess looking at http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml)

This isn't a really universal fix because I think using a float internal type might be essential for some of the pixel shader modes. The pixel shaders might have to be rewritten to accommodate an int-type internal representation in order to properly make this change.

Image2Qtree throws vw::InputErr

This is an error that Ross mailed in:

image2qtree -o npole --stereographic --north 90 --south 55 --proj-lat  
90 --proj-scale 1 npole_v1.cub
Adding file npole_v1.cub
terminate called after throwing an instance of 'vw::InputErr'
   what():  Proj.4 failed to initialize on string: +proj=stere  
+lat_0=90 +lat_ts=90 +lon_0=0 +k=0 +x_0=0 +y_0=0 +units=m   
+ellps=WGS84 +datum=WGS84 +no_defs
        Error was: k <= 0
zsh: abort      ~/local/bin/image2qtree -o npole --stereographic -- 
north 90 --south 55  90  1

The above error was using an Isis cube that contained a polar mosaic. Here's some other details Ross had:

I put in the --proj-scale value in an attempt to get k set to something non-zero, but no luck. Of course, I'm just assuming that image2qtree can eat polarstereographic images. Maybe not?

The actual file used is available on a NASA server but is not distributable. Please ask for it's location if you work on this before me.

VW FileIO test failed

[----------] 1 test from DiskCacheImageView
[ RUN ] DiskCacheImageView.Construction
unknown file: Failure
C++ exception with description "DiskImageResourceTIFF: Failed to open "/tmp/vw_cache_iGON1K.tif" for reading!" thrown in the test body.
[ FAILED ] DiskCacheImageView.Construction (1 ms)
[----------] 1 test from DiskCacheImageView (1 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 2 test cases ran. (2 ms total)
[ PASSED ] 1 test.
[ FAILED ] 1 test, listed below:
[ FAILED ] DiskCacheImageView.Construction

1 FAILED TEST
FAIL: TestDiskImageView

ImageView documentation

At the very least, we need docs on how to write a new ImageView. There are a lot of details that you have to get right, including handling the multiply accessible and floating-point accessible traits, that most imageviews don't get right.

block_write_image / DiskImageResourceGDAL bug

When I try to block write an image and then immediately reload it, no image data is returned in the reloaded version:
DiskImageView source(argv[1]);
cout << source(10, 10) << endl;
DiskImageResourceGDAL out_rsrc("foo.tif", source.format(), Vector2i(1024, 1024));
block_write_image(out_rsrc, source);

cout << "wrote image" << endl;                                                                                                                   

DiskImageView<float32> reload("foo.tif");                                                                                                        
cout << reload(10, 10) << endl;

Will output:
0.911962
wrote image
0
Now, if scope the DiskImageResource (to force it to deconstruct and I presume, complete the image writing process), I can work around this bug:
DiskImageView source(argv[1]);
cout << source(10, 10) << endl;
{
DiskImageResourceGDAL out_rsrc("foo.tif", source.format(), Vector2i(1024, 1024));
block_write_image(out_rsrc, source);
}

cout << "wrote image" << endl;                                                                                                                   

DiskImageView<float32> reload("foo.tif");                                                                                                        
cout << reload(10, 10) << endl;

outputs correctly:
0.911962
wrote image
0.911962

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.