---
title: MPSImageHistogramSpecification
framework: metalperformanceshaders
role: symbol
role_heading: Class
path: metalperformanceshaders/mpsimagehistogramspecification
---

# MPSImageHistogramSpecification

A filter that performs a histogram specification operation on an image.

## Declaration

```swift
class MPSImageHistogramSpecification
```

## Overview

Overview MPSImageHistogramSpecification is a generalized version of histogram equalization operation. The histogram specification filter converts the image so that its histogram matches the desired histogram. The process is divided into three steps: Call the init(device:histogramInfo:) method to create a MPSImageHistogramSpecification object. Call the encodeTransform(to:sourceTexture:sourceHistogram:sourceHistogramOffset:desiredHistogram:desiredHistogramOffset:) method. This creates a privately held image transform which will convert the distribution of the source histogram to the desired histogram. This process runs on a command buffer when it is committed to a command queue. It must complete before the next step can be run. It may be performed on the same command buffer. The sourceTexture argument is used by the method to determine the number of channels and therefore which histogram data in the source histogram buffer to use. The source histogram and desired histogram must have been computed either on the CPU or using the MPSImageHistogram kernel. Call the encode(commandBuffer:sourceTexture:destinationTexture:) method to read data from the source texture, apply the equalization transform to it, and write to the destination texture. This step is also done on the GPU on a command queue. note: You can reuse the same specification transform on other images to perform the same transform on those images. (Since their distribution is probably different, they will probably not arrive at the same distribution as the desired histogram.) This filter usually will not be able to work in place.

## Topics

### Initializers

- [init(coder:device:)](metalperformanceshaders/mpsimagehistogramspecification/init(coder:device:).md)

### Methods

- [init(device:histogramInfo:)](metalperformanceshaders/mpsimagehistogramspecification/init(device:histograminfo:).md)
- [encodeTransform(to:sourceTexture:sourceHistogram:sourceHistogramOffset:desiredHistogram:desiredHistogramOffset:)](metalperformanceshaders/mpsimagehistogramspecification/encodetransform(to:sourcetexture:sourcehistogram:sourcehistogramoffset:desiredhistogram:desiredhistogramoffset:).md)

### Properties

- [histogramInfo](metalperformanceshaders/mpsimagehistogramspecification/histograminfo.md)

## Relationships

### Inherits From

- [MPSUnaryImageKernel](metalperformanceshaders/mpsunaryimagekernel.md)

### Conforms To

- [CVarArg](swift/cvararg.md)
- [CustomDebugStringConvertible](swift/customdebugstringconvertible.md)
- [CustomStringConvertible](swift/customstringconvertible.md)
- [Equatable](swift/equatable.md)
- [Hashable](swift/hashable.md)
- [NSCoding](foundation/nscoding.md)
- [NSCopying](foundation/nscopying.md)
- [NSObjectProtocol](objectivec/nsobjectprotocol.md)
- [NSSecureCoding](foundation/nssecurecoding.md)

## See Also

### Related Documentation

- [Metal Image Filters: Using the image filters provided by the Metal Performance Shaders framework.](apple-archive/samplecode/MetalImageFilters/Introduction/Intro.html.md)

### Histogram Image Filters

- [MPSImageHistogram](metalperformanceshaders/mpsimagehistogram.md)
- [MPSImageHistogramEqualization](metalperformanceshaders/mpsimagehistogramequalization.md)
