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');