AlbumShaper  1.0a3
edgeDetect.h
Go to the documentation of this file.
1 //==============================================
2 // copyright : (C) 2003-2005 by Will Stokes
3 //==============================================
4 // This program is free software; you can redistribute it
5 // and/or modify it under the terms of the GNU General
6 // Public License as published by the Free Software
7 // Foundation; either version 2 of the License, or
8 // (at your option) any later version.
9 //==============================================
10 
11 #ifndef BACKEND_MANIPULATIONS_EDGEDETECTOR_H
12 #define BACKEND_MANIPULATIONS_EDGEDETECTOR_H
13 
14 //--------------------
15 //forward declarations
16 //--------------------
17 class QImage;
18 
19 //--------------------
20 typedef struct
21 {
22  float ESF;
23  int direction;
24 } LUTentry;
25 //--------------------
26 typedef struct
27 {
30 
31  int edgeMagHistogram[256];
33  int numPixels;
34 
35  //normalized inputs for fuzzy logic process
36  float meanMode;
37  float mode;
38  float pixelCount;
39 
40  float beta;
42 
43 } PixelCluster;
44 //--------------------
46 {
47 public:
48  EdgeDetect( QImage* image );
49  ~EdgeDetect();
50  int getNumClusters();
52  int* getSmoothHist();
53  int* getPeaks();
54  QImage* getEdgeImage();
55  int* getClusterMap();
56  //----------------------
57 private:
59 
60  //construct a lookup table indexed by computed GSLC codes for applying N(on) M(aximum) S(uppression)
61  void constructGSLClut();
62 
63  //iterate over each pixel computing luminance values for lum map and update lum histogram
65 
66  //fill smooth lum histogram using lum histogram
67  void smoothLumHistogram();
68 
69  //compute edge magnitude, and GSLC for each pixel
71 
72  //get pixel luminance for an abritrary pixel, clamping of coordinates performed automatically
73  int pixelLum(int x, int y);
74 
75  //determine pixel clusters using smooth lum histogram
76  void findPixelClusters();
77 
78  //compute cluster stats by iterating over image luminance map
80 
81  //compute edge thresholds for each cluster using 18-rule fuzzy logic approach
83 
84  //replace image with blurred-normalized edge image
85  void constructEdgeImage();
86 
87  void deallocateObjects();
88  //----------------------
89  //GSLC LUT table
90  LUTentry LUT[256];
91 
92  //loaded image
93  QImage* image;
94 
96  int lumHist[256];
97  int smoothLumHist[256];
98 
99  //cluster peaks
100  int clusterPeaks[256];
101 
102  //luminance map
103  int* lumMap;
104 
105  //edge magnitude map
106  float* edgeMagMap;
107 
108  //GSLC map
109  int* GSLCmap;
110 
111  //pixel clusters
114 
115  //min and max # of pixels in clusters
117 //----------------------
118 };
119 //======================
120 
121 #endif //BACKEND_MANIPULATIONS_EDGEDETECTOR_H
int minClusterSize
Definition: edgeDetect.h:116
int * getClusterMap()
Definition: edgeDetect.cpp:244
int smoothLumHist[256]
Definition: edgeDetect.h:97
float pixelCount
Definition: edgeDetect.h:38
int direction
Definition: edgeDetect.h:23
int maxLuminance
Definition: edgeDetect.h:29
int * getPeaks()
Definition: edgeDetect.cpp:233
int lumHist[256]
luminosity and smooth luminosity histograms
Definition: edgeDetect.h:96
PixelCluster * clusters
Definition: edgeDetect.h:113
int clusterPeaks[256]
Definition: edgeDetect.h:100
void findPixelClusters()
Definition: edgeDetect.cpp:432
float ESF
Definition: edgeDetect.h:22
float * edgeMagMap
Definition: edgeDetect.h:106
void deallocateObjects()
Definition: edgeDetect.cpp:966
EdgeDetect(QImage *image)
Definition: edgeDetect.cpp:195
int * lumMap
Definition: edgeDetect.h:103
void fillLumMapAndLumHistogram()
Definition: edgeDetect.cpp:294
QImage * image
Definition: edgeDetect.h:93
float beta
Definition: edgeDetect.h:40
PixelCluster * getClusters()
Definition: edgeDetect.cpp:230
int minLuminance
Definition: edgeDetect.h:28
void constructGSLClut()
Definition: edgeDetect.cpp:974
void allocateAndInitObjects()
Definition: edgeDetect.cpp:267
void computeClusterStatistics()
Definition: edgeDetect.cpp:549
int pixelLum(int x, int y)
Definition: edgeDetect.cpp:425
float mode
Definition: edgeDetect.h:37
QImage * getEdgeImage()
Definition: edgeDetect.cpp:239
LUTentry LUT[256]
Definition: edgeDetect.h:90
int * getSmoothHist()
Definition: edgeDetect.cpp:236
void smoothLumHistogram()
Definition: edgeDetect.cpp:318
int numClusters
Definition: edgeDetect.h:112
int maxClusterSize
Definition: edgeDetect.h:116
void computeClusterThresholds()
Definition: edgeDetect.cpp:621
int getNumClusters()
Definition: edgeDetect.cpp:227
float edgeThreshold
Definition: edgeDetect.h:41
float totalEdgeMagnitude
Definition: edgeDetect.h:32
float meanMode
Definition: edgeDetect.h:36
void constructEdgeImage()
Definition: edgeDetect.cpp:862
void computeEdgeMagAndGSLCmaps()
Definition: edgeDetect.cpp:344
int * GSLCmap
Definition: edgeDetect.h:109