({{, (RefLink[ImageAdd, paclet:ref/ImageAdd])[image,x] 
adds an amount x to each channel value in image.}, {, (RefLink[ImageAdd, paclet:ref/ImageAdd])[(Subscript[image, 1]),(Subscript[image, 2])]
gives an image in which each pixel is the sum of the corresponding pixels in (Subscript[image, 1]) and (Subscript[image, 2]).}, {, (RefLink[ImageAdd, paclet:ref/ImageAdd])[image,(Subscript[expr, 1]),(Subscript[expr, 2]),…]
adds all (Subscript[expr, i]) to image, where each (Subscript[expr, i]) can be either an image, a number, or a color value.}})

OpenersNotesSection(Spacer1)Details

The image returned by (RefLink[ImageAdd, paclet:ref/ImageAdd])[image,…] has the same dimensions as image.

In (RefLink[ImageAdd, paclet:ref/ImageAdd])[image,x], x can be a number normally in the range 0 to 1, a color, or a list of color channel values.

(RefLink[ImageAdd, paclet:ref/ImageAdd])[image,x] typically gives an image with the same underlying data type as image, clipping or truncating values if necessary.

If the image dimensions are different, (RefLink[ImageAdd, paclet:ref/ImageAdd])[(Subscript[image, 1]),(Subscript[image, 2])] adds (Subscript[image, 2]) at the center of (Subscript[image, 1]).

If (Subscript[image, 1]) or (Subscript[image, 2]) is a single-channel image, its values are added to the values in each channel of the other image in (RefLink[ImageAdd, paclet:ref/ImageAdd])[(Subscript[image, 1]),(Subscript[image, 2])].

If (Subscript[image, 1]) and (Subscript[image, 2]) are both multichannel images, the values in each channel are added separately.

(RefLink[ImageAdd, paclet:ref/ImageAdd])[(Subscript[image, 1]),(Subscript[image, 2])] gives an image with the largest type of either (Subscript[image, 1]) or (Subscript[image, 2]), clipping or truncating values if necessary.

For binary images, (RefLink[ImageAdd, paclet:ref/ImageAdd]) effectively finds the logical OR of pixel values.

(RefLink[ImageAdd, paclet:ref/ImageAdd])[image,(Subscript[expr, 1]),(Subscript[expr, 2]),…] folds (RefLink[ImageAdd, paclet:ref/ImageAdd]) on the list of arguments.

(RefLink[ImageAdd, paclet:ref/ImageAdd])[{image,(Subscript[expr, 1]),(Subscript[expr, 2]),…}] is equivalent to (RefLink[ImageAdd, paclet:ref/ImageAdd])[image,(Subscript[expr, 1]),(Subscript[expr, 2]),…].

(RefLink[ImageAdd, paclet:ref/ImageAdd]) works with (RefLink[Image3D, paclet:ref/Image3D]) objects.

OpenersPrimaryExamplesSection(Spacer1)Examples  (12)

OpenersExampleSection0(Spacer1)Basic Examples  (3)

Brighten a color image by adding a constant amount to all channels:

ImageAdd[,0.15]

Add two color images:

ImageAdd[,]

Logical OR of two binary images:

ImageAdd[,]

OpenersExampleSection1(Spacer1)Scope  (3)

Mask an image by adding a thresholded version of it:

ImageAdd[ ,]

Add multiple images to each other:

ImageAdd[{,,}]

Add a noise image to a 3D image:

ImageAdd[,]

OpenersExampleSection3(Spacer1)Applications  (3)

Uniform additive noise:

i=;
ImageAdd[i,RandomImage[{-.1,.1},ImageDimensions[i]]]

Create a sepia image:

ImageAdd[,RGBColor[{0.44,0.26,0.08}]]

Convert a color image to a sepia image:

image=;dims=ImageDimensions[image];

ImageAdd[ColorConvert[image,"Grayscale"],RGBColor[{0.44,0.26,0.08}]]

Multiply by a Gaussian frame to create a vignette effect:

ImageMultiply[%,ImageAdjust[Image[Transpose@GaussianMatrix[{dims/2,dims/2}]]]]

OpenersExampleSection4(Spacer1)Possible Issues  (3)

Numerical rounding in finite-precision images can be affected by the limited precision of machine arithmetic:

ImageData[ImageAdd[Image[{{35}},"Byte"],0.5],Automatic]

ImageData[ImageAdd[Image[{{36}},"Byte"],0.5],Automatic]

When adding images of different color spaces, channel values are added respectively:

i1=Image[{{{.1,.2,.3}}},ColorSpace->"RGB"]

i2=Image[{{{.1,.2,.3}}},ColorSpace->"LAB"]

The resulting image will have an (RefLink[Automatic, paclet:ref/Automatic]) color space:

ImageAdd[i1,i2]//ImageColorSpace

When adding images of integer types, pixel value clipping is happening:

images={,};

ImageAdd[images]

Adjusting cannot restore the clipped values:

ImageAdjust[%]

Use a real image type to avoid clipping:

ImageAdd[Image[#,"Real"]&/@images]//ImageAdjust

({{DocumentationFooterIconsRelatedFunction.png, ({{See Also}, {(RefLink[ImageSubtract, paclet:ref/ImageSubtract])  ▪  (RefLink[ImageMultiply, paclet:ref/ImageMultiply])  ▪  (RefLink[ImageAdjust, paclet:ref/ImageAdjust])  ▪  (RefLink[ImageData, paclet:ref/ImageData])  ▪  (RefLink[ImageCompose, paclet:ref/ImageCompose])  ▪  (RefLink[ImageApply, paclet:ref/ImageApply])  ▪  (RefLink[Thread, paclet:ref/Thread])}})}})

({{DocumentationFooterIconsRelatedTutorial.png, ({{Tutorials}, {▪(RefLinkPlain[Image Processing, paclet:tutorial/ImageProcessing])}})}})

({{DocumentationFooterIconsRelatedGuide.png, ({{Related Guides}, {▪(RefLinkPlain[3D Images, paclet:guide/3DImages])}, {▪(RefLinkPlain[Basic Image Manipulation, paclet:guide/BasicImageManipulation])}, {▪(RefLinkPlain[Image Composition, paclet:guide/ImageComposition])}, {▪(RefLinkPlain[Computational Photography, paclet:guide/ComputationalPhotography])}})}})

({{(Spacer1), ({{(Spacer1)Related Links}, {(WebLink[DocumentationFooterIconsRelatedLinks-EIWL.png(Spacer1)An Elementary Introduction to the Wolfram Language, https://www.wolfram.com/language/elementary-introduction/10-images.html])(WebLink[: Images, https://www.wolfram.com/language/elementary-introduction/10-images.html])}, {(WebLink[DocumentationFooterIconsRelatedLinks-EIWL.png(Spacer1)An Elementary Introduction to the Wolfram Language, https://www.wolfram.com/language/elementary-introduction/29-more-about-pure-functions.html])(WebLink[: More about Pure Functions, https://www.wolfram.com/language/elementary-introduction/29-more-about-pure-functions.html])}})}})