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_background.m

    r897 r906  
    2727%=======================================================================
    2828
    29 function DataOut=remove_background(DataIn)
     29function DataOut=remove_background(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});
     42    return
     43end
     44if ~isfield(DataIn,'A')
     45    DataOut.Txt='remove_particles only valid for input images';
     46    return
     47end
     48if ~exist('imerode','file');
     49        DataOut.Txt='the function imerode from the image processing toolbox is needed';
    3350    return
    3451end
    3552
    36 %parameters
    37 threshold=200
    38 nblock_x=30;%size of image subblocks for analysis
    39 nblock_y=30;
    40 %---------------------------------------------------------
     53SE=strel('disk',Param.TransformInput.DiskRadius);
     54%---------------------------------------------------------
    4155DataOut=DataIn;%default
     56
     57[npy,npx]=size(DataIn.A);
     58[X,Y]=meshgrid(1:npx,1:npy);
    4259
    4360%BACKGROUND LEVEL
    4461Atype=class(DataIn.A);
    45 A=double(DataIn.A);
    46 Backg=zeros(size(A));
    47 Aflagmin=sparse(imregionalmin(A));%Amin=1 for local image minima
    48 Amin=A.*Aflagmin;%values of A at local minima
    49 % local background: find all the local minima in image subblocks
    50 sumblock= inline('sum(sum(x(:)))');
    51 Backg=blkproc(Amin,[nblock_y nblock_x],sumblock);% take the sum in  blocks
    52 Bmin=blkproc(Aflagmin,[nblock_y nblock_x],sumblock);% find the number of minima in blocks
    53 Backg=Backg./Bmin; % find the average of minima in blocks
    54 B=imresize(Backg,size(A),'bilinear');% interpolate to the initial size image
    55 ImPart=(A-B);
    56 DataOut.A=ImPart;
    57 %DataOut.A=ImPart.*(ImPart>threshold);
     62Aerode=imerode(DataIn.A,SE);
     63Aflagmin=find(DataIn.A==Aerode);
     64Xmin=X(Aflagmin);
     65Ymin=Y(Aflagmin);
     66Amin=double(DataIn.A(Aflagmin));
     67F = TriScatteredInterp([Xmin Ymin], Amin);
     68DataOut.A=double(DataOut.A)-F(X,Y);
    5869DataOut.A=feval(Atype,DataOut.A);
     70
     71%BACKGROUND LEVEL
     72% Atype=class(DataIn.A);
     73% A=double(DataIn.A);
     74% Backg=zeros(size(A));
     75% Aflagmin=sparse(imregionalmin(A));%Amin=1 for local image minima
     76% Amin=A.*Aflagmin;%values of A at local minima
     77% % local background: find all the local minima in image subblocks
     78% sumblock= inline('sum(sum(x(:)))');
     79% Backg=blkproc(Amin,[nblock_y nblock_x],sumblock);% take the sum in  blocks
     80% Bmin=blkproc(Aflagmin,[nblock_y nblock_x],sumblock);% find the number of minima in blocks
     81% Backg=Backg./Bmin; % find the average of minima in blocks
     82% B=imresize(Backg,size(A),'bilinear');% interpolate to the initial size image
     83% ImPart=(A-B);
     84% DataOut.A=ImPart;
     85% %DataOut.A=ImPart.*(ImPart>threshold);
     86% DataOut.A=feval(Atype,DataOut.A);
Note: See TracChangeset for help on using the changeset viewer.