| VRS - The Virtual Rendering System |
| version 3.3 |
00001 /********************************************************************** 00002 VRS - The Virtual Rendering System 00003 Copyright (C) 2001 Computer Graphics Systems Group at the 00004 Hasso-Plattner-Institute, Potsdam, Germany. 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Lesser General Public 00007 License as published by the Free Software Foundation; either 00008 version 2.1 of the License, or (at your option) any later version. 00009 This library is distributed in the hope that it will be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 See the GNU Lesser General Public License for more details. 00013 You should have received a copy of the GNU Lesser+ General Public 00014 License along with this library; if not, write to the FreeSoftware 00015 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA, 02111-1307, USA. 00016 **********************************************************************/ 00017 // $Id: imageconvolutionkernel.h 6014 2007-08-09 07:51:16Z Konstantin_Baumann $ 00018 // $Date: 2007-08-09 09:51:16 +0200 (Thu, 09 Aug 2007) $ 00019 // $Revision: 6014 $ 00020 // $State$ 00021 // $Author: Konstantin_Baumann $ 00022 // 00023 // $Log$ 00024 // Revision 1.17 2005/01/03 01:43:08 klimetschek 00025 // - modified win32 project layout, splitted vrs.vcproj into vrs_container, vrs_core, vrs_sg, vrs_image, vrs_opengl and vrs_io 00026 // - removed vrs.vcproj 00027 // minor things: 00028 // - added all glutexamples to vrs4glut.sln 00029 // - fixed some problems in glutexamples 00030 // - removed all project references from all VS projects (using solution wide project dependencies instead) 00031 // 00032 // Revision 1.16 2004/11/03 11:20:07 saar 00033 // Class comment changed (Doxygen style) 00034 // 00035 // Revision 1.15 2004/03/12 16:28:40 baumann 00036 // macros VRS_NAMESPACE_BEGIN/_END expanded and removed 00037 // 00038 // Revision 1.14 2004/01/19 11:43:58 baumann 00039 // serialization mechanism improved 00040 // 00041 // Revision 1.13 2004/01/19 07:28:04 baumann 00042 // serialization mechanism improved 00043 // 00044 // Revision 1.12 2003/11/07 14:19:24 kirsch 00045 // removed leading underscore from include guards 00046 // 00047 // Revision 1.11 2002/10/29 10:32:52 baumann 00048 // macros VRS_CLASSNAME_* and VRS_IMPL_TYPEINFO_* removed 00049 // 00050 // Revision 1.10 2002/03/03 21:44:25 kosta 00051 // VRS_TYPEINFO-macro rewritten 00052 // 00053 // Revision 1.9 2002/02/19 10:34:15 kosta 00054 // undone all changes since 2002-02-15 00055 // 00056 // Revision 1.6 2002/01/15 16:25:54 kosta 00057 // macros rewritten for a better namespace support 00058 // 00059 // Revision 1.5 2001/11/13 16:36:31 kirsch 00060 // changed line feed to unix style (removed control-M) 00061 // 00062 // Revision 1.4 2001/11/12 15:38:46 kirsch 00063 // GCC fix: added newline at the end of file 00064 // 00065 // Revision 1.3 2001/07/26 13:09:08 nienhaus 00066 // new standard kernel added 00067 // 00068 // Revision 1.2 2001/07/13 08:57:42 kersting 00069 // enum name changes 00070 // 00071 // Revision 1.1.1.1 2001/06/08 08:09:21 kirsch 00072 // imported alpha-version by olli 00073 // 00074 00075 00076 #ifndef VRS_IMAGE_IMAGECONVOLUTIONKERNEL_H 00077 #define VRS_IMAGE_IMAGECONVOLUTIONKERNEL_H 00078 00079 #include <vrs/sharedobj.h> 00080 00081 namespace VRS { 00082 00084 class VRS_CORE_API ImageConvolutionKernel : public SharedObj { 00085 public: 00086 enum ConvComb { 00087 CONV_SUM, // Sums the results 00088 CONV_SUMSQ, // Sums the squares of the results 00089 CONV_SUMSQROOT, // Sums the squares of the results and then takes the square root. 00090 CONV_MAX, // Takes the maximum of the results. 00091 CONV_MIN}; // Takes the minimum of the results. 00092 VRS_SERIALIZABLE_CLASS_ENUM(ConvComb); 00093 00094 ImageConvolutionKernel( 00095 int width, int height, 00096 ConvComb combine = ImageConvolutionKernel::CONV_SUM, 00097 int anchorX = 0, 00098 int anchorY = 0, 00099 int bitshift = 0); 00106 int width() const; 00107 int height() const; 00108 00109 int anchorX() const; 00110 int anchorY() const; 00114 ImageConvolutionKernel::ConvComb combinationMethod() const; 00116 00117 int bitShift() const; 00118 00119 void setCoefficient(int column, int row, int value); 00120 int getCoefficient(int column, int row) const; 00121 const int* getCoefficients() const; 00123 00124 static const ImageConvolutionKernel* prewitt3x3v(); 00125 static const ImageConvolutionKernel* prewitt3x3h(); 00126 static const ImageConvolutionKernel* sobel3x3v(); 00127 static const ImageConvolutionKernel* sobel3x3h(); 00128 static const ImageConvolutionKernel* laplacian3x3(); 00129 static const ImageConvolutionKernel* laplacian5x5(); 00130 static const ImageConvolutionKernel* gaussian3x3(); 00131 static const ImageConvolutionKernel* gaussian5x5(); 00132 static const ImageConvolutionKernel* hipass3x3(); 00133 static const ImageConvolutionKernel* hipass5x5(); 00134 static const ImageConvolutionKernel* sharpen3x3(); 00135 static const ImageConvolutionKernel* lighten3x3(); 00136 static const ImageConvolutionKernel* darken3x3(); 00137 00138 VRS_TYPEINFO(ImageConvolutionKernel, SharedObj); 00139 00140 private: 00141 ImageConvolutionKernel(int width, int height, ConvComb combine, 00142 int anchorX, int anchorY, int bitshift, 00143 int* data); 00144 00145 int width_; 00146 int height_; 00147 int anchorX_; 00148 int anchorY_; 00149 int bitShift_; 00150 int combinationMethod_; 00151 int* data_; 00152 }; 00153 00154 inline int ImageConvolutionKernel::width() const { return width_; } 00155 inline int ImageConvolutionKernel::height() const { return height_; } 00156 inline int ImageConvolutionKernel::anchorX() const { return anchorX_; } 00157 inline int ImageConvolutionKernel::anchorY() const { return anchorY_; } 00158 inline int ImageConvolutionKernel::bitShift() const { return bitShift_; } 00159 00160 } // namespace VRS 00161 00162 #endif // VRS_IMAGE_IMAGECONVOLUTIONKERNEL_H