📄 defocusunif.m
字号:
function [I] = defocusUnif(Radiance,sigma)% Generate defocused images (uniform blur)%% Copyright 2006 Paolo Favaro (p.favaro@hw.ac.uk)% % School of Engineering and Physical Sciences% Heriot-Watt University, Edinburgh, UK% % Last revision: May 2006%% This program can be used only for research purposes.% This program is distributed WITHOUT ANY WARRANTY; % without even the implied warranty of MERCHANTABILITY % or FITNESS FOR A PARTICULAR PURPOSE.sigmamax = max(sigma(:));win = ceil(sigmamax*3);% extend domainRadiance_ext = ones(size(Radiance,1)+... 2*win,size(Radiance,2)+... 2*win,size(Radiance,3));Radiance_ext(win+1:end-win,win+1:end-win,:) = Radiance;if win>0 Radiance_ext(1:win,:,:) = [... Radiance(win+1:-1:2,win+1:-1:2,:) ... Radiance(win+1:-1:2,:,:) ... Radiance(win+1:-1:2,end-1:-1:end-win,:)]; Radiance_ext(end-win+1:end,:,:) = [... Radiance(end-1:-1:end-win,end-1:-1:end-win,:) ... Radiance(end-1:-1:end-win,:,:) ... Radiance(end-1:-1:end-win,end-1:-1:end-win,:)]; Radiance_ext(win+1:end-win,1:win,:) = ... Radiance(:,win+1:-1:2,:); Radiance_ext(win+1:end-win,end-win+1:end,:) = ... Radiance(:,end-1:-1:end-win,:);end[M,N,K] = size(Radiance_ext);K = length(sigma); % number of focus settingstolerance = 1e-5; % threshold for Dirac delta approx. of kernelW = win*2+1; % max size of the kernel window% compute window coordinates[wi,wj] = meshgrid([-win:win],[-win:win]);% allocate space for the defocused imagesI = ones(M,N,K);% compute a defocused image for each focus settingfor k=1:K % integrate over pixel area if (sigma(k)>tolerance) wsi = wi/sqrt(2)/sigma(k); wsj = wj/sqrt(2)/sigma(k); wdx = .5/sqrt(2)/sigma(k); derf = erf(wsi+wdx)-erf(wsi-wdx); PSF = .25*derf.*derf'; else PSF = (wi==0).*(wj==0); % Dirac delta end I(:,:,k) = conv2(Radiance_ext(:,:,k),PSF,'same');end% restore original domainI = I(win+1:M-win,win+1:N-win,:);return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -