Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
CGoGN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Sauvage
CGoGN
Commits
03f8878d
Commit
03f8878d
authored
Feb 28, 2013
by
untereiner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MR filtering is ok
Adding some noise : Additive Uniform-distributed and Additive Gaussian-distributed
parent
f1fbd43f
Changes
12
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
671 additions
and
595 deletions
+671
-595
include/Algo/Filtering/tools.h
include/Algo/Filtering/tools.h
+195
-0
include/Algo/Multiresolution/Map2MR/Filters/bertram.h
include/Algo/Multiresolution/Map2MR/Filters/bertram.h
+23
-85
include/Algo/Multiresolution/Map2MR/Filters/catmullClark.h
include/Algo/Multiresolution/Map2MR/Filters/catmullClark.h
+2
-52
include/Algo/Multiresolution/Map2MR/Filters/lerp.h
include/Algo/Multiresolution/Map2MR/Filters/lerp.h
+2
-2
include/Algo/Multiresolution/Map2MR/Filters/loop.h
include/Algo/Multiresolution/Map2MR/Filters/loop.h
+2
-32
include/Algo/Multiresolution/Map2MR/Filters/sqrt2.h
include/Algo/Multiresolution/Map2MR/Filters/sqrt2.h
+2
-7
include/Algo/Multiresolution/Map2MR/Filters/sqrt3.h
include/Algo/Multiresolution/Map2MR/Filters/sqrt3.h
+2
-26
include/Algo/Multiresolution/Map2MR/map2MR_PrimalRegular.h
include/Algo/Multiresolution/Map2MR/map2MR_PrimalRegular.h
+0
-18
include/Algo/Multiresolution/Map2MR/map2MR_PrimalRegular.hpp
include/Algo/Multiresolution/Map2MR/map2MR_PrimalRegular.hpp
+4
-29
include/Algo/Multiresolution/Map3MR/Filters/bertram.h
include/Algo/Multiresolution/Map3MR/Filters/bertram.h
+345
-343
include/Algo/Multiresolution/filter.h
include/Algo/Multiresolution/filter.h
+93
-1
src/Algo/Render/topo3Render.cpp
src/Algo/Render/topo3Render.cpp
+1
-0
No files found.
include/Algo/Filtering/tools.h
View file @
03f8878d
...
...
@@ -132,10 +132,205 @@ void computeNoise(typename PFP::MAP& map, long amount, const VertexAttribute<typ
}
}
//Uniform-distributed additive noise
//TODO do not touch to boundary vertices
template
<
typename
PFP
>
void
computeUnfirmAdditiveNoise
(
typename
PFP
::
MAP
&
map
,
float
noiseIntensity
,
const
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position2
)
{
typedef
typename
PFP
::
VEC3
VEC3
;
// Compute mesh center
unsigned
int
count
=
0
;
VEC3
centroid
(
0.0
);
TraversorV
<
typename
PFP
::
MAP
>
tv
(
map
)
;
for
(
Dart
dit
=
tv
.
begin
();
dit
!=
tv
.
end
();
dit
=
tv
.
next
())
{
centroid
+=
position
[
dit
];
++
count
;
}
centroid
/=
count
;
double
distanceCentroid
=
0.0
;
// Compute the average distance from vertices to mesh center
for
(
Dart
dit
=
tv
.
begin
();
dit
!=
tv
.
end
();
dit
=
tv
.
next
())
{
VEC3
dist
=
position
[
dit
];
dist
-=
centroid
;
distanceCentroid
+=
float
(
dist
.
norm
());
}
distanceCentroid
/=
count
;
// add random uniform-distributed (between [-noiseLevel, +noiseLevel])
srand
((
unsigned
)
time
(
NULL
));
float
noisex
,
noisey
,
noisez
;
float
noiseLevel
=
distanceCentroid
*
noiseIntensity
;
for
(
Dart
dit
=
tv
.
begin
();
dit
!=
tv
.
end
();
dit
=
tv
.
next
())
{
noisex
=
noiseLevel
*
(
1.0
*
rand
()
/
RAND_MAX
-
0.5
)
*
2
;
noisey
=
noiseLevel
*
(
1.0
*
rand
()
/
RAND_MAX
-
0.5
)
*
2
;
noisez
=
noiseLevel
*
(
1.0
*
rand
()
/
RAND_MAX
-
0.5
)
*
2
;
position2
[
dit
]
=
position
[
dit
]
+
VEC3
(
noisex
,
noisey
,
noisez
);
}
}
//Gaussian-distributed additive noise
//TODO do not touch to boundary vertices
template
<
typename
PFP
>
void
computeGaussianAdditiveNoise
(
typename
PFP
::
MAP
&
map
,
float
noiseIntensity
,
const
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position2
)
{
typedef
typename
PFP
::
VEC3
VEC3
;
// Compute mesh center
unsigned
int
count
=
0
;
VEC3
centroid
(
0.0
);
TraversorV
<
typename
PFP
::
MAP
>
tv
(
map
)
;
for
(
Dart
dit
=
tv
.
begin
();
dit
!=
tv
.
end
();
dit
=
tv
.
next
())
{
centroid
+=
position
[
dit
];
++
count
;
}
centroid
/=
count
;
double
distanceCentroid
=
0.0
;
// Compute the average distance from vertices to mesh center
for
(
Dart
dit
=
tv
.
begin
();
dit
!=
tv
.
end
();
dit
=
tv
.
next
())
{
VEC3
dist
=
position
[
dit
];
dist
-=
centroid
;
distanceCentroid
+=
float
(
dist
.
norm
());
}
distanceCentroid
/=
count
;
// add random gaussian-distributed
srand
((
unsigned
)
time
(
NULL
));
float
noisex
,
noisey
,
noisez
;
float
gaussNumbers
[
3
];
float
noiseLevel
=
distanceCentroid
*
noiseIntensity
;
for
(
Dart
dit
=
tv
.
begin
();
dit
!=
tv
.
end
();
dit
=
tv
.
next
())
{
// pseudo-random Gaussian-distributed numbers generation from uniformly-distributed pseudo-random numbers
float
x
,
y
,
r2
;
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
do
{
x
=
-
1.0
+
2.0
*
1.0
*
rand
()
/
RAND_MAX
;
y
=
-
1.0
+
2.0
*
1.0
*
rand
()
/
RAND_MAX
;
r2
=
x
*
x
+
y
*
y
;
}
while
((
r2
>
1.0
)
||
(
r2
==
0.0
));
gaussNumbers
[
i
]
=
y
*
sqrt
(
-
2.0
*
log
(
r2
)
/
r2
);
}
noisex
=
noiseLevel
*
gaussNumbers
[
0
];
noisey
=
noiseLevel
*
gaussNumbers
[
1
];
noisez
=
noiseLevel
*
gaussNumbers
[
2
];
position2
[
dit
]
=
position
[
dit
]
+
VEC3
(
noisex
,
noisey
,
noisez
);
}
}
}
//namespace Filtering
}
//namespace Surface
namespace
Volume
{
namespace
Filtering
{
template
<
typename
PFP
>
void
computeNoise
(
typename
PFP
::
MAP
&
map
,
long
amount
,
const
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position2
)
{
typedef
typename
PFP
::
VEC3
VEC3
;
// add random gaussian-distributed
srand
((
unsigned
)
time
(
NULL
));
float
noisex
,
noisey
,
noisez
;
float
gaussNumbers
[
3
];
float
noiseLevel
=
0.1
f
;
TraversorV
<
typename
PFP
::
MAP
>
tv
(
map
)
;
for
(
Dart
dit
=
tv
.
begin
();
dit
!=
tv
.
end
();
dit
=
tv
.
next
())
{
// pseudo-random Gaussian-distributed numbers generation from uniformly-distributed pseudo-random numbers
float
x
,
y
,
r2
;
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
do
{
x
=
-
1.0
+
2.0
*
1.0
*
rand
()
/
RAND_MAX
;
y
=
-
1.0
+
2.0
*
1.0
*
rand
()
/
RAND_MAX
;
r2
=
x
*
x
+
y
*
y
;
}
while
((
r2
>
1.0
)
||
(
r2
==
0.0
));
gaussNumbers
[
i
]
=
y
*
sqrt
(
-
2.0
*
log
(
r2
)
/
r2
);
}
noisex
=
noiseLevel
*
gaussNumbers
[
0
];
noisey
=
noiseLevel
*
gaussNumbers
[
1
];
noisez
=
noiseLevel
*
gaussNumbers
[
2
];
position2
[
dit
]
=
position
[
dit
]
+
VEC3
(
noisex
,
noisey
,
noisez
);
}
// // init the seed for random
// srand(time(NULL)) ;
//
// // apply noise on each vertex
// TraversorV<typename PFP::MAP> t(map) ;
// for(Dart d = t.begin(); d != t.end(); d = t.next())
// {
// const VEC3& pos = position[d] ;
// VEC3 norm = position[d] ;
//
// float r1 = float(rand() % amount) / 100.0f ;
// float r2 = 0 ;
// if (amount >= 5)
// r2 = float(rand() % (amount/5)) / 100.0f ;
//
// long sign = rand() % 2 ;
// if (sign == 1) norm *= -1.0f ;
// float avEL = 0.0f ;
// VEC3 td(0) ;
//
// long nbE = 0 ;
// Traversor3VVaE<typename PFP::MAP> tav(map, d) ;
// for(Dart it = tav.begin(); it != tav.end(); it = tav.next())
// {
// const VEC3& p = position[it] ;
// VEC3 vec = p - pos ;
// float el = vec.norm() ;
// vec *= r2 ;
// td += vec ;
// avEL += el ;
// nbE++ ;
// }
//
// avEL /= float(nbE) ;
// norm *= avEL * r1 ;
// norm += td ;
// position2[d] = pos + norm ;
// }
}
}
//namespace Filtering
}
//namespace Volume
}
//namespace Algo
}
//namespace CGoGN
include/Algo/Multiresolution/Map2MR/Filters/bertram.h
View file @
03f8878d
...
...
@@ -22,8 +22,8 @@
* *
*******************************************************************************/
#ifndef __
3
MR_BERTRAM_FILTER__
#define __
3
MR_BERTRAM_FILTER__
#ifndef __
2
MR_BERTRAM_FILTER__
#define __
2
MR_BERTRAM_FILTER__
#include <cmath>
#include "Algo/Geometry/centroid.h"
...
...
@@ -66,11 +66,6 @@ public:
{}
void
operator
()
()
{
}
void
operator
()
(
bool
filtering
)
{
TraversorE
<
typename
PFP
::
MAP
>
travE
(
m_map
)
;
for
(
Dart
d
=
travE
.
begin
();
d
!=
travE
.
end
();
d
=
travE
.
next
())
...
...
@@ -128,11 +123,6 @@ public:
{}
void
operator
()
()
{
}
void
operator
()
(
bool
filtering
)
{
TraversorE
<
typename
PFP
::
MAP
>
travE
(
m_map
);
for
(
Dart
d
=
travE
.
begin
()
;
d
!=
travE
.
end
()
;
d
=
travE
.
next
())
...
...
@@ -171,9 +161,11 @@ public:
{
Dart
db
=
m_map
.
findBoundaryEdgeOfVertex
(
d
);
m_map
.
incCurrentLevel
()
;
ev
=
(
m_position
[
m_map
.
phi1
(
db
)]
+
m_position
[
m_map
.
phi_1
(
db
)]);
ev
+=
(
m_position
[
m_map
.
phi1
(
db
)]
+
m_position
[
m_map
.
phi_1
(
db
)])
*
typename
PFP
::
REAL
(
0.5
);
//ev = (m_position[m_map.phi1(db)] + m_position[m_map.phi_1(db)]);
m_map
.
decCurrentLevel
()
;
ev
*=
m_a
;
ev
*=
2
*
m_a
;
//ev *= m_a;
m_position
[
d
]
-=
ev
;
}
...
...
@@ -220,11 +212,16 @@ public:
void
operator
()
()
{
TraversorE
<
typename
PFP
::
MAP
>
travE
(
m_map
)
;
for
(
Dart
d
=
travE
.
begin
();
d
!=
travE
.
end
();
d
=
travE
.
next
())
{
m_map
.
incCurrentLevel
()
;
Dart
midE
=
m_map
.
phi1
(
d
);
if
(
!
m_map
.
isBoundaryVertex
(
midE
))
m_position
[
midE
]
/=
m_a
;
m_map
.
decCurrentLevel
()
;
}
void
operator
()
(
bool
filtering
)
{
TraversorV
<
typename
PFP
::
MAP
>
travV
(
m_map
)
;
for
(
Dart
d
=
travV
.
begin
();
d
!=
travV
.
end
();
d
=
travV
.
next
())
{
...
...
@@ -233,16 +230,6 @@ public:
else
m_position
[
d
]
/=
m_a
*
m_a
;
}
TraversorE
<
typename
PFP
::
MAP
>
travE
(
m_map
)
;
for
(
Dart
d
=
travE
.
begin
();
d
!=
travE
.
end
();
d
=
travE
.
next
())
{
m_map
.
incCurrentLevel
()
;
Dart
midE
=
m_map
.
phi1
(
d
);
if
(
!
m_map
.
isBoundaryVertex
(
midE
))
m_position
[
midE
]
/=
m_a
;
m_map
.
decCurrentLevel
()
;
}
}
};
...
...
@@ -267,11 +254,6 @@ public:
{}
void
operator
()
()
{
}
void
operator
()
(
bool
filtering
)
{
TraversorF
<
typename
PFP
::
MAP
>
travF
(
m_map
)
;
for
(
Dart
d
=
travF
.
begin
();
d
!=
travF
.
end
();
d
=
travF
.
next
())
...
...
@@ -297,14 +279,7 @@ public:
m_map
.
incCurrentLevel
()
;
Dart
midF
=
m_map
.
phi1
(
m_map
.
phi1
(
d
));
if
(
filtering
)
{
m_position
[
midF
]
=
vf
+
ef
;
}
else
{
m_position
[
midF
]
+=
vf
+
ef
;
}
m_map
.
decCurrentLevel
()
;
}
...
...
@@ -316,15 +291,8 @@ public:
ve
*=
2.0
*
m_a
;
m_map
.
incCurrentLevel
()
;
Dart
midV
=
m_map
.
phi1
(
d
)
;
if
(
filtering
)
{
m_position
[
midV
]
=
ve
;
}
else
{
m_position
[
midV
]
+=
ve
;
}
Dart
midE
=
m_map
.
phi1
(
d
)
;
m_position
[
midE
]
+=
ve
;
m_map
.
decCurrentLevel
()
;
}
}
...
...
@@ -344,11 +312,6 @@ public:
{}
void
operator
()
()
{
}
void
operator
()
(
bool
filtering
)
{
TraversorV
<
typename
PFP
::
MAP
>
travV
(
m_map
);
for
(
Dart
d
=
travV
.
begin
()
;
d
!=
travV
.
end
()
;
d
=
travV
.
next
())
...
...
@@ -363,15 +326,8 @@ public:
m_map
.
decCurrentLevel
()
;
ev
*=
2
*
m_a
;
if
(
filtering
)
{
m_position
[
db
]
=
ev
;
}
else
{
m_position
[
db
]
+=
ev
;
}
}
else
{
unsigned
int
count
=
0
;
...
...
@@ -392,16 +348,9 @@ public:
ev
/=
count
;
ev
*=
4
*
m_a
;
if
(
filtering
)
{
m_position
[
d
]
=
fv
+
ev
;
}
else
{
m_position
[
d
]
+=
fv
+
ev
;
}
}
}
TraversorE
<
typename
PFP
::
MAP
>
travE
(
m_map
);
for
(
Dart
d
=
travE
.
begin
()
;
d
!=
travE
.
end
()
;
d
=
travE
.
next
())
...
...
@@ -426,17 +375,11 @@ public:
m_map
.
incCurrentLevel
()
;
Dart
midF
=
m_map
.
phi1
(
d
);
if
(
filtering
)
{
m_position
[
midF
]
=
fe
;
}
else
{
m_position
[
midF
]
+=
fe
;
}
m_map
.
decCurrentLevel
()
;
}
}
}
}
;
...
...
@@ -454,11 +397,6 @@ public:
{}
void
operator
()
()
{
}
void
operator
()
(
bool
filtering
)
{
TraversorV
<
typename
PFP
::
MAP
>
travV
(
m_map
)
;
for
(
Dart
d
=
travV
.
begin
();
d
!=
travV
.
end
();
d
=
travV
.
next
())
...
...
@@ -496,4 +434,4 @@ public:
}
// namespace CGoGN
#endif
/* __
3
MR_FILTERS_PRIMAL__ */
#endif
/* __
2
MR_FILTERS_PRIMAL__ */
include/Algo/Multiresolution/Map2MR/Filters/catmullClark.h
View file @
03f8878d
...
...
@@ -22,8 +22,8 @@
* *
*******************************************************************************/
#ifndef __MR_CC_FILTER__
#define __MR_CC_FILTER__
#ifndef __
2
MR_CC_FILTER__
#define __
2
MR_CC_FILTER__
#include <cmath>
#include "Algo/Multiresolution/filter.h"
...
...
@@ -93,11 +93,6 @@ public:
first
=
false
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -126,11 +121,6 @@ public:
first
=
false
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -157,11 +147,6 @@ public:
m_map
.
decCurrentLevel
()
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -210,11 +195,6 @@ public:
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -267,11 +247,6 @@ public:
m_map
.
decCurrentLevel
()
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -305,11 +280,6 @@ public:
m_map
.
decCurrentLevel
()
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -343,11 +313,6 @@ public:
m_map
.
decCurrentLevel
()
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -402,11 +367,6 @@ public:
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -455,11 +415,6 @@ public:
m_map
.
decCurrentLevel
()
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -486,11 +441,6 @@ public:
m_map
.
decCurrentLevel
()
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
}
// namespace Filters
...
...
include/Algo/Multiresolution/Map2MR/Filters/lerp.h
View file @
03f8878d
...
...
@@ -22,8 +22,8 @@
* *
*******************************************************************************/
#ifndef __MR_LERP_FILTER__
#define __MR_LERP_FILTER__
#ifndef __
2
MR_LERP_FILTER__
#define __
2
MR_LERP_FILTER__
#include <cmath>
#include "Algo/Multiresolution/filter.h"
...
...
include/Algo/Multiresolution/Map2MR/Filters/loop.h
View file @
03f8878d
...
...
@@ -22,8 +22,8 @@
* *
*******************************************************************************/
#ifndef __MR_LOOP_FILTER__
#define __MR_LOOP_FILTER__
#ifndef __
2
MR_LOOP_FILTER__
#define __
2
MR_LOOP_FILTER__
#include <cmath>
#include "Algo/Multiresolution/filter.h"
...
...
@@ -124,11 +124,6 @@ public:
m_map
.
decCurrentLevel
()
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -151,11 +146,6 @@ public:
m_position
[
d
]
-=
p
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -181,11 +171,6 @@ public:
m_position
[
d
]
/=
n
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
/*********************************************************************************
...
...
@@ -218,11 +203,6 @@ public:
m_map
.
decCurrentLevel
()
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -245,11 +225,6 @@ public:
m_position
[
d
]
+=
p
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
template
<
typename
PFP
>
...
...
@@ -275,11 +250,6 @@ public:
m_position
[
d
]
*=
n
;
}
}
void
operator
()
(
bool
filtering
)
{
}
}
;
}
// namespace Filters
...
...
include/Algo/Multiresolution/Map2MR/Filters/sqrt2.h
View file @
03f8878d
...
...
@@ -22,8 +22,8 @@
* *
*******************************************************************************/
#ifndef __MR_SQRT2_FILTER__
#define __MR_SQRT2_FILTER__
#ifndef __
2
MR_SQRT2_FILTER__
#define __
2
MR_SQRT2_FILTER__
#include <cmath>