A local-contrast normalization kernel.
SDKs
- iOS 10.0+
- macOS 10.13+
- Mac Catalyst 13.0+
- tvOS 10.0+
Framework
- Metal Performance Shaders
Declaration
class MPSCNNLocalContrastNormalization : MPSCNNKernel
Overview
The local contrast normalization kernel is quite similar to the spatial normalization kernel, described in the MPSCNNSpatial
class, in that it applies the kernel over local regions which extend spatially, but are in separate feature channels (i.e., they have the shape 1 x kernel width x kernel height
). However, instead of dividing by the local "energy" of the feature, the denominator uses the local variance of the feature - effectively the mean value of the feature is subtracted from the signal. For each feature channel, the function computes the variance VAR(i,j)
and mean M(i,j)
of X(i,j)
inside each rectangle around the spatial point (i,j)
. Then the result is computed for each element of X
as follows:

Where kw
and kh
are the values of the kernelWidth and the kernelHeight properties, respectively, and the values of the pm
, ps
, and p0
properties can be used to offset and scale the result in various ways. For example setting pm=0
, ps=1
, p0=1
, delta=0
, alpha=1
and beta=0
scales input data so that the result has unit variance and zero mean, provided that input variance is positive.
It is your responsibility to ensure that the combination of the values of the delta
and alpha
properties does not result in a situation where the denominator becomes zero - in such situations the resulting pixel-value is undefined. A good way to guard against tiny variances is to regulate the expression with a small delta value, for example delta=1/1024
.
Tip
The encoding methods in the MPSUnary
class can be used to encode an MPSCNNLocal
object to a MTLCommand
object.