Added a y=b^data function
authorGary Macbook <gsteele13@gmail.com>
Fri, 23 Aug 2013 08:03:29 +0000 (10:03 +0200)
committerGary Macbook <gsteele13@gmail.com>
Fri, 23 Aug 2013 08:03:29 +0000 (10:03 +0200)
spyview/ImageData.C
spyview/ImageData.H
spyview/ImageWindow.C
spyview/spyview.C

index 6a4c760d91c7eea930625b396649b3ef046e58a8..7c196faac7c4dc5098d640b0f6d49ee2f1349ebe 100644 (file)
@@ -1092,6 +1092,12 @@ void ImageData::scale(double factor)
     raw_data[i] = raw_data[i]*factor;
 }
 
+void ImageData::power2(double x)
+{
+    for (int i=0; i<width*height; i++)
+      raw_data[i] = pow(x,raw_data[i]);
+}
+
 void ImageData::gamma(double gamma, double epsilon)
 { 
   // This is tricky: what to do if we have a negative power and we get zero?
index 9a21c1fb7837b06ae1aa0a23e2d6f468b5711696..b68cb73eb0c51beeedfcb8deb466491802557791 100644 (file)
@@ -301,6 +301,7 @@ public:
   void offset(double offset, bool do_auto);// add an offset
   void scale(double factor); // scale the data
   void gamma(double gamma, double epsilon); // gamma scaling operation on 16 bit data
+  void power2(double x); // y = x^data
 
   // More complicated functions that preserve the images size
 
index 8cebf7d310c72b37da90a7c00c111cb2834da75e..9e0e9b8afd7de37be6cd9023bfa6fbde28dab8f5 100644 (file)
@@ -1636,6 +1636,8 @@ void ImageWindow::runQueue()
             id.cbc(op->parameters[0].value, op->parameters[1].value, 0, 1, op->parameters[2].value, op->parameters[3].value);
          else if (op->name == "power")
            id.gamma(op->parameters[0].value,op->parameters[1].value);
+         else if (op->name == "power2")
+           id.power2(op->parameters[0].value);
          else if (op->name == "scale data")
            id.scale(op->parameters[0].value);
          else if (op->name == "even odd")
index 5216a5d4096607475d658736d7a6ee34f8ba7c71..2f3ea85128a24e04855b68c7d9faafb3f62f4f8a 100644 (file)
@@ -522,11 +522,15 @@ int main(int argc, char **argv)
   gradmag.addParameter("Axis Bias [0-1.0]",0.5);
   Define_Image_Operation(&gradmag);
 
-  Image_Operation gamma("power","y = x^p, p<0 & abs(x)<eps => truncate x, y<0 & p not int => set y=0"); // a better name
+  Image_Operation gamma("power","y = data^p. If p<0 & abs(data)<eps => truncate x to avoid 1/0. If data<0 & p not int => set data=0 to avoid complex numbers"); // a better name
   gamma.addParameter("Power", 0.5);
   gamma.addParameter("Epsilon", 1e-20);
   Define_Image_Operation(&gamma);
 
+  Image_Operation power2("power2","y = b^data");
+  power2.addParameter("Base (b)", 10);
+  Define_Image_Operation(&power2);
+
   Define_Image_Operation(new Image_Operation("norm lbl","Stretch the contrast of each line to full scale"));
   Define_Image_Operation(new Image_Operation("norm cbc","Stretch the contrast of each column to full scale"));