A new approach to finding the 3D orientation of a textured planar surface is presented. By decomposing image space in a novel way that reflects the structure of the problem to be solved, a natural set of filters indexed by 3D orientation is obtained. The filters are applied at a single point in the image and the maximally responding filter is found. Its 3D orientation indices specify the orientation of the surface. The set of filters is large, making this 'pure' approach computationally expensive, so a method for using Gabor filters to select a subset of the 3D orientation detecting filters is presented. The result is a computationally efficient, practical algorithm. Only filter applications at a single point and simple operations on the filter outputs are needed. This method makes use of texture gradient information without the need for combining explicit measurements from multiple image points. The surface texture is assumed to be locally homogeneous, but not necessarily isotropic. The algorithm has an average error of 4 degrees in slant and tilt on a set of twelve images of real textured surfaces. The idea of decomposing the space of images according to the structure of the 3D information to be computed is a powerful one that we expect will apply to other vision problems. Also, the image space decomposition and filter functions developed here can serve as a model for surface orientation perception in biological vision.