%ffp //------------------------------------- // FM_TEMPLATE_1 //------------------------------------- Category: "AstroPlugins" Title: "Low End Smoother" Copyright: "Copyright ©2005 Author: "James Ryan" Organization: "Astroplugins" Filename: "Low End Smoother" Description: "" Version: "v1.0" URL: "www.grekalova.com" About: "AstroPlugins !V\n" "!c\n!A\n!U" Dialog: Text = "Astroplugins Low End Smoother !V !c !A" //------------------------------------- ctl(0):"Red Cutoff",val=50 ctl(1):"Green Cutoff",val=50 ctl(2):"Blue Cutoff", val=50 ctl(4):"Amount",range = (1,100),val=50 ctl(5):"Segments",range = (4,35), val=18 ctl[6]: "count", val = 0, range=(0,255) OnFilterStart: { // Info("%d",imageMode); if( imageMode != 3) { ErrorOk("This filter only works on RGB 8bit images."); doAction(CA_CANCEL); } return false; }//OnFilterStart //------------------------------------- // ForEveryTile //------------------------------------- ForEveryTile: { int count, counter, reject,ave1,sigmareject; float sigmareject1; float sigma, sigmarun,fave1; int minval, lastmin, interval; int xval,yval, ix, iy, ixval,iyval, yseg,xseg; int r,amount; int i,j,k,l,m; sigmareject = ctl(4); sigmareject1 = (float) sigmareject/100; counter = 0; xseg = X/ctl(5); yseg = Y/ctl(5); xval = X/xseg; yval = Y/yseg; iy = 0; ix = 0; //for (m = 0; m<5; m++) //{ for (z=0; z 0) { sigma = (sqrt(sigmarun/j)); }else { sigma = 0; } if (counter < ctl(6)){ Info("sigma %f %f %d %d",sigma,sigmarun,j,ave1);counter = counter +1;} for (y= iyval * yval; y < iyval * yval + yval; y++) { for (x = ixval * xval; x < ixval * xval + xval; x++) { minval = src(x,y,z); // if (y = Y && x = X){ Info("ave1 %d %d %d %d",x,y,minval,ave1);counter = counter +1;} if (minval < ctl(z)) { if (counter < ctl(6)){ Info(" %d %d %d %d %f",x,y,z,minval,sigma);counter = counter +1;} if (abs(minval - ave1) > sigmareject1 * sigma) { if (minval > ave1) { r = minval - sigmareject1 * sigma * sqr(abs(minval - ave1));; }else { r = minval + sigmareject1 * sigma * sqr(abs(minval - ave1)); } pset (x, y, z, r); }else {pset (x,y,z,minval); } }else { pset(x,y,z,minval); } } } } if (updateProgress(z,Z)) abort(); } //end iyval }//end z //} return true; }//ForEveryTile