⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plotft.m

📁 Sparse Signal Representation using Overlapping Frames (matlab toolbox)
💻 M
字号:
function  varargout=PlotFt(F,BlkSize,BlkDist,FontSize)% PlotFt     Plot the image blocks in frame F, F is size NxK
%            and N is prod(BlkSize)
%
% PlotFt(F,BlkSize,BlkDist,FontSize);
% Ir=PlotFt(F,BlkSize,BlkDist,FontSize);
%----------------------------------------------------------------------
% arguments:
%  F        The representation vectors or dictionary, size NxK.
%  BlkSize  The block size to use, BlockSize=[7,7]; for a 7x7 block 
%  BlkDist   Distance between each block (in pixels)
%  FontSize  >0 : Display numbers below each block using FontSize
%  Ir        The image that is plotted, (no distance between blocks)
%----------------------------------------------------------------------

%----------------------------------------------------------------------
% Copyright (c) 2002.  Karl Skretting.  All rights reserved.
% Hogskolen in Stavanger (Stavanger University), Signal Processing Group
% Mail:  karl.skretting@tn.his.no   Homepage:  http://www.ux.his.no/~karlsk/
% 
% HISTORY:
% Ver. 1.0  17.01.2002  KS: made function, based on PlotF2D
% Ver. 1.1  27.11.2002  KS: moved from ..\Textures to ..\FrameTools%----------------------------------------------------------------------

Mfile='PlotFt';

% check input arguments, and assign values to arguments
if (nargin < 2); 
   error([Mfile,': function must have 2 input arguments, see help.']); 
end
if (nargin < 3); BlkDist=0; end;
if (nargin < 4); FontSize=0; end;

[N,K]=size(F);
if N~=prod(BlkSize)
   error([Mfile,': N~=prod(BlkSize).']); 
end

Mb=BlkSize(1);
Nb=BlkSize(2);
y=ceil(sqrt(K));
x=ceil(K/y);
if (x*y)>K; F=[F,ones(N,x*y-K)]; end;   % add some empty blocks
[N,K]=size(F);    % now K is a square number
Mi=Mb*x;
Ni=Nb*y;

Ir=Reorder(F,[Mi,Ni],BlkSize,-1);      
% put in distance to get the expanded image (includes space between blocks)
IrMax=max(Ir(:));
IrMin=min(Ir(:));
Ie=IrMax*ones([Mi+BlkDist*(x+1),Ni+BlkDist*(y+1)]);
for i=0:(x-1)
   for j=0:(y-1)
      k=i*y+j+1;
      if k<=K
         Ie(BlkDist+i*(Mb+BlkDist)+(1:Mb),BlkDist+j*(Nb+BlkDist)+(1:Nb))=Ir(i*Mb+(1:Mb),j*Nb+(1:Nb));
      end
   end
end
%
clf
IrMax=max(abs([IrMax,IrMin]));
IrMax=0.3;
imagesc(Ie,[-IrMax,IrMax]);
colormap(gray(256));
Efactor=1;
% colorbar;
axis off;
axis equal;
hold on;
if FontSize
   for i=0:(x-1)
      for j=0:(y-1)
         k=i*y+j+1;
         if k<=K
            H=text(j*(Nb+BlkDist)+BlkDist+1,(i+1)*(Mb+BlkDist)+0.5,int2str(k));
            set(H,'FontSize',FontSize);
            set(H,'VerticalAlignment','top');
            set(H,'HorizontalAlignment','left');
            if Efactor > 1
               % now plot boxes to indicate how blocks overlap
               i1=i*(Mb+BlkDist)+BlkDist+0.5+Mb*(Efactor-1)/(2*Efactor);
               i2=i*(Mb+BlkDist)+BlkDist+0.5+Mb*(Efactor+1)/(2*Efactor);
               j1=j*(Mb+BlkDist)+BlkDist+0.5+Mb*(Efactor-1)/(2*Efactor);
               j2=j*(Mb+BlkDist)+BlkDist+0.5+Mb*(Efactor+1)/(2*Efactor);
               plot([j1,j1,j2,j2,j1],[i1,i2,i2,i1,i1],'-k');
            end
         end
      end
   end
   H=text(size(Ie,2)-BlkDist,size(Ie,1)+BlkDist,[Mfile,': plot made ',datestr(now,0)]);
   set(H,'FontSize',FontSize);
   set(H,'VerticalAlignment','top');
   set(H,'HorizontalAlignment','right');
end
hold off;
if (nargout>=1); varargout(1)={Ir}; end;

return

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -