function im_uv = dewarp_pinhole_2d(im, P2D, u_axis, v_axis)
	Nu						= length(u_axis);
	Nv						= length(v_axis);
	[umat, vmat]		= ndgrid(u_axis, v_axis);
	uv_tilde				= [umat(:) vmat(:) ones(Nu*Nv,1)]';
	ij_tilde				= P2D * uv_tilde;
	lambda				= ij_tilde(3, :);
	imat					= reshape(ij_tilde(1,:) ./ lambda, [Nu Nv]);
	jmat					= reshape(ij_tilde(2,:) ./ lambda, [Nu Nv]);
	i_axis				= 1 : size(im, 1);
	j_axis				= 1 : size(im, 2);
	im_uv					= interp2(i_axis, j_axis, im', imat, jmat, 'linear');
end