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

📄 varianttransposemultiply.m

📁 curves ti si s a nice code.
💻 M
字号:
function Y = variantTransposeMultiply( psfMatData, X, padsize );%%           Y = variantTransposeMultiply( psfMatData, X, padsize );%%  This function computes the transpose multiplication of a spatially variant%  point spread function (PSF) times an image:%                y = A'*x%%  Here we assume A is made up of a several space invariant PSFs, and%  use piece-wise constant interpolation of them to define the spatially%  variant PSF.  That is, A has the form:%%       A  = D1*A1  + D2*A2  + ... + Dp*Ap%  ==>  A' = A1'*D1 + A2'*D2 + ... + Ap'*Dp%%  Input:%   psfMatData  -  cell array containing the matrix data of each of the%                  individual PSFs.  This matrix data is usuall computed%                  from onePsfMatrix.m%            X  -  array containing the image to which the psfMatrix%                  is to be multiplied.%%  Output:%            Y  -  contains the result after PSF transpose multiplication.%%  J. Nagy  1/7/02imsize = size( X ) - 2*padsize;%%  We partition the image domain into regions of equal sizes,%  according to the number of PSFs we have ...%nregions = size(psfMatData);rsize = ceil(imsize ./ nregions);%%  In order for this to be consistent for 2-D and 3-D images, we need to make%  sure there is a third dimension ...%if length(imsize) == 1  imsize = [imsize, 1, 1];  rsize = [rsize, 1, 1];  nregions = [nregions, 1, 1];  padsize = [padsize, 0, 0];elseif length(imsize) == 2  imsize = [imsize, 1];  rsize = [rsize, 1];  nregions = [nregions, 1];  padsize = [padsize, 0];end%%  Coding the rest of this will be easier if all of the image subregions%  have the same dimensions.  If it's not, we pad with a few zeros to make%  it so ...%padsize1 = rsize .* nregions - imsize;if any( padsize1 < 0 )  error('Something is wrong here ...')endX = padarray(X, padsize1, 'post');%%  Now we get information about beginning and ending indices of subregions%  so we can "put" and "get" subregions correctly ...%[RIidx, RJidx, RKidx] = region_indices( nregions, rsize );[EIidx, EJidx, EKidx] = eregion_indices( RIidx, RJidx, RKidx, 2*padsize );RIidx = RIidx + padsize(1);, RIidx(1) = 1;, RIidx(end) = RIidx(end) + padsize(1);RJidx = RJidx + padsize(2);, RJidx(1) = 1;, RJidx(end) = RJidx(end) + padsize(2);RKidx = RKidx + padsize(3);, RKidx(1) = 1;, RKidx(end) = RKidx(end) + padsize(3);[TIidx, TJidx, TKidx] = tregion_indices(RIidx, RJidx, RKidx, padsize);%%  Now loop over all the subregions ...%Y = zeros( size(X) );for k = 1:nregions(3)  for j = 1:nregions(2)    for i = 1:nregions(1)      eregionSize = [diff(EIidx(i,:)), diff(EJidx(j,:)), diff(EKidx(k,:))] + 1;      Xt = zeros( eregionSize );      Xt(TIidx(i,1):TIidx(i,2), TJidx(j,1):TJidx(j,2), TKidx(k,1):TKidx(k,2)) =  ...            X(RIidx(i,1):RIidx(i,2), RJidx(j,1):RJidx(j,2), RKidx(k,1):RKidx(k,2));      p = padsize(1:length(size(Xt)));      Xt = padarray(Xt, p,'both');      Y(EIidx(i,1):EIidx(i,2), EJidx(j,1):EJidx(j,2), EKidx(k,1):EKidx(k,2)) = ...            Y(EIidx(i,1):EIidx(i,2), EJidx(j,1):EJidx(j,2), EKidx(k,1):EKidx(k,2)) + ...            invariantMultiply( conj(psfMatData{i,j,k}), Xt, p );     end  endendidx = [padsize+1; padsize+imsize];Y = Y( idx(1,1):idx(2,1), idx(1,2):idx(2,2), idx(1,3):idx(2,3) );

⌨️ 快捷键说明

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