光フィールド全焦点画像生成コード記録
16925 ワード
コードを記録してバックアップしましょう
一丶Tao深さ抽出コード生成フルフォーカス画像
二丶単一勾配生成全焦点画像myFocus.m
computeAllImage.m
computeAllGradient.m
一丶Tao深さ抽出コード生成フルフォーカス画像
function depth_output = compute_LFdepth(file_path)
% compute_LFdepth
% : computes the depth estimation of a Lytro LF Image
% Input : file_path (file path to the .jpeg file)
% Output : depth_output (x,y) buffer that contains 0-255
% 0 is closest, 255 is farthest
% NOTE : this function supports our Lytro camera. Lytro cameras
% have manufacturing inconsistencies for the micro-lens array.
% SYSTEM REQUIREMENTS:
% PC/MAC/LINUX
% MATLAB 2009B (tested)
% CONTACT:
% Michael W. Tao ([email protected])
% TERMS OF USE :
% Any scientific work that makes use of our code should appropriately
% mention this in the text and cite our ICCV 2013 paper. For commerical
% use, please contact us.
% PAPER TO CITE:
% Michael W. Tao, Sunil Hadap, Jitendra Malik, and Ravi Ramamoorthi. ?Depth
% from Combining Defocus and Correspondence Using Light-Field Cameras?.
% In Proceedings of International Conference on Computer Vision (ICCV),
% 2013.
% BIBTEX TO CITE:
% @inproceedings{Tao13,
% author={Tao, {M. W.} and Hadap, S. and Malik, J. and Ramamoorthi, R.},
% title={Depth from combining defocus and correspondence using light-field cameras},
% year={2013},
% booktitle={ICCV}
% }
% Copyright (c) 2013
% All rights reserved.
% Redistribution and use in source and binary forms, with or without
% modification, are permitted provided that the following conditions are
% met:
% * Redistributions of source code must retain the above copyright
% notice, this list of conditions and the following disclaimer.
% * Redistributions in binary form must reproduce the above copyright
% notice, this list of conditions and the following disclaimer in
% the documentation and/or other materials provided with the distribution
% * Proper citation to the paper above
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
% POSSIBILITY OF SUCH DAMAGE.
% LYTRO COPYRIGHT :
% We are not affiliated, associated, authorized, endorsed by, or in any way
% officially connected with Lytro, or any of its subsidiaries or its
% affiliates. The official Lytro web site is available at www.lytro.com.
% All Lytro hardware, software, etc. are registered trademarks of Lytro.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% VARIABLE DEFINITIONS AND EXPLANATIONS
% x' : x' LF coordinate
% y' : y' LF coordinate
% x : x image spatial coordinate
% y : y image spatial coordinate
% u : u angular coordinate
% v : v angular coordinate
% image_cords : (x,y) for each image coordinate (x,y), gives you the
% LF_RAW data coordinate (x',y') that contains the
% center pixel coordinate that corresponds to (x,y)
% Lytro_RAW : (x',y') sensor values (needs demosaic)
% x': x RAW LF coordinate
% y': y RAW LF coordinate
% RANGE : [0,255]
% Lytro_RAW_Demosaic: (x',y',c) color values (demosaiced)
% x': x RAW LF coordinate
% y': y RAW LF coordinate
% c': c color channel (1 2 3 -> R G B format)
% RANGE : [0,1]
% LF_Remap : (x',y',c) color values
% x': x REMAPPED LF coordinate
% y': y REMAPPED LF coordinate
% c': c color channel (1 2 3 -> R G B format)
% RANGE : [0,1]
% x'= u + UV_diameter * (x - 1)
% y'= v + UV_diameter * (y - 1)
% IM_pinhole : (x,y,c) color values of center pinhole view
% x: x image spatial coordinate
% y: y image spatial coordinate
% c: c color channel (1 2 3 -> R G B format)
% RANGE : [0,1]
% defocus_response : (x,y,d) defocus - higher the better
% x: x image spatial coordinate
% y: y image spatial coordinate
% d: depth value [1,depth_resolution]
% RANGE : [0,1]
% corresp_response : (x,y,d) corresp - lower the better
% x: x image spatial coordinate
% y: y image spatial coordinate
% d: depth value [1,depth_resolution]
% RANGE : [0,1]
% defocus_depth : (x,y) defocus confidence - higher the better
% x: x image spatial coordinate
% y: y image spatial coordinate
% RANGE : [1,depth_resoltuion]
% corresp_depth : (x,y) depth value
% x: x image spatial coordinate
% y: y image spatial coordinate
% RANGE : [1,depth_resolution]
% defocus_confi : (x,y,d) defocus confidence - higher the better
% x: x image spatial coordinate
% y: y image spatial coordinate
% RANGE : [0,1]
% corresp_confi : (x,y,d) corresp confidence - lower the better
% x: x image spatial coordinate
% y: y image spatial coordinate
% RANGE : [0,1]
%% USER PARAMETERS
%% INTERNAL PARAMETERS
%%% LF sizes --------------
UV_radius = 3 ;
UV_diameter = (2*UV_radius+1) ;
UV_size = UV_diameter^2 ;
%%% Shearing --------------
depth_resolution = 128 ;
alpha_min = 1 ;
alpha_max = 2 ;
%%% Analysis --------------
% defocus analysis radius
defocus_radius = 9 ;
% correspondence analysis radius
corresp_radius = 9 ;
%%% Regularize --------------
WS_PENALTY_W1 = 0.6 ;
WS_PENALTY_W2 = 0.2 ;
lambda_flat = 2 ;
lambda_smooth = 2 ;
ROBUSTIFY_SMOOTHNESS = 1 ;
gradient_thres = 1.0 ;
SOFTEN_EPSILON = 1.0 ;
CONVERGE_FRACTION = 1 ;
%% O. Initialization
fprintf('O. Initializing *******
');
tic ;
% DEPDENDENCIES
addpath('required') ;
addpath('required/mex') ;
addpath('required/utilities') ;
addpath('required/utilities/regularize') ;
% LOAD CAMERA DATA
load('required/camera_data/image_cords') ;
x_size = x_size_fin ;
y_size = y_size_fin ;
% JPEG (RAW IMAGE)
Lytro_RAW = (imread(file_path)) ;
Lytro_RAW_Demosaic = im2double(demosaic(Lytro_RAW,'bggr')) ;
LF_x_size = size(image_cords,2)*UV_diameter ;
LF_y_size = size(image_cords,1)*UV_diameter ;
% GATHER PARAMTERS
LF_parameters = struct('LF_x_size',LF_x_size,...
'LF_y_size',LF_y_size,...
'x_size',x_size,...
'y_size',y_size,...
'UV_radius',UV_radius,...
'UV_diameter',UV_diameter,...
'UV_size',UV_size,...
'depth_resolution',depth_resolution,...
'alpha_min',alpha_min,...
'alpha_max',alpha_max,...
'defocus_radius',defocus_radius,...
'corresp_radius',corresp_radius,...
'WS_PENALTY_W1',WS_PENALTY_W1,...
'WS_PENALTY_W2',WS_PENALTY_W2,...
'lambda_flat',lambda_flat,...
'lambda_smooth',lambda_smooth,...
'ROBUSTIFY_SMOOTHNESS',ROBUSTIFY_SMOOTHNESS,...
'gradient_thres',gradient_thres,...
'SOFTEN_EPSILON',SOFTEN_EPSILON,...
'CONVERGE_FRACTION',CONVERGE_FRACTION...
) ;
fprintf(' Completed in %.3f seconds
',toc);
%% I. JPEG -> Our LF_Remap Standard and Pinhole Image
fprintf('I. Remapping LF JPEG to our standard *******
');
tic ;
% RAW to Remap
LF_Remap = RAW2REMAP...
(Lytro_RAW_Demosaic,image_cords,LF_parameters) ;
% Remape to Pinhole (Center View)
IM_Pinhole = REMAP2PINHOLE...
(LF_Remap,LF_parameters) ;
fprintf(' Completed in %.3f seconds
',toc);
%% II. Compute Defocus and Correspondence Responses
fprintf('II. Computing Defocus and Correspondence Responses *******
');
tic ;
%%%%% Output Buffers
defocus_depth = zeros(y_size,x_size) ;
corresp_depth = zeros(y_size,x_size) ;
defocus_confi = zeros(y_size,x_size) ;
corresp_confi = zeros(y_size,x_size) ;
%%%%% Intermediate Buffers
defocus_response = zeros(y_size,x_size,depth_resolution) ;
corresp_response = zeros(y_size,x_size,depth_resolution) ;
LF_Remap_alpha = zeros(LF_y_size,LF_x_size,3) ;
IM_Refoc_alpha = zeros(y_size,x_size,3) ;
% Analysis
alpha_step = (alpha_max-alpha_min)/depth_resolution ;
alpha_num = 1 ;
reverseStr = '' ;
for alpha = alpha_min:alpha_step:alpha_max
%%%% i. refocus : eqn. (1) -> (8)
% refocus
REMAP2REFOCUS_mex(x_size,y_size,...
UV_diameter,UV_radius,LF_Remap,...
LF_Remap_alpha,IM_Refoc_alpha,alpha) ;
filename=['E:\ \Tao\DEPTH_FROM_CORR_DEFOC\result\IMG5\',num2str(alpha_num),'.tif'];
imwrite(IM_Refoc_alpha,filename,'tif');
All_Refocus(:,:,:,alpha_num)=IM_Refoc_alpha(:,:,:);
%%%% ii. analysis
% depth from defocus : eqn. (2) (3)
defocus_response(:,:,alpha_num) =...
DEFOCUS_ANALYSIS(IM_Refoc_alpha,LF_parameters) ;
% depth from correspondence: eqn. (4) (5)
corresp_response(:,:,alpha_num) =...
CORRESP_ANALYSIS(LF_Remap_alpha,LF_parameters) ;
% housekeeping
msg = sprintf('Processing: %d/%d done!
',alpha_num,depth_resolution) ;
fprintf([reverseStr, msg]) ;
reverseStr = repmat(sprintf('\b'), 1, length(msg)) ;
alpha_num = alpha_num + 1 ;
end
fprintf(reverseStr) ;
fprintf(' Completed in %.3f seconds
',toc);
%% III. Compute Depth and Confidence
fprintf('III. Compute Depth and Confidence *******
');
tic ;
%%%% iii. depth estimation : eqn. (6)
defocus_depth = DEPTH_ESTIMATION(defocus_response,1) ;
corresp_depth = DEPTH_ESTIMATION(corresp_response,0) ;
%%%% iv. confidence measure: eqn. (7)
defocus_confi = PEAK_RATIO_CONFIDENCE(defocus_response,LF_parameters,1) ;
corresp_confi = PEAK_RATIO_CONFIDENCE(corresp_response,LF_parameters,0) ;
AllFocus_defocus=GetAllFocus(defocus_depth, All_Refocus);
imwrite(AllFocus_defocus,'D:\SU\Tao13_LF_Depth_Light\DEPTH_FROM_CORR_DEFOC_JPEGONLY\Desk\IMG5_defocus_focus.tif');
[defocus_confi,corresp_confi] =...
NORMALIZE_CONFIDENCE(defocus_confi,corresp_confi) ;
fprintf(' Completed in %.3f seconds
',toc);
%% IV. MRF Regularization
fprintf('IV. MRF Regularizing Depth *******
') ;
tic ;
%%%% (9) (10) (11)
depth_output = DEPTH_MRF(defocus_depth,corresp_depth,...
defocus_confi,corresp_confi,...
IM_Pinhole,LF_parameters) ;
imshow(depth_output)
depth=ceil(depth_output*256);
save('MRF_depth','depth');
AllFocus_MRF=GetAllFocus(depth, All_Refocus);
imwrite(AllFocus_MRF,'D:\SU\Tao13_LF_Depth_Light\DEPTH_FROM_CORR_DEFOC_JPEGONLY\Desk\IMG5_MRF_focus.tif');
fprintf(' Completed in %.3f seconds
',toc);
%% Finish
fprintf('Depth computation complete!**********************************
');
fprintf('Image Set: Defocus, Correspondence, Final depth estimations
');
depth_output_min = min(min(depth_output)) ;
depth_output_max = max(max(depth_output)) ;
depth_output = depth_output-depth_output_min/...
(depth_output_max-depth_output_min);
imshow([defocus_depth/255 corresp_depth/255 depth_output]) ;
end
二丶単一勾配生成全焦点画像myFocus.m
listing=dir('D:\SU\LF Tomographic Reconstruction\images\IMG5\*.tif')
AllImage=ComputeAllImage(listing,'D:\SU\LF Tomographic Reconstruction\images\IMG5\');
AllGradient=ComputeAllGradient(listing,'D:\SU\LF Tomographic Reconstruction\images\IMG5\');
[m,n,k]=size(AllGradient);
index=zeros(m,n);
for i =1:1:m
for j=1:1:n
[maxGradient,index(i,j)]=max(AllGradient(i,j,:));
end
end
save('index','index');
extended_Focus=GetAllFocus(index,AllImage);
save('focus','extended_Focus');
imshow(extended_Focus)
imwrite(extended_Focus,'D:\SU\Tao13_LF_Depth_Light\DEPTH_FROM_CORR_DEFOC_JPEGONLY\Desk\IMG5_Grad_focus.tif')
computeAllImage.m
function AllImage=ComputeAllImage(listing,filepath)
[M,N]=size(listing);
AllImage=[];
for i=1:M
filename=[num2str(i),'.tif'];
name=strcat(filepath,filename);
img1=imread(name);% listing
AllImage(:,:,:,i)=img1(:,:,:);
end
AllImage=uint8(AllImage);
save AllImage;
computeAllGradient.m
function AllGradient=ComputeAllGradient(listing,filepath)
[M,N]=size(listing);
for i=1:M
filename=listing(i).name;
name=strcat(filepath,filename);
img1=imread(name);% listing
gradient=ComputeFinalGradient(img1);%
AllGradient(:,:,i)=gradient(:,:);
end
save AllGradient