X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fimage-1.0.15%2Fqtgetblk.m;fp=octave_packages%2Fimage-1.0.15%2Fqtgetblk.m;h=9b0f092370cc77de89773430b4a548e373b3b690;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/image-1.0.15/qtgetblk.m b/octave_packages/image-1.0.15/qtgetblk.m new file mode 100644 index 0000000..9b0f092 --- /dev/null +++ b/octave_packages/image-1.0.15/qtgetblk.m @@ -0,0 +1,162 @@ +## Copyright (C) 2004 Josep Mones i Teixidor +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; If not, see . + +## -*- texinfo -*- +## @deftypefn {Function File} {[@var{vals}] = } qtgetblk (@var{I},@var{S},@var{dim}) +## @deftypefnx {Function File} {[@var{vals},@var{idx}] = } qtgetblk (@var{I},@var{S},@var{dim}) +## @deftypefnx {Function File} {[@var{vals},@var{r},@var{c}] = } qtgetblk (@var{I},@var{S},@var{dim}) +## Obtain block values from a quadtree decomposition. +## +## [vals]=qtgetblk(I,S,dim) returns a dim-by-dim-by-k array in +## @var{vals} which contains the dim-by-dim blocks in the quadtree +## decomposition (@var{S}, which is returned by qtdecomp) of @var{I}. If +## there are no blocks, an empty matrix is returned. +## +## [vals,idx]=qtgetblk(I,S,dim) returns @var{vals} as described above. +## In addition, it returns @var{idx}, a vector which contains the linear +## indices of the upper left corner of each block returned (the same +## result as find(full(S)==dim)). +## +## [vals,r,c]=qtgetblk(I,S,dim) returns @var{vals} as described, and two +## vectors, @var{r} and @var{c}, which contain the row and column +## coordinates of the blocks returned. +## +## @seealso{qtdecomp, qtsetblk} +## @end deftypefn + +## Author: Josep Mones i Teixidor + +function [varargout] = qtgetblk(I, S, dim) + if (nargin!=3) + usage("[vals,r,c]=qtgetblk(I,S,dim), [vals,idx]=qtgetblk(I,S,dim)"); + endif + if (nargout>3) + usage("[vals,r,c]=qtgetblk(I,S,dim), [vals,idx]=qtgetblk(I,S,dim)"); + endif + + ## get blocks + [i,j,v]=find(S); + + ## filter the ones which match dim + idx=find(v==dim); + + if(length(idx)==0) + for i=1:nargout + varargout{i}=[]; + endfor + else + r=i(idx); + c=j(idx); + + ## copy to a dim-by-dim-by-k array + vals=zeros(dim,dim,length(idx)); + for i=1:length(idx) + vals(:,:,i)=I(r(i):r(i)+dim-1,c(i):c(i)+dim-1); + endfor + + varargout{1}=vals; + + if(nargout==3) + varargout{2}=r; + varargout{3}=c; + elseif(nargout==2) + varargout{2}=(c-1)*rows(I)+r; + endif + endif +endfunction + + +%!demo +%! [vals,r,c]=qtgetblk(eye(4),qtdecomp(eye(4)),2) +%! % Returns 2 blocks, at [1,3] and [3,1] (2*2 zeros blocks) + +%!shared A,S +%! A=[ 1, 4, 2, 5,54,55,61,62; +%! 3, 6, 3, 1,58,53,67,65; +%! 3, 6, 3, 1,58,53,67,65; +%! 3, 6, 3, 1,58,53,67,65; +%! 23,42,42,42,99,99,99,99; +%! 27,42,42,42,99,99,99,99; +%! 23,22,26,25,99,99,99,99; +%! 22,22,24,22,99,99,99,99]; +%! S=qtdecomp(A,10); + +%!test +%! [va]=qtgetblk(A,S,8); +%! [vb,r,c]=qtgetblk(A,S,8); +%! [vc,i]=qtgetblk(A,S,8); +%! assert(va, vb); +%! assert(va, vc); +%! assert(i,[]); +%! assert(r,[]); +%! assert(c,[]); +%! R=[]; +%! assert(va,R); + + +%!test +%! [va]=qtgetblk(A,S,4); +%! [vb,r,c]=qtgetblk(A,S,4); +%! [vc,i]=qtgetblk(A,S,4); +%! assert(va, vb); +%! assert(va, vc); +%! assert(i, find(full(S)==4)); +%! assert(r,[1;5]); +%! assert(c,[1;5]); +%! R=zeros(4,4,2); +%! R(:,:,1)=A(1:4,1:4); +%! R(:,:,2)=A(5:8,5:8); +%! assert(va,R); + +%!test +%! [va]=qtgetblk(A,S,2); +%! [vb,r,c]=qtgetblk(A,S,2); +%! [vc,i]=qtgetblk(A,S,2); +%! assert(va, vb); +%! assert(va, vc); +%! assert(i, find(full(S)==2)); +%! assert(r,[7;5;7;1;3;1;3]); +%! assert(c,[1;3;3;5;5;7;7]); +%! R=zeros(2,2,7); +%! R(:,:,1)=A(7:8,1:2); +%! R(:,:,2)=A(5:6,3:4); +%! R(:,:,3)=A(7:8,3:4); +%! R(:,:,4)=A(1:2,5:6); +%! R(:,:,5)=A(3:4,5:6); +%! R(:,:,6)=A(1:2,7:8); +%! R(:,:,7)=A(3:4,7:8); +%! assert(va,R); + +% +% $Log$ +% Revision 1.4 2007/03/23 16:14:37 adb014 +% Update the FSF address +% +% Revision 1.3 2007/01/04 23:50:47 hauberg +% Put seealso before end deftypefn +% +% Revision 1.2 2007/01/04 23:41:47 hauberg +% Minor changes in help text +% +% Revision 1.1 2006/08/20 12:59:35 hauberg +% Changed the structure to match the package system +% +% Revision 1.3 2006/01/02 20:53:42 pkienzle +% Reduce number of shared variables in tests +% +% Revision 1.2 2004/08/11 19:52:41 jmones +% qtsetblk added +% +%