[730]  1  % 'ima_filter': example of image transform with input parameters: lowpass filter of an image


[574]  2 


 3  %


[730]  4  %%%% Use the general syntax for transform fields with a single input and parameters %%%%


[574]  5  % OUTPUT:


 6  % DataOut: output field structure


[810]  7  %


[574]  8  %INPUT:


[730]  9  % DataIn: input field structure


 10  % Param: matlab structure whose field Param.TransformInput contains the filter parameters


 11  %


 12 


[810]  13  %=======================================================================


 14  % Copyright 20082014, LEGI UMR 5519 / CNRS UJF GINP, Grenoble, France


 15  % http://www.legi.grenobleinp.fr


 16  % Joel.Sommeria  Joel.Sommeria (A) legi.cnrs.fr


 17  %


 18  % This file is part of the toolbox UVMAT.


 19  %


 20  % UVMAT is free software; you can redistribute it and/or modify


 21  % it under the terms of the GNU General Public License as published


 22  % by the Free Software Foundation; either version 2 of the license,


 23  % or (at your option) any later version.


 24  %


 25  % UVMAT is distributed in the hope that it will be useful,


 26  % but WITHOUT ANY WARRANTY; without even the implied warranty of


 27  % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the


 28  % GNU General Public License (see LICENSE.txt) for more details.


 29  %=======================================================================


 30 


[753]  31  function DataOut=ima_filter(DataIn,Param)


 32 


 33  %% request input parameters


 34  if isfield(DataIn,'Action') && isfield(DataIn.Action,'RUN') && isequal(DataIn.Action.RUN,0)


[730]  35  prompt = {'npx';'npy'};


 36  dlg_title = 'get the filter size in x and y';


 37  num_lines= 2;


 38  def = { '20';'20'};


 39  if isfield(Param,'TransformInput')&&isfield(Param.TransformInput,'FilterBoxSize_x')&&...


 40  isfield(Param.TransformInput,'FilterBoxSize_y')


 41  def={num2str(Param.TransformInput.FilterBoxSize_x);num2str(Param.TransformInput.FilterBoxSize_y)};


 42  end


 43  answer = inputdlg(prompt,dlg_title,num_lines,def);


 44  DataOut.TransformInput.FilterBoxSize_x=str2num(answer{1}); %size of the filtering window


 45  DataOut.TransformInput.FilterBoxSize_y=str2num(answer{2}); %size of the filtering window


 46  return


 47  end


 48 


 49  DataOut=DataIn; %default


 50 


[40]  51  %definition of the cos shape matrix filter


[730]  52  ix=[1/2Param.TransformInput.FilterBoxSize_x/2:1/2+Param.TransformInput.FilterBoxSize_x/2];%


 53  iy=[1/2Param.TransformInput.FilterBoxSize_y/2:1/2+Param.TransformInput.FilterBoxSize_y/2];%


 54  %del=np/3;


[40]  55  %fct=exp((ix/del).^2);


[730]  56  fct2_x=cos(ix/((Param.TransformInput.FilterBoxSize_x1)/2)*pi/2);


 57  fct2_y=cos(iy/((Param.TransformInput.FilterBoxSize_y1)/2)*pi/2);


[40]  58  %Mfiltre=(ones(5,5)/5^2);


[730]  59  Mfiltre=fct2_y'*fct2_x;


[40]  60  Mfiltre=Mfiltre/(sum(sum(Mfiltre)));%normalize filter


 61 


[730]  62  Atype=class(DataIn.A);% detect integer 8 or 16 bits


[93]  63  if numel(size(DataIn.A))==3


 64  DataOut.A=filter2(Mfiltre,sum(DataIn.A,3));%filter the input image, after summation on the color component (for color images)


 65  DataOut.A=uint16(DataOut.A); %transform to 16 bit images


 66  else


 67  DataOut.A=filter2(Mfiltre,DataIn.A)


 68  DataOut.A=feval(Atype,DataOut.A);%transform to the initial image format


 69  end


[810]  70 

