Try to smooth the images

This commit is contained in:
GuillBernard 2011-12-08 22:50:10 +01:00
commit 7acb222e09

View File

@ -17,35 +17,6 @@
using namespace cimg_library; using namespace cimg_library;
/*
double min(std::vector<Euclidean> vect) {
double min = (*vect.begin()).getDistance();
std::vector<Euclidean>::iterator it;
for (it = vect.begin() + 1; it != vect.end(); it++) {
if ((*it).getDistance() < min) {
min = (*it).getDistance();
}
}
return min;
}
double max(std::vector<Euclidean> vect) {
double max = (*vect.begin()).getDistance();
std::vector<Euclidean>::iterator it;
for (it = vect.begin() + 1; it != vect.end(); it++) {
if ((*it).getDistance() > max) {
max = (*it).getDistance();
}
}
return max;
}
*/
double Sum(CImg<unsigned char> img, int startedX, int startedY, int w) double Sum(CImg<unsigned char> img, int startedX, int startedY, int w)
{ {
double res = 0; double res = 0;
@ -182,8 +153,8 @@ int main()
for(unsigned int i = 0; i < vectEMax.size(); i++) { for(unsigned int i = 0; i < vectEMax.size(); i++) {
unsigned char max = 0; unsigned char max = 0;
for (int k = vectEMax[i].getX() - ((w[i] + 1) / 2); k < vectEMax[i].getX() + ((w[i] + 1) / 2); k++) { for (int k = vectEMax[i].getX() - ((w[i] - 1) / 2); k < vectEMax[i].getX() + ((w[i] + 1) / 2); k++) {
for (int l = vectEMax[i].getY() - ((w[i] + 1) / 2); l < vectEMax[i].getY() + ((w[i] + 1) / 2); l++) { for (int l = vectEMax[i].getY() - ((w[i] - 1) / 2); l < vectEMax[i].getY() + ((w[i] + 1) / 2); l++) {
if (imgSource(k, l) > max) { if (imgSource(k, l) > max) {
max = imgSource(k, l); max = imgSource(k, l);
} }
@ -194,8 +165,8 @@ int main()
for(unsigned int i = 0; i < vectEMin.size(); i++) { for(unsigned int i = 0; i < vectEMin.size(); i++) {
unsigned char min = 199; unsigned char min = 199;
for (int k = vectEMin[i].getX() - ((w[i] + 1) / 2); k < vectEMin[i].getX() + ((w[i] + 1) / 2); k++) { for (int k = vectEMin[i].getX() - ((w[i] - 1) / 2); k < vectEMin[i].getX() + ((w[i] + 1) / 2); k++) {
for (int l = vectEMin[i].getY() - ((w[i] + 1) / 2); l < vectEMin[i].getY() + ((w[i] + 1) / 2); l++) { for (int l = vectEMin[i].getY() - ((w[i] - 1) / 2); l < vectEMin[i].getY() + ((w[i] + 1) / 2); l++) {
if (imgSource(k, l) < min) { if (imgSource(k, l) < min) {
min = imgSource(k, l); min = imgSource(k, l);
} }
@ -208,8 +179,8 @@ int main()
// Calculate the upper envelope // Calculate the upper envelope
for(unsigned int i = 0; i < vectEMax.size(); i++) { for(unsigned int i = 0; i < vectEMax.size(); i++) {
for (int k = vectEMax[i].getX() - ((w[i] + 1) / 2); k < vectEMax[i].getX() + ((w[i] + 1) / 2); k++) { for (int k = vectEMax[i].getX() - ((w[i] - 1) / 2); k < vectEMax[i].getX() + ((w[i] + 1) / 2); k++) {
for (int l = vectEMax[i].getY() - ((w[i] + 1) / 2); l < vectEMax[i].getY() + ((w[i] + 1) / 2); l++) { for (int l = vectEMax[i].getY() - ((w[i] - 1) / 2); l < vectEMax[i].getY() + ((w[i] + 1) / 2); l++) {
if( (k == vectEMax[i].getX() && l == vectEMax[i].getY()) || imgMax(k, l) == 0 ) { if( (k == vectEMax[i].getX() && l == vectEMax[i].getY()) || imgMax(k, l) == 0 ) {
imgMax(k, l) = vectFilterMax[i]; imgMax(k, l) = vectFilterMax[i];
} }
@ -223,8 +194,8 @@ int main()
// Smooth of the upper envelope // Smooth of the upper envelope
for(unsigned int i = 0; i < vectEMax.size(); i++) { for(unsigned int i = 0; i < vectEMax.size(); i++) {
double sum = Sum(imgMax, vectEMax[i].getX() - ((w[i] + 1) / 2), vectEMax[i].getY() - ((w[i] + 1) / 2), w[i]); double sum = Sum(imgMax, vectEMax[i].getX() - ((w[i] + 1) / 2), vectEMax[i].getY() - ((w[i] + 1) / 2), w[i]);
for (int k = vectEMax[i].getX() - ((w[i] + 1) / 2); k < vectEMax[i].getX() + ((w[i] + 1) / 2); k++) { for (int k = vectEMax[i].getX() - ((w[i] - 1) / 2); k < vectEMax[i].getX() + ((w[i] + 1) / 2); k++) {
for (int l = vectEMax[i].getY() - ((w[i] + 1) / 2); l < vectEMax[i].getY() + ((w[i] + 1) / 2); l++) { for (int l = vectEMax[i].getY() - ((w[i] - 1) / 2); l < vectEMax[i].getY() + ((w[i] + 1) / 2); l++) {
newImgMax(k, l) = (1./(w[i]*w[i])) * sum; newImgMax(k, l) = (1./(w[i]*w[i])) * sum;
std::cout << ((1./(w[i]*w[i])) * sum) << std::endl; std::cout << ((1./(w[i]*w[i])) * sum) << std::endl;
} }
@ -235,8 +206,8 @@ int main()
// Calculate the lower envelope // Calculate the lower envelope
for(unsigned int i = 0; i < vectEMin.size(); i++) { for(unsigned int i = 0; i < vectEMin.size(); i++) {
for (int k = vectEMin[i].getX() - ((w[i] + 1) / 2); k < vectEMin[i].getX() + ((w[i] + 1) / 2); k++) { for (int k = vectEMin[i].getX() - ((w[i] - 1) / 2); k < vectEMin[i].getX() + ((w[i] + 1) / 2); k++) {
for (int l = vectEMin[i].getY() - ((w[i] + 1) / 2); l < vectEMin[i].getY() + ((w[i] + 1) / 2); l++) { for (int l = vectEMin[i].getY() - ((w[i] - 1) / 2); l < vectEMin[i].getY() + ((w[i] + 1) / 2); l++) {
if( (k == vectEMin[i].getX() && l == vectEMin[i].getY()) || imgMin(k, l) == 0 ) { if( (k == vectEMin[i].getX() && l == vectEMin[i].getY()) || imgMin(k, l) == 0 ) {
imgMin(k, l) = vectFilterMin[i]; imgMin(k, l) = vectFilterMin[i];
} }
@ -250,8 +221,8 @@ int main()
// Smooth of the lower envelope // Smooth of the lower envelope
for(unsigned int i = 0; i < vectEMax.size(); i++) { for(unsigned int i = 0; i < vectEMax.size(); i++) {
double sum = Sum(imgMin, vectEMin[i].getX() - ((w[i] + 1) / 2), vectEMin[i].getY() - ((w[i] + 1) / 2), w[i]); double sum = Sum(imgMin, vectEMin[i].getX() - ((w[i] + 1) / 2), vectEMin[i].getY() - ((w[i] + 1) / 2), w[i]);
for (int k = vectEMin[i].getX() - ((w[i] + 1) / 2); k < vectEMin[i].getX() + ((w[i] + 1) / 2); k++) { for (int k = vectEMin[i].getX() - ((w[i] - 1) / 2); k < vectEMin[i].getX() + ((w[i] + 1) / 2); k++) {
for (int l = vectEMin[i].getY() - ((w[i] + 1) / 2); l < vectEMin[i].getY() + ((w[i] + 1) / 2); l++) { for (int l = vectEMin[i].getY() - ((w[i] - 1) / 2); l < vectEMin[i].getY() + ((w[i] + 1) / 2); l++) {
newImgMin(k, l) = (1./(w[i]*w[i])) * sum; newImgMin(k, l) = (1./(w[i]*w[i])) * sum;
std::cout << ((1./(w[i]*w[i])) * sum) << std::endl; std::cout << ((1./(w[i]*w[i])) * sum) << std::endl;
} }