Contents

contrastStretch(binCount:destination:)

Stretches the histogram of a multiple-plane 32-bit pixel buffer.

Declaration

func contrastStretch(binCount: Int, destination: vImage.PixelBuffer<Format>)

Parameters

  • binCount:

    The number of histogram entries for each channel.

  • destination:

    The destination pixel buffer.

Discussion

Use this function to evenly distributes a histogram’s pixel values across the full range of available pixel values.

For example, the following code stretches the contrast of an image:

let srcImage = imageLiteral(resourceName: " ... ").cgImage(
    forProposedRect: nil,
    context: nil,
    hints: nil)!

var cgImageFormat = vImage_CGImageFormat(
    bitsPerComponent: 32,
    bitsPerPixel: 32 * 3,
    colorSpace: CGColorSpaceCreateDeviceRGB(),
    bitmapInfo: CGBitmapInfo(rawValue: kCGBitmapByteOrder32Host.rawValue |
                             CGBitmapInfo.floatComponents.rawValue |
                             CGImageAlphaInfo.none.rawValue))!

let interleavedBuffer = try vImage.PixelBuffer(
    cgImage: srcImage,
    cgImageFormat: &cgImageFormat,
    pixelFormat: vImage.InterleavedFx3.self)

let multiplaneBuffer = vImage.PixelBuffer<vImage.PlanarFx3>(
    interleavedBuffer: interleavedBuffer)

multiplaneBuffer.contrastStretch(binCount: 1024,
                                 destination: multiplaneBuffer)

multiplaneBuffer.convert(to: interleavedBuffer)

let outputImage = interleavedBuffer.makeCGImage(cgImageFormat: cgImageFormat)

See Also

Related Documentation

Contrast stretching