www.pudn.com > src.rar > crack_fill.m, change:2010-07-20,size:2029b


 
%-------------------------------------------------------- 
% desc:       
%   I classify pixels which don't have value to two category, 
%   one is "crack", which one pixel wide and caused by sample. 
%   Another is "hole", caused by disocclusion, may be grouped 
%   in large area. 
%    
%   The crack was caused by sampling, so we can do inverse 
%   warping to retrieve the value. (implement in this .m file) 
%    
%   The hole was cause by disocclusion, there has no information 
%   at that area. Inverse warping can't retrieve a value which 
%   not exist, so we do inpainting to inpaint these area. 
%   (implement in inpaint.m) 
%-------------------------------------------------------- 
 
function result=crack_fill(view,texref,dmref,texwarp,dmwarp,crack,dpwarp) 
 
% do median filter to warped depth map (3x3) 
m=medfilt2(dmwarp,[3,3]); 
 
for y=2:size(dmwarp,1)-1  
    for x=2:size(dmwarp,2)-1 
         
        if(crack(y,x) && m(y,x)~=dmwarp(y,x)) 
             
            % the crack lack of texture, depth and disparity, 
            % so I suppose the crack was one pixel width 
            % and the left and right pixels weren't cracks, 
            % then I get the disparity of this crack from it's 
            % neighbor. 
             
            % Disparity : disparity of this crack (warped view coord)  
            Disparity=round((dpwarp(y,x-1)+dpwarp(y,x+1))/2);  
             
            if(strcmp('left',view) && x-Disparity < size(texref,2) && x-Disparity>=1) 
                texwarp(y,x,:)=texref(y,x- Disparity,:); 
                dmwarp(y,x)=dmref(y,x- Disparity); 
            elseif(strcmp('right',view) && x+Disparity < size(texref,2) && x+Disparity>=1) 
                texwarp(y,x,:)=texref(y,x+ Disparity,:); 
                dmwarp(y,x)=dmref(y,x+ Disparity); 
            end 
             
            crack(y,x)=false; 
        end 
    end 
end 
 
result=struct(  'tex_filled',texwarp,... 
                'dm_filled',dmwarp,... 
                'crack_filled',crack);