00001 00029 #ifndef __VETLIB_VETFILTERNOISECHANNEL_H__ 00030 #define __VETLIB_VETFILTERNOISECHANNEL_H__ 00031 00032 #include "../vetDefs.h" 00033 #include "../vetFilter.h" 00034 00035 #include "../vetFrameYUV420.h" 00036 #include "../vetFrameRGB24.h" 00037 #include "../vetFrameT.h" 00038 00039 00040 00041 class vetFilterNoiseChannelParameters : public vetFilterParameters 00042 { 00043 public: 00044 00045 enum NOISEOPER{ ADDITIVE, MULTIPLICATIVE }; 00046 00047 protected: 00048 00049 NOISEOPER operation; 00050 bool normalized; 00051 float spread; 00052 int normalize_value; 00053 00054 friend class vetFilterNoiseChannel; 00055 00056 00057 public: 00058 00059 vetFilterNoiseChannelParameters(NOISEOPER mode = vetFilterNoiseChannelParameters::ADDITIVE); 00060 ~vetFilterNoiseChannelParameters() {} 00061 00062 void reset(); 00063 00064 void setOperation(NOISEOPER mode) { operation = mode; }; 00065 NOISEOPER getOperation() { return operation; }; 00066 00067 void setNormalisedNoise(bool value = true) { normalized = value; }; 00068 bool isNormalisedNoise() { return normalized; }; 00069 00070 void setNormalisedNoiseValue(int value) { normalize_value = value; }; 00071 int getNormalisedNoiseValue() { return normalize_value; }; 00072 00073 void setSpread(float value) { spread = value; }; 00074 float isSpread() { return spread; }; 00075 00076 00077 VETRESULT saveToStreamXML(FILE *fp); 00078 VETRESULT loadFromStreamXML(FILE *fp); 00079 00080 00081 }; 00082 00083 class vetFilterNoiseChannel : public vetFilter 00084 { 00085 00086 protected: 00087 00091 vetFilterNoiseChannelParameters* myParams; 00092 00093 vetInput* externalSource; 00094 00095 PixelRGB24 zeroRGB; 00096 PixelRGB24 oneRGB; 00097 00098 unsigned char zeroChar; 00099 unsigned char oneChar; 00100 00101 void generateNoise(vetFrameYUV420& img, unsigned char zero); 00102 void generateNoise(vetFrameRGB24& img, PixelRGB24 zero); 00103 void generateNoise(vetFrameT<unsigned char>& img, unsigned char zero); 00104 00105 public: 00106 00107 00112 vetFilterNoiseChannel(vetFilterNoiseChannelParameters* initParams = NULL); 00113 00117 ~vetFilterNoiseChannel(); 00118 00128 VETRESULT setParameters(vetFilterNoiseChannelParameters* initParams); 00129 00135 vetFilterNoiseChannelParameters& getParameters() { return *myParams; }; 00136 00146 VETRESULT setFilterParameters (vetFilterNoiseChannelParameters* initParams) 00147 { 00148 if (initParams == NULL) 00149 return setParameters(NULL); 00150 else 00151 return setParameters(static_cast<vetFilterNoiseChannelParameters*>(initParams)); 00152 }; 00153 00154 00155 00161 vetFilterParameters* getFilterParameters () 00162 { 00163 if (myParams == NULL) 00164 return NULL; 00165 else 00166 return static_cast<vetFilterParameters*>(myParams); 00167 }; 00168 00174 VETRESULT reset(); 00175 00176 00177 // take care of frame rate and neutral pixel (0 for add, 1 for mult) 00178 VETRESULT setNoiseSource(vetInput& frameSource); 00179 00180 //internal 00181 void resetNoiseSource(); 00182 00183 00184 00185 VETRESULT AddNoise(vetFrameYUV420& img); 00186 VETRESULT AddNoise(vetFrameRGB24& img); 00187 VETRESULT AddNoise(vetFrameT<unsigned char>& img); 00188 00189 VETRESULT MultiplyNoise(vetFrameYUV420& img); 00190 VETRESULT MultiplyNoise(vetFrameRGB24& img); 00191 VETRESULT MultiplyNoise(vetFrameT<unsigned char>& img); 00192 00193 00194 00195 00206 VETRESULT importFrom(vetFrameYUV420& img); 00207 00218 VETRESULT importFrom(vetFrameRGB24& img); 00219 00230 VETRESULT importFrom(vetFrameT<unsigned char>& img); 00231 00232 00233 00234 }; 00235 00236 00237 00238 #endif //__VETLIB_VETFILTERNOISECHANNEL_H__ 00239 00240 /* 00241 //TODO 00242 S/N // -> calcolo potenze! 00243 00244 */
1.4.4