📄 function_mc_generateobservations.m
字号:
function Output = GenerateObservations(Input,size_initial,v_support)% function generates blurred noisy observations for Blind Deconvolution % problem in Multiframe (Multichannel) Imaging %% Arguments:% Input.y - true images (y)% Input.v_true{:} - cell array of true PSFs% Input.BSNR(:) - array of BSNR value for noise% Input.shifts(:,:) - 2D array of vertical and horizontal shifts of% observations% Input.NumberOfObservations - number of observations = min(length(Input.v_true),length(Input.BSNR))%% size_initial=5; % support size of INITIAL PSF% v_support=zeros(15,15); % SUPPORT of PSFs, odd sizes only% used for errors, illustration of PSFs%%% Returns:% Output.v_init - initial PSFs% Output.v_true - true PSFs with same support% Output.sigma - std of noise for each observation% Output.z - array of observations% Output.Z - FT of observations%% Observation model:% z(j) = y*v(j)+sigma(j)n% z(j) : blurred noisy observations, j=1,...,L% y : true image (assumed as unknown)% v(j) : point-spread functions% n : gaussian white noise with standard deviation sigma(j) for every % jth obsrvation z(j)% * : convolution%%% The files are prepared in Tampere University of Technology, Institute of% Information Technology, 2006.%% Vladimir Katkovnik, Dmitriy Paliy*% *e-mail: dmitriy.paliy@tut.fiif nargin<3, v_support=zeros(15,15); % SUPPORT of PSFs, odd sizes only % used for errors, illustration of PSFsend;if nargin<2, size_initial=5; % support size of INITIAL PSFend;%%% FIX SEED FOR RANDOM PROCESSES (OPTIONAL)init=2055615788; randn('seed',init);[yN,xN,zN] = size(Input.y);Output.v = zeros(yN,xN,Input.NumberOfObservations,size(Input.y,3));for i=1:Input.NumberOfObservations, %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% GENERATES INITIAL PSF %%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% v = fspecial('gaussian',size_initial,1); v = function_KernelsForFFT( v, v_support); % pad PSF with zeros to whole image domain, and centers it. [ghy1,ghx1]=size(v); big_v1_initial=zeros(yN,xN); big_v1_initial(1:ghy1,1:ghx1) = v; Output.v_true{i} = function_KernelsForFFT( Input.v_true{i}, v_support); for ccolor=1:size(Input.y,3), Output.v_init(:,:,i,ccolor) = circshift(big_v1_initial,-round([(ghy1-1)/2 (ghx1-1)/2])); Output.v(:,:,i,ccolor) = Output.v_init(:,:,i,ccolor); % function_KernelsForFFT( Input.v_true{i}, zeros(yN,xN)); % performs blurring (convolution is obtained by product in frequency domain) y_blur = real(ifft2(fft2(fftshift(function_KernelsForFFT( Input.v_true{i}, zeros(yN,xN)))).*fft2(Input.y(:,:,ccolor)))); y_blur = circshift(y_blur,[Input.shifts(i,1) Input.shifts(i,2)]); %%% ADDING NOISE to BLURRED SIGNAL %%%%%%%%%%%% % sigma of noise in blurred image given the desired BSNR if Input.BSNR(i)>0, Output.sigma(i) = sqrt(norm(y_blur(:)-mean(y_blur(:)),2)^2 /(xN*yN*10^(Input.BSNR(i)/10))); else Output.sigma(i) = 0; end; n1 = Output.sigma(i)*randn(size(y_blur)); % white Gaussian noise with variance org_sigma^2 Output.z(:,:,i,ccolor) = y_blur + n1; Output.Z(:,:,i,ccolor) = fft2(Output.z(:,:,i,ccolor)); end; end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -