Arithmetic Image Operations (blending) Two source images can be added, multiplied, one subtracted from the other or one divided by the other to produce a single destination (other types are also discussed later) These operations are known as image arithmetic or image blending. Each of these methods is a point processing operation where corresponding samples from the two source images are arithmetically combined to generate the output. These operations are not single-source operations! 2
Arithmetic Image Operations (blending) Two complications: Color depth – when adding two 8-bit grayscale images, the output may fall into the range [0, 510] thus exceeding the color depth of either source. This is typically solved by truncation or rescaling. Image size – If the images are not the same size then we can Forbid the operation Perform the operation only on the intersection of the two images Define image addition (with rescaling). Given source images I a and Ib of dimensions WaxHa and WbxHa then image addition is given by (5.13) where x ranges over [0, min(Wa, Wb)] and y ranges over [0, min(Ha, Hb)]. 3
Image Subtraction Image subtraction is useful for visualizing the difference between two images. One way of telling whether two images are identical is to subtract one from the other and if the maximum sample value of the result is zero then the images are identical. Example: A source image is equalized in intensity. The equalized image is subtracted from the source to highlight areas of change.
Image multiplication Consider multiplying a full color source with an image having only white and black. The binary image is known as a mask where the white pixels pass the source image to the output while the black pixels erase the corresponding source images pixels. Multiplication is a good technique for either adding color to a line drawing or for emphasizing edges in a full color image. In part (a) of this figure, a source image is multiplied by the mask of (b) to obtain the output of (c). Many image processing applications use image multiplication to create artistic filters for digital artists.
Image Arithmetic Implementation The BufferedImageOp class is not well designed to represent the arithmetic operations since there are two source images. Nonetheless we can implement image arithmetic as a single source operation by currying. Currying refers to the transformation of a function that has multiple arguments into a function that has only a single argument. We develop an abstract base class called BinaryImageOp that is partially shown in Listing 5.10. 7 Named “BinaryImageOp” since this class corresponds to a binary operator on images. The filter method iterates over corresponding samples of the two source and blends them using the abstract combine function. The combine method is abstract since subclassess will use this method to define the blending mode.
Logical Image Operations Binary images can be combined using logical operators 10 Under these operations, each sample is a logical value where white is “true” and black is “false”. The logical truth tables then become “colors” as shown below
Logical Image Operations These logical operators can also be extended to grayscale and color images. Corresponding bits of the two source samples serve as logical values where a 1 bit represents true and a 0 bit represents false. Each of the two sources must use the same color model, color depth and dimension. Java’s logical operators are overloaded to accept either boolean or integer valued operands 12 true | false == true 2 | 3 == 5
Alpha Blending In alpha blending two sources are added together after being proportionally scaled with an alpha value which is in [0, 1]. Alpha blending is akin to transparency A value of 0 corresponds to complete transparency A value of 1 corresponds to completely opaque Java supports the RGBA color model where the alpha channel is a per-pixel alpha value rather than a single alpha value for an entire image. 14
Other blending modes Besides arithmetic, logical, and blending modes are others: 15 Darken only: The minimum of two samples is taken Lighten only: The maximum of two samples is taken Diffusion: Take one of the samples at random Screen blending: Defined below where the samples are normalized to be in [0, 1]. Try screen blending an image with itself. Hard light blending: