Incorporates functions for image preprocessing, filtering and image recognition. The package takes advantage of 'RcppArmadillo' to speed up computationally intensive functions. The histogram of oriented gradients descriptor is a modification of the 'findHOGFeatures' function of the 'SimpleCV' computer vision platform, the average_hash(), dhash() and phash() functions are based on the 'ImageHash' python library. The Gabor Feature Extraction functions are based on 'Matlab' code of the paper, "CloudID: Trustworthy cloud-based and cross-enterprise biometric identification" by M. Haghighat, S. Zonouz, M. Abdel-Mottaleb, Expert Systems with Applications, vol. 42, no. 21, pp. 7905-7916, 2015,
The OpenImageR package is an image processing library. It includes functions for image preprocessing, filtering and image recognition. More details on the functionality of OpenImageR can be found in the first, second and third blog-posts, and in the package Documentation.
UPDATE 06-11-2018
As of version 1.1.2 the OpenImageR package allows R package maintainers to perform linking between packages at a C++ code (Rcpp) level. This means that the Rcpp functions of the OpenImageR package can be called in the C++ files of another package. In the next lines I'll give detailed explanations on how this can be done:
Assumming that an R package ('PackageA') calls one of the OpenImageR Rcpp functions. Then the maintainer of 'PackageA' has to :
install.packages("OpenImageR")
or download the latest version from Github using the devtools package,
devtools::install_github('mlampros/OpenImageR')
LinkingTo: OpenImageR
# include <RcppArmadillo.h># include <OpenImageRheader.h>// [[Rcpp::depends("RcppArmadillo")]]// [[Rcpp::depends(OpenImageR)]]// [[Rcpp::plugins(cpp11)]]
The available C++ classes (Utility_functions, Gabor_Features, Gabor_Features_Rcpp, HoG_features, Image_Hashing) can be found in the inst/include/OpenImageRheader.h file.
A complete minimal example would be :
# include <RcppArmadillo.h># include <OpenImageRheader.h>// [[Rcpp::depends("RcppArmadillo")]]// [[Rcpp::depends(OpenImageR)]]// [[Rcpp::plugins(cpp11)]] // [[Rcpp::export]]arma::mat rgb_2gray(arma::cube RGB_image) { oimageR::Utility_functions UTLF; return UTLF.rgb_2gray(RGB_image);}
Then, by opening an R file a user can call the rgb_2gray function using,
Rcpp::sourceCpp('example.cpp') # assuming that the previous Rcpp code is included in 'example.cpp' set.seed(1)im_rgb = array(runif(30000), c(100, 100, 3)) im_grey = rgb_2gray(im_rgb) str(im_grey)
Use the following link to report bugs/issues,
I added the GaborFeatureExtract R6 class, which as the name suggests extracts Gabor features from images (I updated the documentation and Vignettes too)
I added the DARMA_64BIT_WORD flag in the Makevars file to allow the package processing big datasets
I removed the threads parameter from the Augmentation function as there is no significant improvement (in execution speed) between a threaded and a non-threaded version. I modified the OpenMP clauses of the .cpp files to address the ASAN errors.
I fixed a bug in the translation_mat function of the utils.cpp source file (https://github.com/mlampros/OpenImageR/issues/6 and https://github.com/mlampros/OpenImageR/issues/7). Moreover, I added the padded_value parameter in the translation and Augmentation R functions to allow the user to adjust the shifted values ( in case that shift_rows or shift_cols is not 0 ). The padded_value parameter can take either a numeric value or a numeric vector depending on the dimensions of the image. Previously, the shifted values were replaced by default with 0.
I fixed a bug in the dhash function according to the Changelog of the imagehash python library. Moreover, I added a function to round float numbers in the image_hashing.cpp source file, otherwise by creating hash values using the bilinear interpolation method the returned values are incorrect.
I modified the R script files to accept extension types similar to .tiff such as .tif, .TIFF or .TIF
I modified the Augmentation function to correct an issue which occured due to the zca_comps parameter
I did OpenMP optional for all cpp files due to the fact that the OSX OS does not currently support openMP ( r-devel-osx-x86_64-clang )
I removed the floor() function from the lines 45, 46 of the hog_features.cpp, because otherwise Solaris OS throws the following error:
I can not fix the following error in the hog_features.cpp file for the r-oldrel-windows platform as it has either to do with the RcppArmadillo version or is GCC specific,
Platforms, which support newer versions of GCC (GCC >= 4.9.0) and a recent version of RcppArmadillo (>= 0.7) do not throw such an error.
I modified the Makevars files, so that OpenImageR can be installed error-free in the following OS's,