00001 #ifndef __IMNonLinearLaplaceEdgeOp__ 00002 #define __IMNonLinearLaplaceEdgeOp__ 00003 00004 00005 00039 #include <stdio.h> 00040 00041 #include "ILargeMorphologicalOp.hpp" 00042 00043 #include "IMZeroCrossingOp.hpp" 00044 #include "ILargeDynamicLeeDetectorOp.hpp" 00045 00046 class IMNonLinearLaplaceEdgeOp : public ILargeMorphologicalOp 00047 { 00048 protected: 00049 00050 IMZeroCrossingOp zeroCrossing; // min 00051 ILargeDynamicLeeDetectorOp edgeStrength; // max 00052 00053 protected: 00054 00055 virtual int operation(AnImage* src, int channel, int i, int j){return 0;} 00056 00057 public: 00058 00059 IMNonLinearLaplaceEdgeOp(){} 00060 IMNonLinearLaplaceEdgeOp(StructuredElement* aStructuredElement); 00061 virtual ~IMNonLinearLaplaceEdgeOp(){} 00062 00063 virtual void setIterations(int iter){} 00064 00065 virtual void setLuminanceFlag(bool autoGrey=true) 00066 { 00067 AnImageOp::setLuminanceFlag(autoGrey); 00068 zeroCrossing.setLuminanceFlag(autoGrey); 00069 edgeStrength.setLuminanceFlag(autoGrey); 00070 } 00071 00072 virtual void setStructuredElement(StructuredElement* aStructuredElement); 00073 00074 // output is short to support <0 00075 virtual AnImage* filter(AnImage* src, AnImage* dest=0); 00076 00077 virtual void report(FILE* file){} 00078 }; 00079 00080 00081 #endif