gusucode.com > 基于matlab软件,实现双目视觉原理的摄像机标定,能根据各视场图像求内、外部参数 > 基于matlab软件,实现双目视觉原理的摄像机标定,能根据各视场图像求内、外部参数/TOOLBOX_calib/projector_marker.m
if active_images(i), %fprintf(1,'Loading image %d...\n',i); if ~type_numbering, number_ext = num2str(image_numbers(i)); else number_ext = sprintf(['%.' num2str(N_slots) 'd'],image_numbers(i)); end; ima_namep = [proj_name number_ext 'p.' format_image]; ima_namen = [proj_name number_ext 'n.' format_image]; ima_namer = [proj_name number_ext 'r.' format_image]; ima_nameb = [camera_name number_ext '.' format_image]; if i == ind_active(1), fprintf(1,'Loading image '); end; fprintf(1,'%d...',i); if format_image(1) == 'p', if format_image(2) == 'p', Ip = double(loadppm(ima_namep)); In = double(loadppm(ima_namen)); Ir = double(loadppm(ima_namer)); Ib = double(loadppm(ima_nameb)); else Ip = double(loadpgm(ima_namep)); In = double(loadpgm(ima_namen)); Ir = double(loadpgm(ima_namer)); Ib = double(loadpgm(ima_nameb)); end; else if format_image(1) == 'r', Ip = readras(ima_namep); In = readras(ima_namen); Ir = readras(ima_namer); Ib = readras(ima_nameb); else Ip = double(imread(ima_namep)); In = double(imread(ima_namen)); Ir = double(imread(ima_namer)); Ib = double(imread(ima_nameb)); end; end; if size(Ip,3)>1, Ip = 0.299 * Ip(:,:,1) + 0.5870 * Ip(:,:,2) + 0.114 * Ip(:,:,3); In = 0.299 * In(:,:,1) + 0.5870 * In(:,:,2) + 0.114 * In(:,:,3); Ir = 0.299 * Ir(:,:,1) + 0.5870 * Ir(:,:,2) + 0.114 * Ir(:,:,3); Ib = 0.299 * Ib(:,:,1) + 0.5870 * Ib(:,:,2) + 0.114 * Ib(:,:,3); end; %IIp = Ip - In; %Ip2 = Ip - Ib; %In2 = In - Ib; %imax = max(IIp(:)); %imin = min(IIp(:)); %IIp = 255*(IIp - imin)/(imax - imin); %indplus = find(IIp >= 255/2); %indminus = find(IIp < 255/2); %IIp(indplus) = 255*ones(length(indplus),1); %IIp(indminus) = zeros(length(indminus),1); delta_I = Ip - In; %IIp = 255*(1 + exp(-delta_I/2)).^(-1); IIp = (Ip >= In)*255; IIp = conv2(conv2(IIp,[1/4 1/2 1/4],'same'),[1/4 1/2 1/4]','same'); if 0, figure(4); image(IIp); colormap(gray(256)); axis off; end; eval(['Ip_' num2str(i) ' = IIp;']); eval(['In_' num2str(i) ' = 255 - IIp;']); I_marker2 = Ib-Ir; if DEBUG, Imax = max(I_marker2(:)); Imin = min(I_marker2(:)); I_marker_out = 255*(I_marker2 - Imin)/(Imax - Imin); figure(3); image(I_marker_out); colormap(gray(256)); [xr,yr] = ginput(1); xr_list(i) = xr; yr_list(i) = yr; else I_marker = I_marker2 >50; I_marker = eliminate_boundary(I_marker); I_marker = eliminate_boundary(I_marker); [ymm,xmm] = find(I_marker); if length(xmm)<10, fprintf(1,'WARNING!! No marker in image %d!!!!\n',i); else xr = mean(xmm); yr = mean(ymm); xr_list(i) = xr; yr_list(i) = yr; end; end; figure(2); image(IIp); colormap(gray(256)); hold on; plot(xr,yr,'go'); hold off; title(['Image ' num2str(i)]); drawnow; if ~DEBUG waitforbuttonpress; end; end;