A method for creating a virtual three-dimensional model of an object 140, the method comprising: receiving first image data 402 associated with a first image, the first image data 402 being representative of a first view of the at least part of an object 105 and comprising first image location data and a first spatially-indexable encoded image data descriptor, wherein the first spatially-indexable encoded image data descriptor includes, for each pixel of the first image, a pixel descriptor which describes a local neighbourhood surrounding the pixel; receiving second image data 404 associated with a second image, the second image data 404 being representative of a second view of the at least part of an object 105 and comprising second image location data and a second spatially-indexable encoded image data descriptor, wherein the second spatially-indexable encoded image data descriptor includes, for each pixel of the second image, a pixel descriptor which describes a local neighbourhood surrounding the pixel; determining a first descriptor 406 based on the first spatially-indexable encoded image data descriptor, the first descriptor describing a property of a projection of a first voxel of a voxel array in the first image data 402; determining a second descriptor 408 based on the second spatially-indexable encoded image data descriptor, the second descriptor describing a property of a projection of the first voxel in the second image data 404; and assigning an occupancy value 410 to the first voxel in the virtual three-dimensional model based on the first and second descriptors 406, 408, the occupancy value 410 being representative of whether the first voxel is occupied by the at least part of an object 105. receiving first image data 402 associated with a first image, the first image data 402 being representative of a first view of the at least part of an object 105 and comprising first image location data and a first spatially-indexable encoded image data descriptor, wherein the first spatially-indexable encoded image data descriptor includes, for each pixel of the first image, a pixel descriptor which describes a local neighbourhood surrounding the pixel; receiving second image data 404 associated with a second image, the second image data 404 being representative of a second view of the at least part of an object 105 and comprising second image location data and a second spatially-indexable encoded image data descriptor, wherein the second spatially-indexable encoded image data descriptor includes, for each pixel of the second image, a pixel descriptor which describes a local neighbourhood surrounding the pixel; determining a first descriptor 406 based on the first spatially-indexable encoded image data descriptor, the first descriptor describing a property of a projection of a first voxel of a voxel array in the first image data 402; determining a second descriptor 408 based on the second spatially-indexable encoded image data descriptor, the second descriptor describing a property of a projection of the first voxel in the second image data 404; and assigning an occupancy value 410 to the first voxel in the virtual three-dimensional model based on the first and second descriptors 406, 408, the occupancy value 410 being representative of whether the first voxel is occupied by the at least part of an object 105.