Commit 2e58b63537d6c4d5487dcf808eae33ff6498359d
1 parent
0eadbbd1
remove integral
Showing
3 changed files
with
0 additions
and
227 deletions
openbr/plugins/imgproc/integral.cpp deleted
| 1 | -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * | ||
| 2 | - * Copyright 2012 The MITRE Corporation * | ||
| 3 | - * * | ||
| 4 | - * Licensed under the Apache License, Version 2.0 (the "License"); * | ||
| 5 | - * you may not use this file except in compliance with the License. * | ||
| 6 | - * You may obtain a copy of the License at * | ||
| 7 | - * * | ||
| 8 | - * http://www.apache.org/licenses/LICENSE-2.0 * | ||
| 9 | - * * | ||
| 10 | - * Unless required by applicable law or agreed to in writing, software * | ||
| 11 | - * distributed under the License is distributed on an "AS IS" BASIS, * | ||
| 12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * | ||
| 13 | - * See the License for the specific language governing permissions and * | ||
| 14 | - * limitations under the License. * | ||
| 15 | - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ | ||
| 16 | - | ||
| 17 | -#include <opencv2/imgproc/imgproc.hpp> | ||
| 18 | - | ||
| 19 | -#include <openbr/plugins/openbr_internal.h> | ||
| 20 | - | ||
| 21 | -namespace br | ||
| 22 | -{ | ||
| 23 | - | ||
| 24 | -/*! | ||
| 25 | - * \ingroup transforms | ||
| 26 | - * \brief Computes integral image. | ||
| 27 | - * \author Josh Klontz \cite jklontz | ||
| 28 | - */ | ||
| 29 | -class IntegralTransform : public UntrainableTransform | ||
| 30 | -{ | ||
| 31 | - Q_OBJECT | ||
| 32 | - | ||
| 33 | - void project(const Template &src, Template &dst) const | ||
| 34 | - { | ||
| 35 | - cv::integral(src, dst); | ||
| 36 | - } | ||
| 37 | -}; | ||
| 38 | - | ||
| 39 | -BR_REGISTER(Transform, IntegralTransform) | ||
| 40 | - | ||
| 41 | -} // namespace br | ||
| 42 | - | ||
| 43 | -#include "imgproc/integral.moc" |
openbr/plugins/imgproc/integralhist.cpp deleted
| 1 | -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * | ||
| 2 | - * Copyright 2012 The MITRE Corporation * | ||
| 3 | - * * | ||
| 4 | - * Licensed under the Apache License, Version 2.0 (the "License"); * | ||
| 5 | - * you may not use this file except in compliance with the License. * | ||
| 6 | - * You may obtain a copy of the License at * | ||
| 7 | - * * | ||
| 8 | - * http://www.apache.org/licenses/LICENSE-2.0 * | ||
| 9 | - * * | ||
| 10 | - * Unless required by applicable law or agreed to in writing, software * | ||
| 11 | - * distributed under the License is distributed on an "AS IS" BASIS, * | ||
| 12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * | ||
| 13 | - * See the License for the specific language governing permissions and * | ||
| 14 | - * limitations under the License. * | ||
| 15 | - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ | ||
| 16 | - | ||
| 17 | -#include <openbr/plugins/openbr_internal.h> | ||
| 18 | - | ||
| 19 | -using namespace cv; | ||
| 20 | - | ||
| 21 | -namespace br | ||
| 22 | -{ | ||
| 23 | - | ||
| 24 | -/*! | ||
| 25 | - * \ingroup transforms | ||
| 26 | - * \brief An integral histogram | ||
| 27 | - * \author Josh Klontz \cite jklontz | ||
| 28 | - */ | ||
| 29 | -class IntegralHistTransform : public UntrainableTransform | ||
| 30 | -{ | ||
| 31 | - Q_OBJECT | ||
| 32 | - Q_PROPERTY(int bins READ get_bins WRITE set_bins RESET reset_bins STORED false) | ||
| 33 | - Q_PROPERTY(int radius READ get_radius WRITE set_radius RESET reset_radius STORED false) | ||
| 34 | - BR_PROPERTY(int, bins, 256) | ||
| 35 | - BR_PROPERTY(int, radius, 16) | ||
| 36 | - | ||
| 37 | - void project(const Template &src, Template &dst) const | ||
| 38 | - { | ||
| 39 | - const Mat &m = src.m(); | ||
| 40 | - if (m.type() != CV_8UC1) qFatal("IntegralHist requires 8UC1 matrices."); | ||
| 41 | - | ||
| 42 | - Mat integral(m.rows/radius+1, (m.cols/radius+1)*bins, CV_32SC1); | ||
| 43 | - integral.setTo(0); | ||
| 44 | - for (int i=1; i<integral.rows; i++) { | ||
| 45 | - for (int j=1; j<integral.cols; j+=bins) { | ||
| 46 | - for (int k=0; k<bins; k++) integral.at<qint32>(i, j+k) += integral.at<qint32>(i-1, j +k); | ||
| 47 | - for (int k=0; k<bins; k++) integral.at<qint32>(i, j+k) += integral.at<qint32>(i , j-bins+k); | ||
| 48 | - for (int k=0; k<bins; k++) integral.at<qint32>(i, j+k) -= integral.at<qint32>(i-1, j-bins+k); | ||
| 49 | - for (int k=0; k<radius; k++) | ||
| 50 | - for (int l=0; l<radius; l++) | ||
| 51 | - integral.at<qint32>(i, j+m.at<quint8>((i-1)*radius+k,(j/bins-1)*radius+l))++; | ||
| 52 | - } | ||
| 53 | - } | ||
| 54 | - dst = integral; | ||
| 55 | - } | ||
| 56 | -}; | ||
| 57 | - | ||
| 58 | -BR_REGISTER(Transform, IntegralHistTransform) | ||
| 59 | - | ||
| 60 | -} // namespace br | ||
| 61 | - | ||
| 62 | -#include "imgproc/integralhist.moc" |
openbr/plugins/imgproc/integralsampler.cpp deleted
| 1 | -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * | ||
| 2 | - * Copyright 2012 The MITRE Corporation * | ||
| 3 | - * * | ||
| 4 | - * Licensed under the Apache License, Version 2.0 (the "License"); * | ||
| 5 | - * you may not use this file except in compliance with the License. * | ||
| 6 | - * You may obtain a copy of the License at * | ||
| 7 | - * * | ||
| 8 | - * http://www.apache.org/licenses/LICENSE-2.0 * | ||
| 9 | - * * | ||
| 10 | - * Unless required by applicable law or agreed to in writing, software * | ||
| 11 | - * distributed under the License is distributed on an "AS IS" BASIS, * | ||
| 12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * | ||
| 13 | - * See the License for the specific language governing permissions and * | ||
| 14 | - * limitations under the License. * | ||
| 15 | - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ | ||
| 16 | - | ||
| 17 | -#include <Eigen/Dense> | ||
| 18 | - | ||
| 19 | -#include <openbr/plugins/openbr_internal.h> | ||
| 20 | - | ||
| 21 | -using namespace cv; | ||
| 22 | - | ||
| 23 | -namespace br | ||
| 24 | -{ | ||
| 25 | - | ||
| 26 | -/*! | ||
| 27 | - * \ingroup transforms | ||
| 28 | - * \brief Sliding window feature extraction from a multi-channel integral image. | ||
| 29 | - * \author Josh Klontz \cite jklontz | ||
| 30 | - */ | ||
| 31 | -class IntegralSamplerTransform : public UntrainableTransform | ||
| 32 | -{ | ||
| 33 | - Q_OBJECT | ||
| 34 | - Q_PROPERTY(int scales READ get_scales WRITE set_scales RESET reset_scales STORED false) | ||
| 35 | - Q_PROPERTY(float scaleFactor READ get_scaleFactor WRITE set_scaleFactor RESET reset_scaleFactor STORED false) | ||
| 36 | - Q_PROPERTY(float stepFactor READ get_stepFactor WRITE set_stepFactor RESET reset_stepFactor STORED false) | ||
| 37 | - Q_PROPERTY(int minSize READ get_minSize WRITE set_minSize RESET reset_minSize STORED false) | ||
| 38 | - Q_PROPERTY(bool secondOrder READ get_secondOrder WRITE set_secondOrder RESET reset_secondOrder STORED false) | ||
| 39 | - BR_PROPERTY(int, scales, 6) | ||
| 40 | - BR_PROPERTY(float, scaleFactor, 2) | ||
| 41 | - BR_PROPERTY(float, stepFactor, 0.75) | ||
| 42 | - BR_PROPERTY(int, minSize, 8) | ||
| 43 | - BR_PROPERTY(bool, secondOrder, false) | ||
| 44 | - | ||
| 45 | - void project(const Template &src, Template &dst) const | ||
| 46 | - { | ||
| 47 | - typedef Eigen::Map< const Eigen::Matrix<qint32,Eigen::Dynamic,1> > InputDescriptor; | ||
| 48 | - typedef Eigen::Map< const Eigen::Matrix<float,Eigen::Dynamic,1> > SecondOrderInputDescriptor; | ||
| 49 | - typedef Eigen::Map< Eigen::Matrix<float,Eigen::Dynamic,1> > OutputDescriptor; | ||
| 50 | - | ||
| 51 | - const Mat &m = src.m(); | ||
| 52 | - if (m.depth() != CV_32S) qFatal("Expected CV_32S matrix depth."); | ||
| 53 | - const int channels = m.channels(); | ||
| 54 | - const int rowStep = channels * m.cols; | ||
| 55 | - | ||
| 56 | - int descriptors = 0; | ||
| 57 | - float idealSize = min(m.rows, m.cols)-1; | ||
| 58 | - for (int scale=0; scale<scales; scale++) { | ||
| 59 | - const int currentSize(idealSize); | ||
| 60 | - const int numDown = 1+(m.rows-currentSize-1)/int(idealSize*stepFactor); | ||
| 61 | - const int numAcross = 1+(m.cols-currentSize-1)/int(idealSize*stepFactor); | ||
| 62 | - descriptors += numDown*numAcross; | ||
| 63 | - if (secondOrder) descriptors += numDown*(numAcross-1) + (numDown-1)*numAcross; | ||
| 64 | - idealSize /= scaleFactor; | ||
| 65 | - if (idealSize < minSize) break; | ||
| 66 | - } | ||
| 67 | - Mat n(descriptors, channels, CV_32FC1); | ||
| 68 | - | ||
| 69 | - const qint32 *dataIn = (qint32*)m.data; | ||
| 70 | - float *dataOut = (float*)n.data; | ||
| 71 | - idealSize = min(m.rows, m.cols)-1; | ||
| 72 | - int index = 0; | ||
| 73 | - for (int scale=0; scale<scales; scale++) { | ||
| 74 | - const int currentSize(idealSize); | ||
| 75 | - const int currentStep(idealSize*stepFactor); | ||
| 76 | - for (int i=currentSize; i<m.rows; i+=currentStep) { | ||
| 77 | - for (int j=currentSize; j<m.cols; j+=currentStep) { | ||
| 78 | - InputDescriptor a(dataIn+((i-currentSize)*rowStep+(j-currentSize)*channels), channels, 1); | ||
| 79 | - InputDescriptor b(dataIn+((i-currentSize)*rowStep+ j *channels), channels, 1); | ||
| 80 | - InputDescriptor c(dataIn+(i *rowStep+(j-currentSize)*channels), channels, 1); | ||
| 81 | - InputDescriptor d(dataIn+(i *rowStep+ j *channels), channels, 1); | ||
| 82 | - OutputDescriptor y(dataOut+(index*channels), channels, 1); | ||
| 83 | - y = (d-b-c+a).cast<float>()/(currentSize*currentSize); | ||
| 84 | - index++; | ||
| 85 | - } | ||
| 86 | - } | ||
| 87 | - if (secondOrder) { | ||
| 88 | - const int numDown = 1+(m.rows-currentSize-1)/currentStep; | ||
| 89 | - const int numAcross = 1+(m.cols-currentSize-1)/currentStep; | ||
| 90 | - const float *dataIn = n.ptr<float>(index - numDown*numAcross); | ||
| 91 | - for (int i=0; i<numDown; i++) { | ||
| 92 | - for (int j=0; j<numAcross; j++) { | ||
| 93 | - SecondOrderInputDescriptor a(dataIn + (i*numAcross+j)*channels, channels, 1); | ||
| 94 | - if (j < numAcross-1) { | ||
| 95 | - OutputDescriptor y(dataOut+(index*channels), channels, 1); | ||
| 96 | - y = a - SecondOrderInputDescriptor(dataIn + (i*numAcross+j+1)*channels, channels, 1); | ||
| 97 | - index++; | ||
| 98 | - } | ||
| 99 | - if (i < numDown-1) { | ||
| 100 | - OutputDescriptor y(dataOut+(index*channels), channels, 1); | ||
| 101 | - y = a - SecondOrderInputDescriptor(dataIn + ((i+1)*numAcross+j)*channels, channels, 1); | ||
| 102 | - index++; | ||
| 103 | - } | ||
| 104 | - } | ||
| 105 | - } | ||
| 106 | - } | ||
| 107 | - idealSize /= scaleFactor; | ||
| 108 | - if (idealSize < minSize) break; | ||
| 109 | - } | ||
| 110 | - | ||
| 111 | - if (descriptors != index) | ||
| 112 | - qFatal("Allocated %d descriptors but computed %d.", descriptors, index); | ||
| 113 | - | ||
| 114 | - dst.m() = n; | ||
| 115 | - } | ||
| 116 | -}; | ||
| 117 | - | ||
| 118 | -BR_REGISTER(Transform, IntegralSamplerTransform) | ||
| 119 | - | ||
| 120 | -} // namespace br | ||
| 121 | - | ||
| 122 | -#include "imgproc/integralsampler.moc" |