Ignore:
Timestamp:
May 31, 2015, 7:49:31 PM (9 years ago)
Author:
sommeria
Message:

various bgu repairs and ima_remove_partices and ima_remove_background updated

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/transform_field/ima_remove_particles.m

    r897 r906  
    2727%=======================================================================
    2828
    29 function DataOut=ima_remove_particles(DataIn)
     29function DataOut=ima_remove_particles(DataIn,Param)
    3030%------------------------------------------------------------------------
    31 DataOut=[];  %default  output field
    32 if strcmp(DataIn,'*')
     31%% request input parameters
     32if isfield(DataIn,'Action') && isfield(DataIn.Action,'RUN') && isequal(DataIn.Action.RUN,0)
     33    prompt = {'radius'};
     34    dlg_title = 'get the disk radius (pixels) used to calculate the regional minimum';
     35    num_lines= 1;
     36    def     = { '4'};
     37    if isfield(Param,'TransformInput')&&isfield(Param.TransformInput,'DiskRadius')
     38        def={num2str(Param.TransformInput.DiskRadius)};
     39    end
     40    answer = inputdlg(prompt,dlg_title,num_lines,def);
     41    DataOut.TransformInput.DiskRadius=str2num(answer{1});
    3342    return
    34    
    3543end
    36 
    37 %parameters
    38 threshold=200;
    39 nblock_x=10;%size of image subblocks for analysis
    40 nblock_y=10;
    41 %---------------------------------------------------------
    42 DataOut=DataIn;%default
    43 
    4444if ~isfield(DataIn,'A')
    4545    DataOut.Txt='remove_particles only valid for input images';
    4646    return
    4747end
     48if ~exist('imerode','file');
     49        DataOut.Txt='the function imerode from the image processing toolbox is needed';
     50    return
     51end
    4852
     53SE=strel('disk',Param.TransformInput.DiskRadius);
     54%---------------------------------------------------------
     55DataOut=DataIn;%default
     56
     57[npy,npx]=size(DataIn.A);
     58[X,Y]=meshgrid(1:npx,1:npy);
    4959%BACKGROUND LEVEL
    5060Atype=class(DataIn.A);
    51 A=double(DataIn.A);
     61%SE=ones(4);
     62Aerode=imerode(DataIn.A,SE);
     63Aflagmin=find(DataIn.A==Aerode);
    5264% Backg=zeros(size(A));
    53 Aflagmin=sparse(imregionalmin(A));%Amin=1 for local image minima
    54 Amin=A.*Aflagmin;%values of A at local minima
    55 % local background: find all the local minima in image subblocks
    56 sumblock= inline('sum(sum(x(:)))');
    57 Backg=blkproc(Amin,[nblock_y nblock_x],sumblock);% take the sum in  blocks
    58 Bmin=blkproc(Aflagmin,[nblock_y nblock_x],sumblock);% find the number of minima in blocks
    59 Backg=Backg./Bmin; % find the average of minima in blocks
    60 B=imresize(Backg,size(A),'bilinear');% interpolate to the initial size image
    61 DataOut.A=B;
    62 % ImPart=(A-B);
    63 % ImPart=ImPart.*(ImPart>threshold);
    64 % DataOut.A=A-ImPart;%
     65%Aflagmin=imregionalmin(DataIn.A);%Amin=1 for local image minima
     66Xmin=X(Aflagmin);
     67Ymin=Y(Aflagmin);
     68Amin=double(DataIn.A(Aflagmin));
     69F = TriScatteredInterp([Xmin Ymin], Amin);
     70DataOut.A=F(X,Y);
    6571DataOut.A=feval(Atype,DataOut.A);
    6672
Note: See TracChangeset for help on using the changeset viewer.