<!--
{
  "documentType" : "article",
  "framework" : "Accelerate",
  "identifier" : "/documentation/Accelerate/convolving-and-applying-morphology",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Convolving and applying morphology"
}
-->

# Convolving and applying morphology

Apply convolution, dilation, or erosion to a pixel buffer.

## Topics

### Morphology

[`func applyMorphology(operation: vImage.MorphologyOperation<Pixel_8>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/applyMorphology(operation:destination:)-2bbx4)

Applies a morphology operation to an 8-bit planar pixel buffer.

[`func applyMorphology(operation: vImage.MorphologyOperation<Pixel_F>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/applyMorphology(operation:destination:)-9f8lh)

Applies a morphology operation to a 32-bit planar pixel buffer.

[`func applyMorphology(operation: vImage.MorphologyOperation<Pixel_8>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/applyMorphology(operation:destination:)-1wacj)

Applies a morphology operation to an 8-bit-per-channel, 4-channel interleaved pixel buffer.

[`func applyMorphology(operation: vImage.MorphologyOperation<Pixel_F>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/applyMorphology(operation:destination:)-65xg3)

Applies a morphology operation to a 32-bit-per-channel, 4-channel interleaved pixel buffer.

[`enum MorphologyOperation`](/documentation/Accelerate/vImage/MorphologyOperation)

Describes which morphology operation to perform.

[`typealias StructuringElement`](/documentation/Accelerate/vImage/StructuringElement)

A 2D matrix that represents a morphology kernel.

### General convolution

[`func convolve(with: vImage.ConvolutionKernel2D<Int16>, divisor: Int32?, bias: Int32?, edgeMode: vImage.EdgeMode<Pixel_8>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/convolve(with:divisor:bias:edgeMode:destination:)-4o5w6)

Convolves an 8-bit planar pixel buffer.

[`func convolve(with: vImage.ConvolutionKernel2D<Float>, bias: Float?, edgeMode: vImage.EdgeMode<Pixel_16F>, useFloat16Accumulator: Bool, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/convolve(with:bias:edgeMode:useFloat16Accumulator:destination:)-1xkvu)

Convolves a floating-point 16-bit planar pixel buffer.

[`func convolve(with: vImage.ConvolutionKernel2D<Float>, bias: Float?, edgeMode: vImage.EdgeMode<Pixel_F>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/convolve(with:bias:edgeMode:destination:)-tn07)

Convolves a 32-bit planar pixel buffer.

[`func convolve(with: vImage.ConvolutionKernel2D<Int16>, divisor: Int32?, bias: Int32?, edgeMode: vImage.EdgeMode<Pixel_8888>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/convolve(with:divisor:bias:edgeMode:destination:)-1oul9)

Convolves an 8-bit-per-channel, 4-channel interleaved pixel buffer.

[`func convolve(with: (vImage.ConvolutionKernel2D<Int16>, vImage.ConvolutionKernel2D<Int16>, vImage.ConvolutionKernel2D<Int16>, vImage.ConvolutionKernel2D<Int16>), divisors: (Int32, Int32, Int32, Int32)?, biases: (Int32, Int32, Int32, Int32), edgeMode: vImage.EdgeMode<Pixel_8888>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/convolve(with:divisors:biases:edgeMode:destination:))

Convolves an 8-bit-per-channel, 4-channel interleaved pixel buffer with separate kernels for each channel.

[`func convolve(with: vImage.ConvolutionKernel2D<Float>, bias: Float?, edgeMode: vImage.EdgeMode<Pixel_ARGB_16F>, useFloat16Accumulator: Bool, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/convolve(with:bias:edgeMode:useFloat16Accumulator:destination:)-81lqa)

Convolves a floating-point 16-bit-per-channel, 4-channel interleaved pixel buffer.

[`func convolve(with: vImage.ConvolutionKernel2D<Float>, bias: Float?, edgeMode: vImage.EdgeMode<Pixel_FFFF>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/convolve(with:bias:edgeMode:destination:)-8syhw)

Convolves a 32-bit-per-channel, 4-channel interleaved pixel buffer.

[`func convolve(with: vImage.ConvolutionKernel2D<Int16>, divisor: Int32?, bias: Int32?, edgeMode: vImage.EdgeMode<Pixel_8>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/convolve(with:divisor:bias:edgeMode:destination:)-4jjbx)

Convolves an 8-bit multiple plane pixel buffer.

[`func convolve(with: vImage.ConvolutionKernel2D<Float>, bias: Float?, edgeMode: vImage.EdgeMode<Pixel_F>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/convolve(with:bias:edgeMode:destination:)-3219s)

Convolves a 32-bit multiple plane pixel buffer.

[`enum EdgeMode`](/documentation/Accelerate/vImage/EdgeMode)

Constants that specify edge modes for convolution operations.

[`struct ConvolutionKernel2D`](/documentation/Accelerate/vImage/ConvolutionKernel2D)

A 2D matrix that represents a convolution kernel.

### Separable convolution

[`func separableConvolve(horizontalKernel: [Float], verticalKernel: [Float], bias: Float, edgeMode: vImage.EdgeMode<Pixel_16U>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/separableConvolve(horizontalKernel:verticalKernel:bias:edgeMode:destination:)-2iyq6)

Performs separable convolution on an 8-bit planar pixel buffer.

[`func separableConvolve(horizontalKernel: [Float], verticalKernel: [Float], bias: Float, edgeMode: vImage.EdgeMode<Pixel_16F>, useFloat16Accumulator: Bool, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/separableConvolve(horizontalKernel:verticalKernel:bias:edgeMode:useFloat16Accumulator:destination:))

Performs separable convolution on a 16-bit planar pixel buffer.

[`func separableConvolve(horizontalKernel: [Float], verticalKernel: [Float], bias: Float, edgeMode: vImage.EdgeMode<Pixel_F>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/separableConvolve(horizontalKernel:verticalKernel:bias:edgeMode:destination:)-2qofv)

Performs separable convolution on a 32-bit planar pixel buffer.

[`func separableConvolve(horizontalKernel: [Float], verticalKernel: [Float], bias: Float, edgeMode: vImage.EdgeMode<Pixel_16U>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/separableConvolve(horizontalKernel:verticalKernel:bias:edgeMode:destination:)-6t9b3)

Performs separable convolution on a multiple plane 8-bit pixel buffer.

[`func separableConvolve(horizontalKernel: [Float], verticalKernel: [Float], bias: Float, edgeMode: vImage.EdgeMode<Pixel_F>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/separableConvolve(horizontalKernel:verticalKernel:bias:edgeMode:destination:)-6q5ro)

Performs separable convolution on a multiple plane 32-bit pixel buffer.

[`struct ConvolutionKernel`](/documentation/Accelerate/vImage/ConvolutionKernel)

Constants that describe 1D convolution kernels.

### Box convolution

[`func boxConvolve(kernelSize: vImage.Size, edgeMode: vImage.EdgeMode<Pixel_8>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/boxConvolve(kernelSize:edgeMode:destination:)-2h7fy)

Convolves an 8-bit planar pixel buffer with a box filter.

[`func boxConvolve(kernelSize: vImage.Size, edgeMode: vImage.EdgeMode<Pixel_8888>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/boxConvolve(kernelSize:edgeMode:destination:)-2m20d)

Convolves an 8-bit-per-channel, 4-channel interleaved pixel buffer with a box filter.

[`func boxConvolved(kernelSize: vImage.Size, edgeMode: vImage.EdgeMode<Pixel_8888>) -> vImage.PixelBuffer<Format>`](/documentation/Accelerate/vImage/PixelBuffer/boxConvolved(kernelSize:edgeMode:))

Returns a box-filter convolved 8-bit-per-channel, 4-channel interleaved pixel buffer.

[`func boxConvolve(kernelSize: vImage.Size, edgeMode: vImage.EdgeMode<Pixel_8>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/boxConvolve(kernelSize:edgeMode:destination:)-3kabm)

Convolves a multiple-plane 8-bit-per-channel pixel buffer with a box filter.

### Tent convolution

[`func tentConvolve(kernelSize: vImage.Size, edgeMode: vImage.EdgeMode<Pixel_8>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/tentConvolve(kernelSize:edgeMode:destination:)-1fpap)

Convolves an 8-bit planar pixel buffer with a tent filter.

[`func tentConvolve(kernelSize: vImage.Size, edgeMode: vImage.EdgeMode<Pixel_8888>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/tentConvolve(kernelSize:edgeMode:destination:)-150xp)

Convolves an 8-bit-per-channel, 4-channel interleaved pixel buffer with a tent filter.

[`func tentConvolved(kernelSize: vImage.Size, edgeMode: vImage.EdgeMode<Pixel_8888>) -> vImage.PixelBuffer<Format>`](/documentation/Accelerate/vImage/PixelBuffer/tentConvolved(kernelSize:edgeMode:))

Returns a tent-filter convolved 8-bit-per-channel, 4-channel interleaved pixel buffer.

[`func tentConvolve(kernelSize: vImage.Size, edgeMode: vImage.EdgeMode<Pixel_8>, destination: vImage.PixelBuffer<Format>)`](/documentation/Accelerate/vImage/PixelBuffer/tentConvolve(kernelSize:edgeMode:destination:)-2dp48)

Convolves a multiple-plane 8-bit-per-channel pixel buffer with a tent filter.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)