summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTill Theato <[email protected]>2011-09-10 20:12:01 (GMT)
committer Till Theato <[email protected]>2011-09-10 20:12:01 (GMT)
commit39e65be93089a51a57a8c0437d76a44b2b61605e (patch)
tree974516001d40da0f008b60433da9507ec8c24fef
parentee7bb57e1c69055697e9be16d8a5132c6bc077f8 (diff)
Cartoon: Fix parameter ranges.
-rw-r--r--src/filter/cartoon/cartoon.cpp36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/filter/cartoon/cartoon.cpp b/src/filter/cartoon/cartoon.cpp
index 45297e8..be9b20f 100644
--- a/src/filter/cartoon/cartoon.cpp
+++ b/src/filter/cartoon/cartoon.cpp
@@ -59,8 +59,8 @@ public:
Cartoon(unsigned int width, unsigned int height) {
int c;
- register_param(triplevel, "triplevel", "level of trip: use high numbers, incremented by 100");
- register_param(diffspace, "diffspace", "difference space: a value from 0 to 256");
+ register_param(triplevel, "triplevel", "level of trip: mapped to [0,1] asymptotical");
+ register_param(diffspace, "diffspace", "difference space: a value from 0 to 256 (mapped to [0,1])");
geo = new ScreenGeometry();
geo->w = width;
@@ -79,8 +79,8 @@ public:
powprecal[c] = c*c;
black = 0xFF000000;
- triplevel = 1000;
- diffspace = 1;
+ triplevel = 1 - 1 / (1000 + 1);
+ diffspace = 1 / 256.;
}
@@ -97,13 +97,14 @@ public:
// Cartoonify picture, do a form of edge detect
int x, y, t;
+ m_diffspace = diffspace * 256;
- for (x=(int)diffspace;x<geo->w-(1+(int)diffspace);x++) {
+ for (x=m_diffspace;x<geo->w-(1+m_diffspace);x++) {
- for (y=(int)diffspace;y<geo->h-(1+(int)diffspace);y++) {
+ for (y=m_diffspace;y<geo->h-(1+m_diffspace);y++) {
t = GetMaxContrast((int32_t*)in,x,y);
- if (t > triplevel) {
+ if (t > 1 / (1 - triplevel) - 1) {
// Make a border pixel
*(out+x+yprecal[y]) = black;
@@ -129,6 +130,7 @@ private:
int *yprecal;
uint16_t powprecal[256];
int32_t black;
+ int m_diffspace;
void FlattenColor(int32_t *c);
long GetMaxContrast(int32_t *src,int x,int y);
@@ -163,23 +165,23 @@ long Cartoon::GetMaxContrast(int32_t *src,int x,int y) {
long error,max=0;
/* Assumes PrePixelModify has been run */
- c1 = *PIXELAT(x-(int)diffspace,y,src);
- c2 = *PIXELAT(x+(int)diffspace,y,src);
+ c1 = *PIXELAT(x-m_diffspace,y,src);
+ c2 = *PIXELAT(x+m_diffspace,y,src);
error = GMERROR(c1,c2);
if (error>max) max = error;
- c1 = *PIXELAT(x,y-(int)diffspace,src);
- c2 = *PIXELAT(x,y+(int)diffspace,src);
+ c1 = *PIXELAT(x,y-m_diffspace,src);
+ c2 = *PIXELAT(x,y+m_diffspace,src);
error = GMERROR(c1,c2);
if (error>max) max = error;
- c1 = *PIXELAT(x-(int)diffspace,y-(int)diffspace,src);
- c2 = *PIXELAT(x+(int)diffspace,y+(int)diffspace,src);
+ c1 = *PIXELAT(x-m_diffspace,y-m_diffspace,src);
+ c2 = *PIXELAT(x+m_diffspace,y+m_diffspace,src);
error = GMERROR(c1,c2);
if (error>max) max = error;
- c1 = *PIXELAT(x+(int)diffspace,y-(int)diffspace,src);
- c2 = *PIXELAT(x-(int)diffspace,y+(int)diffspace,src);
+ c1 = *PIXELAT(x+m_diffspace,y-m_diffspace,src);
+ c2 = *PIXELAT(x-m_diffspace,y+m_diffspace,src);
error = GMERROR(c1,c2);
if (error>max) max = error;
@@ -189,6 +191,4 @@ long Cartoon::GetMaxContrast(int32_t *src,int x,int y) {
frei0r::construct<Cartoon> plugin("Cartoon",
"Cartoonify video, do a form of edge detect",
"Dries Pruimboom, Jaromil",
- 2,0);
-
-
+ 2,1);