diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..68c2bbee245e21c3a550b4c12c3e85667c9aeff1 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,28 @@ +project(EIImage) +cmake_minimum_required(VERSION 2.8.11) + +# Find includes in corresponding build directories +set(CMAKE_INCLUDE_CURRENT_DIR ON) +# Instruct CMake to run moc automatically when needed. +set(CMAKE_AUTOMOC ON) + +# Add CMake modules path +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) + +# Detiq-T is a submodule, it is built automatically before building eiimage +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/lib/detiq-t AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib/detiq-t) + add_subdirectory(lib/detiq-t) + include_directories(lib/detiq-t/ImageIn lib/detiq-t/GenericInterface) +else() + message(FATAL_ERROR "The Detiq-T project should be cloned before excuting this compilation. " + "Please use 'git submodule init' and 'git submodule update' to automatically get the source " + "for Detiq-T, and re-run CMake.") +endif() + +add_subdirectory(core) +include_directories(core) + +# Too much compile errors, have to be fixed: +# add_subdirectory(plugins) +add_subdirectory(app) + diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..f1a368883e5caf22e3023319ae1850e3e5dfe2f0 --- /dev/null +++ b/app/CMakeLists.txt @@ -0,0 +1,220 @@ + +# Find the Qt libraries +find_package(Qt5Core REQUIRED) +find_package(Qt5Gui REQUIRED) +find_package(Qt5Widgets REQUIRED) +find_package(Qt5LinguistTools REQUIRED) +find_package(Qt5Script REQUIRED) +find_package(Qt5Xml REQUIRED) + +# Find RandomLib, which must be built and installed before running this compilation +find_package(RandomLib 1.7 REQUIRED) +if(RandomLib_FOUND) + include_directories(${RandomLib_INCLUDE_DIRS}) +else() + message(FATAL_ERROR "Unable to find Random library. Please clone, compile and install it before compiling eiimage.") +endif() + +# Find Qwt, which must be built and installed before running this compilation +find_package(Qwt 6.0 REQUIRED) +include_directories(${QWT_INCLUDE_DIRS}) + +set(eiimage_SOURCES + main.cpp + Tools.h + Algorithms/ClassAnalysis.cpp + Algorithms/ClassAnalysis.cpp + Algorithms/ClassAnalysis.h + Algorithms/Croissance.cpp + Algorithms/Croissance.cpp + Algorithms/Croissance.h + Algorithms/DCT.cpp + Algorithms/DCT.cpp + Algorithms/DCT.h + Algorithms/FFT.cpp + Algorithms/FFT.cpp + Algorithms/FFT.h + Algorithms/Pyramid.cpp + Algorithms/Pyramid.cpp + Algorithms/Pyramid.h + Operations/BFlitOp.cpp + Operations/BFlitOp.h + Operations/CenterOp.cpp + Operations/CenterOp.h + Operations/ClassAnalysisDialog.cpp + Operations/ClassAnalysisDialog.h + Operations/ClassAnalysisOp.cpp + Operations/ClassAnalysisOp.h + Operations/ClassResultOp.cpp + Operations/ClassResultOp.h + Operations/ColorDialog.cpp + Operations/ColorDialog.h + Operations/ColorimetryOp.cpp + Operations/ColorimetryOp.h + Operations/CombineColorOp.cpp + Operations/CombineColorOp.h + Operations/CroissanceOp.cpp + Operations/CroissanceOp.h + Operations/DCTDialog.cpp + Operations/DCTDialog.h + Operations/DCTOp.cpp + Operations/DCTOp.h + Operations/DMMDialog.cpp + Operations/DMMDialog.h + Operations/DMMOp.cpp + Operations/DMMOp.h + Operations/EntropyOp.cpp + Operations/EntropyOp.h + Operations/FFTDialog.cpp + Operations/FFTDialog.h + Operations/FFTOp.cpp + Operations/FFTOp.h + Operations/FlipOp.cpp + Operations/FlipOp.h + Operations/HadamardOp.cpp + Operations/HadamardOp.h + Operations/HistogramOp.cpp + Operations/HistogramOp.h + Operations/HoughDialog.cpp + Operations/HoughDialog.cpp + Operations/HoughDialog.h + Operations/HoughOp.cpp + Operations/HoughOp.cpp + Operations/HoughOp.h + Operations/Huffman.cpp + Operations/Huffman.h + Operations/HuffmanOp.cpp + Operations/HuffmanOp.h + Operations/IFFTOp.cpp + Operations/IFFTOp.h + Operations/InverseHoughDialog.cpp + Operations/InverseHoughDialog.cpp + Operations/InverseHoughDialog.h + Operations/InverseHoughOp.cpp + Operations/InverseHoughOp.cpp + Operations/InverseHoughOp.h + Operations/InversePyramidDialog.cpp + Operations/InversePyramidDialog.h + Operations/InversePyramidOp.cpp + Operations/InversePyramidOp.h + Operations/MeanSquaredErrorOp.cpp + Operations/MeanSquaredErrorOp.h + Operations/MICD.cpp + Operations/MICD.h + Operations/MICDDialog.cpp + Operations/MICDDialog.h + Operations/MICDEncodingOp.cpp + Operations/MICDEncodingOp.h + Operations/NoiseOp.cpp + Operations/NoiseOp.h + Operations/PointOp.cpp + Operations/PointOp.h + Operations/PseudoColorOp.cpp + Operations/PseudoColorOp.h + Operations/PyramidDialog.cpp + Operations/PyramidDialog.h + Operations/PyramidOp.cpp + Operations/PyramidOp.h + Operations/Quantification.cpp + Operations/Quantification.h + Operations/QuantificationDialog.cpp + Operations/QuantificationDialog.h + Operations/QuantificationOp.cpp + Operations/QuantificationOp.h + Operations/QuantificationWidget.cpp + Operations/QuantificationWidget.h + Operations/RandomImgOp.cpp + Operations/RandomImgOp.h + Operations/RejectionRingOp.cpp + Operations/RejectionRingOp.h + Operations/RotateOp.cpp + Operations/RotateOp.h + Operations/ScalingOp.cpp + Operations/ScalingOp.h + Operations/SeparatorOp.cpp + Operations/SeparatorOp.h + Operations/SignalToNoiseOp.cpp + Operations/SignalToNoiseOp.h + Operations/SinusSynthesisOp.cpp + Operations/SinusSynthesisOp.cpp + Operations/SinusSynthesisOp.h + Operations/SplitColorOp.cpp + Operations/SplitColorOp.h + Operations/ThresholdDialog.cpp + Operations/ThresholdDialog.cpp + Operations/ThresholdDialog.h + Operations/ThresholdOp.cpp + Operations/ThresholdOp.cpp + Operations/ThresholdOp.h + Operations/Transforms.cpp + Operations/Transforms.h + Operations/TranslateOp.cpp + Operations/TranslateOp.h + Operations/ZeroCrossingOp.cpp + Operations/ZeroCrossingOp.h + Services/EIImageService.cpp + Services/EIImageService.h + Services/FilteringService.cpp + Services/FilteringService.h + Services/MorphoMatService.cpp + Services/MorphoMatService.cpp + Services/MorphoMatService.h + Services/OperationService.cpp + Services/OperationService.h + Services/OpSetService.cpp + Services/OpSetService.h + Services/PluginManager.cpp + Services/PluginManager.h + Widgets/FilterChoice.cpp + Widgets/FilterChoice.cpp + Widgets/FilterChoice.h + Widgets/FilterEditor.cpp + Widgets/FilterEditor.h + Widgets/FilterEditorItem.cpp + Widgets/FilterEditorItem.h + Widgets/ImageZoneSelector.cpp + Widgets/ImageZoneSelector.h + Widgets/OperationBar.cpp + Widgets/OperationBar.h + Widgets/StructElemViewer.cpp + Widgets/StructElemViewer.h + Widgets/StructElemWindow.cpp + Widgets/StructElemWindow.h +) + +set(UIS + Operations/HoughDialog.ui + Operations/InverseHoughDialog.ui + Operations/FFTDialog.ui + Operations/ClassAnalysisDialog.ui + Operations/InversePyramidDialog.ui + Operations/PyramidDialog.ui + Operations/MICDDialog.ui + Operations/DCTDialog.ui + Operations/ColorDialog.ui + Operations/MICDDialog_.ui +) + +qt5_wrap_ui(WRAPPED_UIS ${UIS}) + +set(TS_FILES eiimage_en.ts eiimage_fr.ts) +# Uncommento only 1 of the 2 folowing commands, depending on your needs +# -1- Use current translations files +qt5_add_translation(QM_FILES ${TS_FILES}) +# -2- Update translations files with changes from c++ sources +# qt5_create_translation(QM_FILES ${eiimage_SOURCES} ${TS_FILES}) + +add_executable(eiimage ${eiimage_SOURCES} ${WRAPPED_UIS} ${UIS} ${TS_FILES}) +target_link_libraries(eiimage + eiimage_core + Qt5::Core + Qt5::Widgets + Qt5::Gui + Qt5::Script + Qt5::Xml + ${RandomLib_LIBRARIES} + ${QWT_LIBRARY} + ${QWT_LIBRARIES} + GenericInterface + ImageIn +) diff --git a/cmake/modules/FindQwt.cmake b/cmake/modules/FindQwt.cmake new file mode 100644 index 0000000000000000000000000000000000000000..c3573f47f4a6df064b49664efedcc86530965279 --- /dev/null +++ b/cmake/modules/FindQwt.cmake @@ -0,0 +1,118 @@ +# Qt Widgets for Technical Applications +# available at http://www.http://qwt.sourceforge.net/ +# +# The module defines the following variables: +# QWT_FOUND - the system has Qwt +# QWT_INCLUDE_DIR - where to find qwt_plot.h +# QWT_INCLUDE_DIRS - qwt includes +# QWT_LIBRARY - where to find the Qwt library +# QWT_LIBRARIES - aditional libraries +# QWT_MAJOR_VERSION - major version +# QWT_MINOR_VERSION - minor version +# QWT_PATCH_VERSION - patch version +# QWT_VERSION_STRING - version (ex. 5.2.1) +# QWT_ROOT_DIR - root dir (ex. /usr/local) + +#============================================================================= +# Copyright 2010-2013, Julien Schueller +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# The views and conclusions contained in the software and documentation are those +# of the authors and should not be interpreted as representing official policies, +# either expressed or implied, of the FreeBSD Project. +#============================================================================= + + +find_path ( QWT_INCLUDE_DIR + NAMES qwt_plot.h + HINTS ${QT_INCLUDE_DIR} + PATH_SUFFIXES qwt qwt-qt3 qwt-qt4 qwt-qt5 +) + +set ( QWT_INCLUDE_DIRS ${QWT_INCLUDE_DIR} ) + +# version +set ( _VERSION_FILE ${QWT_INCLUDE_DIR}/qwt_global.h ) +if ( EXISTS ${_VERSION_FILE} ) + file ( STRINGS ${_VERSION_FILE} _VERSION_LINE REGEX "define[ ]+QWT_VERSION_STR" ) + if ( _VERSION_LINE ) + string ( REGEX REPLACE ".*define[ ]+QWT_VERSION_STR[ ]+\"(.*)\".*" "\\1" QWT_VERSION_STRING "${_VERSION_LINE}" ) + string ( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1" QWT_MAJOR_VERSION "${QWT_VERSION_STRING}" ) + string ( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\2" QWT_MINOR_VERSION "${QWT_VERSION_STRING}" ) + string ( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\3" QWT_PATCH_VERSION "${QWT_VERSION_STRING}" ) + endif () +endif () + + +# check version +set ( _QWT_VERSION_MATCH TRUE ) +if ( Qwt_FIND_VERSION AND QWT_VERSION_STRING ) + if ( Qwt_FIND_VERSION_EXACT ) + if ( NOT Qwt_FIND_VERSION VERSION_EQUAL QWT_VERSION_STRING ) + set ( _QWT_VERSION_MATCH FALSE ) + endif () + else () + if ( QWT_VERSION_STRING VERSION_LESS Qwt_FIND_VERSION ) + set ( _QWT_VERSION_MATCH FALSE ) + endif () + endif () +endif () + + +find_library ( QWT_LIBRARY + NAMES qwt qwt-qt3 qwt-qt4 qwt-qt5 + HINTS ${QT_LIBRARY_DIR} +) + +set ( QWT_LIBRARIES ${QWT_LIBRARY} ) + + +# try to guess root dir from include dir +if ( QWT_INCLUDE_DIR ) + string ( REGEX REPLACE "(.*)/include.*" "\\1" QWT_ROOT_DIR ${QWT_INCLUDE_DIR} ) +# try to guess root dir from library dir +elseif ( QWT_LIBRARY ) + string ( REGEX REPLACE "(.*)/lib[/|32|64].*" "\\1" QWT_ROOT_DIR ${QWT_LIBRARY} ) +endif () + + +# handle the QUIETLY and REQUIRED arguments +include ( FindPackageHandleStandardArgs ) +if ( CMAKE_VERSION LESS 2.8.3 ) + find_package_handle_standard_args( Qwt DEFAULT_MSG QWT_LIBRARY QWT_INCLUDE_DIR _QWT_VERSION_MATCH ) +else () + find_package_handle_standard_args( Qwt REQUIRED_VARS QWT_LIBRARY QWT_INCLUDE_DIR _QWT_VERSION_MATCH VERSION_VAR QWT_VERSION_STRING ) +endif () + + +mark_as_advanced ( + QWT_LIBRARY + QWT_LIBRARIES + QWT_INCLUDE_DIR + QWT_INCLUDE_DIRS + QWT_MAJOR_VERSION + QWT_MINOR_VERSION + QWT_PATCH_VERSION + QWT_VERSION_STRING + QWT_ROOT_DIR +) \ No newline at end of file diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..f6f09621035b077ceb459ef8bd30aefa0ce53039 --- /dev/null +++ b/core/CMakeLists.txt @@ -0,0 +1,26 @@ + +find_package(Qt5Widgets REQUIRED) + +set(SRCS + BuiltinOpSet.cpp + BuiltinOpSet.h + ImgParam.cpp + ImgParam.h + Input.h + IntParam.cpp + IntParam.h + Operation.cpp + Operation.h + OpSet.h + Parameter.h + Plugin.cpp + Plugin.h + PlugOperation.cpp + PlugOperation.h +) +add_library(eiimage_core ${SRCS}) +target_link_libraries(eiimage_core + GenericInterface + ImageIn + Qt5::Widgets +) diff --git a/lib/detiq-t b/lib/detiq-t index f2aed64b27a547bced4298c261873dc09572281a..21450774c2b26850783e0d0d88f98543c51611b8 160000 --- a/lib/detiq-t +++ b/lib/detiq-t @@ -1 +1 @@ -Subproject commit f2aed64b27a547bced4298c261873dc09572281a +Subproject commit 21450774c2b26850783e0d0d88f98543c51611b8 diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..2a66c3708869d1c6821c789f4dd6e19682572ba6 --- /dev/null +++ b/plugins/CMakeLists.txt @@ -0,0 +1,8 @@ + +include_directories(../core) + +set(SRCS + plugin.cpp + Segmentation/segmentation.cpp +) +add_library(eiimage_plugins ${SRCS})