Challenge exercise You might have observed that the apply methods of all of the Filter subclasses have a very similar structure: iterate over the whole image and change the value of each pixel independently of surrounding pixels. It should be possible to isolate this duplication in much the same way as we did in creating the Filter class. Create a method in the Filter class that iterates over the image and applies a filter-specific transformation to each individual pixel. Replace the bodies of the apply methods in the three Filter subclasses with a call to this method, passing the image and an object that can apply the appropriate transformation.