A computer-implemented method of partitioning an image into a plurality of image regions comprising: receiving an input image of a customizable product embellished with a markup; defining a plurality of locations within the input image, each location having an associated color value; determining a color difference value for each location of the plurality of locations, wherein the color difference value indicates how different a color of each location is from color of neighboring locations; smoothing the color difference values to decrease a variation between color difference values; sorting the locations into a sort order based on the determined color difference values, wherein the sorting comprises grouping together image locations with the same color difference values; assigning the locations to image regions, wherein the locations are processed according to the sort order and wherein the locations are assigned to image regions based on the color value associated with each location; wherein assigning comprises: selecting a location from the plurality of location within the input image; identifying a set of regions that neighbour the location; determining whether the location has one or more neighboring locations, from the set of regions that neighbour the location, that are already assigned to particular image regions and either: selecting an image region for assignment to the location from one of the particular image regions assigned to the neighboring locations; or assigning a new image region to the location if the location only neighbors image locations that have not been assigned a particular image region. receiving an input image of a customizable product embellished with a markup; defining a plurality of locations within the input image, each location having an associated color value; determining a color difference value for each location of the plurality of locations, wherein the color difference value indicates how different a color of each location is from color of neighboring locations; smoothing the color difference values to decrease a variation between color difference values; sorting the locations into a sort order based on the determined color difference values, wherein the sorting comprises grouping together image locations with the same color difference values; assigning the locations to image regions, wherein the locations are processed according to the sort order and wherein the locations are assigned to image regions based on the color value associated with each location; wherein assigning comprises: selecting a location from the plurality of location within the input image; identifying a set of regions that neighbour the location; determining whether the location has one or more neighboring locations, from the set of regions that neighbour the location, that are already assigned to particular image regions and either: selecting an image region for assignment to the location from one of the particular image regions assigned to the neighboring locations; or assigning a new image region to the location if the location only neighbors image locations that have not been assigned a particular image region. selecting a location from the plurality of location within the input image; identifying a set of regions that neighbour the location; determining whether the location has one or more neighboring locations, from the set of regions that neighbour the location, that are already assigned to particular image regions and either: selecting an image region for assignment to the location from one of the particular image regions assigned to the neighboring locations; or assigning a new image region to the location if the location only neighbors image locations that have not been assigned a particular image region. selecting an image region for assignment to the location from one of the particular image regions assigned to the neighboring locations; or assigning a new image region to the location if the location only neighbors image locations that have not been assigned a particular image region.