gusucode.com > 基于matlab软件,实现双目视觉原理的摄像机标定,能根据各视场图像求内、外部参数 > 基于matlab软件,实现双目视觉原理的摄像机标定,能根据各视场图像求内、外部参数/TOOLBOX_calib/smooth_images.m

    % Anisotropically diffuse the calibration image
% to enhance the corner detection


fprintf(1,'Anisotropic diffusion of the images for corner enhancement (the images have to be loaded in memory)\n');


ker = [1/4 1/2 1/4];
ker2 = conv2(ker,ker);
ker2 = conv2(ker2,ker);
ker2 = conv2(ker2,ker);



if ~exist(['I_' num2str(ind_active(1))]),
   ima_read_calib;
end;

check_active_images;   

format_image2 = format_image;
if format_image2(1) == 'j',
   format_image2 = 'bmp';
end;

for kk = 1:n_ima,
   
   if exist(['I_' num2str(kk)]),
      
      %fprintf(1,'%d...',kk);
      
      eval(['I = I_' num2str(kk) ';']);
      
      
      % Compute the sigI automatically:
      [nn,xx] = hist(I(:),50);
      nn = conv2(nn,ker2,'same');
      
      max_nn = max(nn);
      
      
      localmax = [0 (nn(2:end-1)>=nn(3:end)) & (nn(2:end-1) > nn(1:end-2)) 0] .* (nn >= max_nn/5);
      
      %plot(xx,nn);
      %hold on;
      %plot(xx,nn .* localmax,'r' );
      %hold off;
     
      localmax_ind = find(localmax);
      nn_local_max = nn(localmax_ind);
      
      % order the picks:
      [a,b] = sort(-nn_local_max);
      
      localmax_ind = localmax_ind(b);
      nn_local_max = nn_local_max(b);
      
      sig_I = abs(xx(localmax_ind(1)) - xx(localmax_ind(2)))/4.25;
      
      
      
      
      I2 = anisdiff(I,sig_I,30);
      
      
   	if ~type_numbering,   
      	number_ext =  num2str(image_numbers(kk));
   	else
      	number_ext = sprintf(['%.' num2str(N_slots) 'd'],image_numbers(kk));
   	end;
   	
      ima_name2 = [calib_name '_smth' number_ext '.' format_image2];
      
      fprintf(1,['Saving smoothed image under ' ima_name2 '...\n']);

      if format_image2(1) == 'p',
         if format_images2(2) == 'p',
            saveppm(ima_name2,uint8(round(I2)));
         else
            savepgm(ima_name2,uint8(round(I2)));
         end;
      else
         if format_image2(1) == 'r',
            writeras(ima_name2,round(I2),gray(256));
         else
            imwrite(uint8(round(I2)),gray(256),ima_name2,format_image2);
         end;
      end;
      
   end;
   
end;

fprintf(1,'\ndone\n');