image processing - fft2 function with reveresed matrix matlab -
i'm reading article 'deriving intrinsic images image sequences'. i'm trying results article.
fnr
reversed filter of fn:fn(x,y)=fnr(-x,-y).
use fourier , pseudo-inverse solve equation , find
g : g*(sigma(fnr*fn)=delta
(sigma on n , '*' convulotion everywhere),
%% fnt_fn_conv=sigma(fnr*fn) fftr = fft2(fnr_fn_conv); % find g fftrp = pinv(fftr); g = delta_fft x fftrp; (matrix mul) g = ifft2(g);
my problem g*(sigma(fnr*fn) **!=** delta
, g wrong ! how should build fnr
? fnr=rot90(fn, 2)
sufficient, or have change center of fnr
0 padding fourier function work correctly ?
update :
the filtered images looks fine... used 2 derivative filters ( horizental , vertical).
% given dx dy reconstruct image % here convolutions using fft2 function [im,invkhat,k]=reconsedge3(dx,dy,invkhat) im=zeros(size(dx)); [sx,sy]=size(dx); mxsize=max(sx,sy); if ~exist('invkhat') [invk,k]=invdel2(2*mxsize); invkhat=fft2(invk); %fourier convolotion g end %% %% sigma fnr*r_n 2 filters imx=conv2(dx,fliplr([0 1 -1]),'same'); imy=conv2(dy,flipud([0;1;-1]),'same'); ims=imx+imy; sigma %% imshat=fft2(ims,2*mxsize,2*mxsize); im=real(ifft2(invkhat.*imshat)); %r im=im(mxsize+1:mxsize+sx,mxsize+1:mxsize+sy); function [invk,k]=invdel2(isize) %sigma(7) fnr*fn k=zeros(isize); k(isize/2,isize/2)=-4; k(isize/2+1,isize/2)=1; k(isize/2,isize/2+1)=1; k(isize/2-1,isize/2)=1; k(isize/2,isize/2-1)=1; khat=fft2(k); %fourier sigma(7) %add 1 inverse without zeros i=find(khat==0); % find zeros in khat khat(i)=1; % put 1 zeros invkhat=1./khat; % inverse invkhat(i)=0; %dec 1 added invk=ifft2(invkhat); invk=-real(invk); % invk , delta not in same dim, convolve % , use transform fourier invk in reconsedge3 invk=conv2(invk,[1 0 0;0 0 0;0 0 0],'same');
note: conv2(invkhat,k)!=delta why ?!
https://imgproc2014.github.io/shadow_removal/
implemented article , finished project !
thanks anyways...
Comments
Post a Comment