Try to Smooth the images
This commit is contained in:
parent
7f53eaa142
commit
2d52f31a63
49
main.cpp
49
main.cpp
@ -8,6 +8,7 @@
|
|||||||
#include "CImg.h"
|
#include "CImg.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include "Euclidean.hpp"
|
#include "Euclidean.hpp"
|
||||||
|
|
||||||
@ -44,6 +45,18 @@ return max;
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
double Sum(CImg<unsigned char> img, int startedX, int startedY, int w)
|
||||||
|
{
|
||||||
|
double res = 0;
|
||||||
|
for(int i = startedX; i < startedX + w; i++) {
|
||||||
|
for(int j = startedY; j < startedY + w; j++) {
|
||||||
|
res = img(i,j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
Main
|
Main
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
@ -198,15 +211,26 @@ int main()
|
|||||||
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 ) {
|
||||||
newImgMax(k, l) = vectFilterMax[i];
|
imgMax(k, l) = vectFilterMax[i];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
newImgMax(k, l) = (imgMax(k, l) + vectFilterMax[i]) / 2;
|
imgMax(k, l) = (imgMax(k, l) + vectFilterMax[i]) / 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Smooth of the upper envelope
|
||||||
|
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]);
|
||||||
|
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++) {
|
||||||
|
newImgMax(k, l) = (1./(w[i]*w[i])) * sum;
|
||||||
|
std::cout << ((1./(w[i]*w[i])) * sum) << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CImg<unsigned char> newImgMin(imgMin.width(), imgMin.height());
|
CImg<unsigned char> newImgMin(imgMin.width(), imgMin.height());
|
||||||
|
|
||||||
// Calculate the lower envelope
|
// Calculate the lower envelope
|
||||||
@ -214,18 +238,31 @@ int main()
|
|||||||
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 ) {
|
||||||
newImgMin(k, l) = vectFilterMin[i];
|
imgMin(k, l) = vectFilterMin[i];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
newImgMin(k, l) = (imgMin(k, l) + vectFilterMin[i]) / 2;
|
imgMin(k, l) = (imgMin(k, l) + vectFilterMin[i]) / 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Smooth of the lower envelope
|
||||||
|
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]);
|
||||||
|
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++) {
|
||||||
|
newImgMin(k, l) = (1./(w[i]*w[i])) * sum;
|
||||||
|
std::cout << ((1./(w[i]*w[i])) * sum) << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Display images for max and min
|
// Display images for max and min
|
||||||
CImgDisplay dispMax(newImgMax,"Image de Max");
|
CImgDisplay dispMax(imgMax,"Image de Max");
|
||||||
CImgDisplay dispMin(newImgMin,"Image de Min");
|
CImgDisplay dispMin(imgMin,"Image de Min");
|
||||||
|
CImgDisplay dispEMax(newImgMax,"Image de enveloppe Max");
|
||||||
|
CImgDisplay dispEMin(newImgMin,"Image de enveloppe Min");
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Part 2: Average //
|
// Part 2: Average //
|
||||||
|
Loading…
Reference in New Issue
Block a user