// a tool for interactively creating lookup tables. // mutterer@unistra.fr var l = newArray(0,0,80,100,160,100,255,255,0,0,80,150,160,150,255,255,0,0,80,180,160,180,255,255); var col = newArray("red","green","blue"); var reds=newArray(256); var greens=newArray(256); var blues=newArray(256); var active = 0; var s = setup(); macro "Spline Lut Tool - C000T0f15L" { getCursorLoc(x, y, z, modifiers); if (y>256){ i=floor(x/85); if (i<3) { overlay(i); active = i; } } else while (modifiers&16!=0) { getCursorLoc(x, y, z, modifiers); c=closest(x,y); l[active*8+c*2]=(c==0)*0+(c==1)*maxOf(0,minOf(x,l[active*8+2*2]))+(c==2)*minOf(255,maxOf(x,l[active*8+2]))+(c==3)*255; l[active*8+c*2+1]=255-maxOf(0,minOf(255,y)); overlay(active); wait(50); } } function setup() { newImage("Spline Lut", "8-bit ramp", 256, 256, 1); run("Canvas Size...", "width=256 height="+getHeight+30+" position=Top-Center zero"); overlay(0); return true; } function overlay(c) { Overlay.remove; lx = newArray(4); ly = newArray(4); for (i=0;i<3;i++){ for (j=0;j<4;j++) { lx[j] = l[i*8+j*2]; ly[j] = 255-l[i*8+j*2+1]; if (i==c) { makeOval(lx[j]-3, ly[j]-3, 6, 6); Roi.setStrokeWidth(5); Overlay.addSelection(col[i]); } } makeSelection("polyline", lx,ly); run("Fit Spline"); Overlay.addSelection(col[i]); getSelectionCoordinates(xc, yc); yc = Array.resample(yc,256); for (k=0;k