A method of detecting cloud features, the method comprising: obtaining image data; identifying regions of the image data corresponding to a below-horizon region and an above-horizon region; classifying one or more parts of the above-horizon region as sky; classifying, as a cloud feature, each part of the above-horizon region that has not been classified as sky; determining an identification model specifying a visual appearance of some or all of the parts of the above-horizon region that have been classified as a cloud feature; and using the determined identification model, classifying, as cloud features, those regions of the below-horizon region, the visual appearance of which is as specified by the identification model; wherein the step of classifying one or more parts of the above-horizon region as sky comprises: selecting a part of the above-horizon region; and classifying the selected part as sky if properties of pixels within the selected part fulfil one or more predetermined criteria; characterised in that the step of classifying one or more parts of the above-horizon region as sky additionally comprises computing image gradients for Red-Green-Blue channels of the image data in directions tangential and normal to a horizon line; smoothing, by averaging over a local circular neighbourhood, the computed image gradients for the Red-Green-Blue channels; and summing the smoothed Red-Green-Blue channel image gradients to produce a combined smoothness value of each pixel in the direction tangential to the horizon line and to produce a combined smoothness value of each pixel in the direction normal to the horizon line; wherein, for each pixel in the selected part of the above-horizon region, the combined smoothness values of that pixel in directions tangential and normal to the horizon line are below a predetermined threshold value. obtaining image data; identifying regions of the image data corresponding to a below-horizon region and an above-horizon region; classifying one or more parts of the above-horizon region as sky; classifying, as a cloud feature, each part of the above-horizon region that has not been classified as sky; determining an identification model specifying a visual appearance of some or all of the parts of the above-horizon region that have been classified as a cloud feature; and using the determined identification model, classifying, as cloud features, those regions of the below-horizon region, the visual appearance of which is as specified by the identification model; wherein the step of classifying one or more parts of the above-horizon region as sky comprises: selecting a part of the above-horizon region; and classifying the selected part as sky if properties of pixels within the selected part fulfil one or more predetermined criteria; characterised in that the step of classifying one or more parts of the above-horizon region as sky additionally comprises computing image gradients for Red-Green-Blue channels of the image data in directions tangential and normal to a horizon line; smoothing, by averaging over a local circular neighbourhood, the computed image gradients for the Red-Green-Blue channels; and summing the smoothed Red-Green-Blue channel image gradients to produce a combined smoothness value of each pixel in the direction tangential to the horizon line and to produce a combined smoothness value of each pixel in the direction normal to the horizon line; wherein, for each pixel in the selected part of the above-horizon region, the combined smoothness values of that pixel in directions tangential and normal to the horizon line are below a predetermined threshold value. selecting a part of the above-horizon region; and classifying the selected part as sky if properties of pixels within the selected part fulfil one or more predetermined criteria; characterised in that the step of classifying one or more parts of the above-horizon region as sky additionally comprises computing image gradients for Red-Green-Blue channels of the image data in directions tangential and normal to a horizon line; smoothing, by averaging over a local circular neighbourhood, the computed image gradients for the Red-Green-Blue channels; and summing the smoothed Red-Green-Blue channel image gradients to produce a combined smoothness value of each pixel in the direction tangential to the horizon line and to produce a combined smoothness value of each pixel in the direction normal to the horizon line; wherein, for each pixel in the selected part of the above-horizon region, the combined smoothness values of that pixel in directions tangential and normal to the horizon line are below a predetermined threshold value.