Index: trunk/src/transform_field/ima_erode_particles.m
===================================================================
--- trunk/src/transform_field/ima_erode_particles.m	(revision 899)
+++ trunk/src/transform_field/ima_erode_particles.m	(revision 906)
@@ -35,6 +35,6 @@
 
 %parameters
-radius=2;
-SE=strel('disk',2);
+radius=4;
+SE=strel('disk',radius);
 %--------------------------------------------------------- 
 DataOut=DataIn;%default
@@ -44,8 +44,19 @@
     return
 end
-
+[npy,npx]=size(DataIn.A);
+[X,Y]=meshgrid(1:npx,1:npy);
 %BACKGROUND LEVEL
 Atype=class(DataIn.A);
-DataOut.A=imerode(DataIn.A,SE);
+%SE=ones(4);
+Aerode=imerode(DataIn.A,SE);
+Aflagmin=find(DataIn.A==Aerode);
+% Backg=zeros(size(A));
+%Aflagmin=imregionalmin(DataIn.A);%Amin=1 for local image minima
+Xmin=X(Aflagmin);
+Ymin=Y(Aflagmin);
+Amin=double(DataIn.A(Aflagmin));
+F = TriScatteredInterp([Xmin Ymin], Amin);
+DataOut.A=F(X,Y);
+
 % DataOut.A=feval(Atype,DataOut.A);
 
Index: trunk/src/transform_field/ima_remove_background.m
===================================================================
--- trunk/src/transform_field/ima_remove_background.m	(revision 899)
+++ trunk/src/transform_field/ima_remove_background.m	(revision 906)
@@ -27,32 +27,60 @@
 %=======================================================================
 
-function DataOut=remove_background(DataIn)
+function DataOut=remove_background(DataIn,Param)
 %------------------------------------------------------------------------
-DataOut=[];  %default  output field
-if strcmp(DataIn,'*')
+%% request input parameters
+if isfield(DataIn,'Action') && isfield(DataIn.Action,'RUN') && isequal(DataIn.Action.RUN,0)
+    prompt = {'radius'};
+    dlg_title = 'get the disk radius (pixels) used to calculate the regional minimum';
+    num_lines= 1;
+    def     = { '4'};
+    if isfield(Param,'TransformInput')&&isfield(Param.TransformInput,'DiskRadius')
+        def={num2str(Param.TransformInput.DiskRadius)};
+    end
+    answer = inputdlg(prompt,dlg_title,num_lines,def);
+    DataOut.TransformInput.DiskRadius=str2num(answer{1}); 
+    return
+end
+if ~isfield(DataIn,'A')
+    DataOut.Txt='remove_particles only valid for input images';
+    return
+end
+if ~exist('imerode','file');
+        DataOut.Txt='the function imerode from the image processing toolbox is needed';
     return
 end
 
-%parameters
-threshold=200
-nblock_x=30;%size of image subblocks for analysis
-nblock_y=30;
-%---------------------------------------------------------
+SE=strel('disk',Param.TransformInput.DiskRadius);
+%--------------------------------------------------------- 
 DataOut=DataIn;%default
+
+[npy,npx]=size(DataIn.A);
+[X,Y]=meshgrid(1:npx,1:npy);
 
 %BACKGROUND LEVEL
 Atype=class(DataIn.A);
-A=double(DataIn.A);
-Backg=zeros(size(A));
-Aflagmin=sparse(imregionalmin(A));%Amin=1 for local image minima
-Amin=A.*Aflagmin;%values of A at local minima
-% local background: find all the local minima in image subblocks
-sumblock= inline('sum(sum(x(:)))');
-Backg=blkproc(Amin,[nblock_y nblock_x],sumblock);% take the sum in  blocks
-Bmin=blkproc(Aflagmin,[nblock_y nblock_x],sumblock);% find the number of minima in blocks
-Backg=Backg./Bmin; % find the average of minima in blocks
-B=imresize(Backg,size(A),'bilinear');% interpolate to the initial size image
-ImPart=(A-B);
-DataOut.A=ImPart;
-%DataOut.A=ImPart.*(ImPart>threshold);
+Aerode=imerode(DataIn.A,SE);
+Aflagmin=find(DataIn.A==Aerode);
+Xmin=X(Aflagmin);
+Ymin=Y(Aflagmin);
+Amin=double(DataIn.A(Aflagmin));
+F = TriScatteredInterp([Xmin Ymin], Amin);
+DataOut.A=double(DataOut.A)-F(X,Y);
 DataOut.A=feval(Atype,DataOut.A);
+
+%BACKGROUND LEVEL
+% Atype=class(DataIn.A);
+% A=double(DataIn.A);
+% Backg=zeros(size(A));
+% Aflagmin=sparse(imregionalmin(A));%Amin=1 for local image minima
+% Amin=A.*Aflagmin;%values of A at local minima
+% % local background: find all the local minima in image subblocks
+% sumblock= inline('sum(sum(x(:)))');
+% Backg=blkproc(Amin,[nblock_y nblock_x],sumblock);% take the sum in  blocks
+% Bmin=blkproc(Aflagmin,[nblock_y nblock_x],sumblock);% find the number of minima in blocks
+% Backg=Backg./Bmin; % find the average of minima in blocks
+% B=imresize(Backg,size(A),'bilinear');% interpolate to the initial size image
+% ImPart=(A-B);
+% DataOut.A=ImPart;
+% %DataOut.A=ImPart.*(ImPart>threshold);
+% DataOut.A=feval(Atype,DataOut.A);
Index: trunk/src/transform_field/ima_remove_particles.m
===================================================================
--- trunk/src/transform_field/ima_remove_particles.m	(revision 899)
+++ trunk/src/transform_field/ima_remove_particles.m	(revision 906)
@@ -27,40 +27,46 @@
 %=======================================================================
 
-function DataOut=ima_remove_particles(DataIn)
+function DataOut=ima_remove_particles(DataIn,Param)
 %------------------------------------------------------------------------
-DataOut=[];  %default  output field
-if strcmp(DataIn,'*')
+%% request input parameters
+if isfield(DataIn,'Action') && isfield(DataIn.Action,'RUN') && isequal(DataIn.Action.RUN,0)
+    prompt = {'radius'};
+    dlg_title = 'get the disk radius (pixels) used to calculate the regional minimum';
+    num_lines= 1;
+    def     = { '4'};
+    if isfield(Param,'TransformInput')&&isfield(Param.TransformInput,'DiskRadius')
+        def={num2str(Param.TransformInput.DiskRadius)};
+    end
+    answer = inputdlg(prompt,dlg_title,num_lines,def);
+    DataOut.TransformInput.DiskRadius=str2num(answer{1}); 
     return
-    
 end
-
-%parameters
-threshold=200;
-nblock_x=10;%size of image subblocks for analysis
-nblock_y=10;
-%--------------------------------------------------------- 
-DataOut=DataIn;%default
-
 if ~isfield(DataIn,'A')
     DataOut.Txt='remove_particles only valid for input images';
     return
 end
+if ~exist('imerode','file');
+        DataOut.Txt='the function imerode from the image processing toolbox is needed';
+    return
+end
 
+SE=strel('disk',Param.TransformInput.DiskRadius);
+%--------------------------------------------------------- 
+DataOut=DataIn;%default
+
+[npy,npx]=size(DataIn.A);
+[X,Y]=meshgrid(1:npx,1:npy);
 %BACKGROUND LEVEL
 Atype=class(DataIn.A);
-A=double(DataIn.A);
+%SE=ones(4);
+Aerode=imerode(DataIn.A,SE);
+Aflagmin=find(DataIn.A==Aerode);
 % Backg=zeros(size(A));
-Aflagmin=sparse(imregionalmin(A));%Amin=1 for local image minima
-Amin=A.*Aflagmin;%values of A at local minima
-% local background: find all the local minima in image subblocks
-sumblock= inline('sum(sum(x(:)))');
-Backg=blkproc(Amin,[nblock_y nblock_x],sumblock);% take the sum in  blocks
-Bmin=blkproc(Aflagmin,[nblock_y nblock_x],sumblock);% find the number of minima in blocks
-Backg=Backg./Bmin; % find the average of minima in blocks
-B=imresize(Backg,size(A),'bilinear');% interpolate to the initial size image
-DataOut.A=B;
-% ImPart=(A-B);
-% ImPart=ImPart.*(ImPart>threshold);
-% DataOut.A=A-ImPart;%
+%Aflagmin=imregionalmin(DataIn.A);%Amin=1 for local image minima
+Xmin=X(Aflagmin);
+Ymin=Y(Aflagmin);
+Amin=double(DataIn.A(Aflagmin));
+F = TriScatteredInterp([Xmin Ymin], Amin);
+DataOut.A=F(X,Y);
 DataOut.A=feval(Atype,DataOut.A);
 
