00001 /***************************************************************************\ 00002 * Copyright (C) by University Paris-Est - MISS team 00003 * ConvolutionAverageOperator.hpp created in 10 2008. 00004 * Mail : biri@univ-mlv.fr 00005 * 00006 * This file is part of the OpenKraken-image. 00007 * 00008 * The OpenKraken-image is free software; you can redistribute it and/or modify 00009 * it under the terms of the GNU Lesser General Public License as published by 00010 * the Free Software Foundation; either version 3 of the License, or 00011 * (at your option) any later version. 00012 * 00013 * The OpenKraken-image is distributed in the hope that it will be useful, 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 * GNU Lesser General Public License for more details. 00017 * 00018 * You should have received a copy of the GNU Lesser General Public License 00019 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00020 * 00021 \***************************************************************************/ 00022 00023 /* 00024 * Anti-doublon 00025 */ 00026 #ifndef __OPENKN_IMAGE__CONVOLUTIONAVERAGEOPERATOR_HPP__ 00027 #define __OPENKN_IMAGE__CONVOLUTIONAVERAGEOPERATOR_HPP__ 00028 00029 00030 /* 00031 * External Includes 00032 */ 00033 00034 00035 /* 00036 * Internal Includes 00037 */ 00038 #include "ImageException.hpp" 00039 #include "ConvolutionOperator.hpp" 00040 00041 /* 00042 * Namespace 00043 */ 00044 namespace kn{ 00045 /* 00046 * Class definition 00047 */ 00051 class ConvolutionAverageOperator : public ConvolutionOperator { 00052 public: 00053 /* 00054 * Constructor & destructors 00055 */ 00059 inline ConvolutionAverageOperator(){ 00060 sum = 0.0; 00061 kernelSum = 0.0; 00062 } 00063 00067 inline ConvolutionAverageOperator(const ConvolutionAverageOperator& e) : ConvolutionOperator(e){ 00068 sum = e.sum; 00069 kernelSum = e.kernelSum; 00070 } 00074 inline ~ConvolutionAverageOperator(){} 00075 00076 protected: 00077 double sum; 00078 double kernelSum; 00079 00080 00081 00082 public: 00086 inline void initialize(){ 00087 sum = 0.0; 00088 kernelSum = 0.0; 00089 } 00090 00095 inline double getResult() { 00096 if(kernelSum == 0) 00097 throw ImageException("kernel sum null"); 00098 return sum/kernelSum; 00099 } 00100 00105 inline void operator()(double kernelValue, double imageValue){ 00106 sum+=kernelValue*imageValue; 00107 kernelSum+=kernelValue; 00108 } 00109 00113 inline ConvolutionAverageOperator* clone() const{ 00114 return new ConvolutionAverageOperator(*this); 00115 } 00116 }; 00117 00118 /* 00119 * End of Namespace 00120 */ 00121 } 00122 00123 /* 00124 * End of Anti-doublon 00125 */ 00126 #endif 00127
1.5.8