IceMan Reference Guide |
Available blur types from IceBlurType:
Fast, general-purpose blurring operation. Suitable for most purposes, this operation is essentially constant-time with kernel width. The different types of kernels yield different visual results. Note that each of the examples below produces a result image of a different size: as mentioned before, the rectangle occupied by a result is guaranteed to contain all non-zero contributions from the original image.
Box filtering employs an incremental moving window algorithm which makes it extremely fast. Note that IceMan allows the filter width to be non-integral, and that such widths yield the expected "weighted-sum" result.
blurType := IceBlurType Box result := m1_1 Blur(10, 1, blurType) |
blurType := IceBlurType Gaussian result := m1_1 Blur(10, 1, blurType) |
blurType := IceBlurType Bicubic result := m1_1 Blur(10, 1, blurType) |
General convolution with arbitrary kernel. The kernel must have x * y entries.
// DiscKernel is a function that generates a circular convolution // kernel 30 pixels in diameter. disc := DiscKernel(30) result := fruit Convolve(30, 30, disc) |
Note: This is full-fledged, no-magic-tricks convolution. For large kernels, this can be very time-consuming.
This is not a true convolution. Effectively, the operation is a multiplication of the kernel by the channel value at the center of the kernel, and subsequent addition with all the pixels under the kernel. This operation is performed for all points in the specified point list. Note that the points may be non-integral.
Useful for generating "sparkle" or "starburst" effects.
This is not a true convolution. Effectively, the operation is a multiplication of the kernel by the channel value at the center of the kernel, and subsequent addition with all the pixels under the kernel. This operation is performed for all points in the trigger image that are not zero.
Useful for generating "sparkle" or "starburst" effects.
// Create a starburst "kernel" sparkleType := IceSparkleType FraunhoferSlits size := List with(128, 128) center := List with(64, 64) kernel := IceImage Sparkle(sparkleType, size, center, "Fractional", 23) // Translate the kernel so that it's centered at the origin kernel := kernel Translate(-64, -64) // Perform selective convolution .. result := image ConvolveTrig(kernel, image Shuffle(0) Gt(7.9)) // É and add a fraction of the result back into the original // image result := result Add(result Multiply(0.05)) |
Note: The trigger image is typically generated by thresholding an input image.
Morphological dilation/erosion operation. Positive pixel values result in dilation and negative ones in erosion. Values may be non-integral, and results vary as expected.
Note: Dilation is done by filling all values in a neighborhood with the maximum value, and erosion by filling with the minimum value. It is particularly useful for tweaking matte edges.
Directional blur operation.
blurType := IceBlurType Gaussian result = cdev DirectionalBlur(20, 20, blurType) |
Simple Gaussian blur operation. The operation is separable, and is thus performed in one dimension at a time, but there's no other attempt at optimization. Intended for use only in special cases where Blur is not suitable.
This operation performs convolution with a bicubic (which approximates a sinc function) such that the image is band-limited to the specified spatial frequency. The frequency is expressed as a fraction of the maximum spatial frequency representable in the image.
The median filter replaces all pixels in a neighborhood with the median value for that neighborhood. (Median is the value which is greater than half the pixels in the neighborhood).
Note: The median filter is sometimes useful for removing single-pixel artifacts from images, with less of a blurring effect.
This operation employs a technique called unsharp masking, in which the result image is a weighted sum of the original image and a blurred version of it:
result = wh.I + wl.Ib wh = w /(2w Ð 1), wl = (1 Ð w)/(2w Ð 1)
Both blur width and type have an effect on the appearance of the final image: 5 and BLUR_GAUSSIAN are useful starting points.
Variable-width blur operation. The extent of blur at each pixel is specified by an image. The widthRange argument specifies the blur widths corresponding to 0 and 1 in the blur-width image.
Pixar Animation Studios
|