Each output pixel contains the median value in a 3-by-3 neighborhood around the corresponding pixel in the input image. Medfilt2 pads the image with 0s on the edges, so the median values for points within one-half the width of the neighborhood ( m n/2) of the edges might appear distorted. So let’s generate some dummy data for our input matrix and our convolution’s kernel and apply the convolution operation to calculate our output. Figure 4: A 3x3 kernel applied to a 4x4 input.
In image processing, a kernel, convolution matrix, or mask is a small matrix. It is used for blurring, sharpening, embossing, edge detection, and more. This is accomplished by doing a convolution between a kernel and an image.
- 1Details
- 2Convolution
Details[edit]
The general expression of a convolution is
where is the filtered image, is the original image, is the filter kernel. Every element of the filter kernel is considered by and .
Depending on the element values, a kernel can cause a wide range of effects.
Operation | Kernel ω | Image result g(x,y) |
---|---|---|
Identity | ||
Edge detection | ||
Sharpen | ||
Box blur (normalized) | ||
Gaussian blur 3 × 3 (approximation) | ||
Gaussian blur 5 × 5 (approximation) | ||
Unsharp masking 5 × 5 Based on Gaussian blur with amount as 1 and threshold as 0 (with no image mask) |
The above are just a few examples of effects achievable by convolving kernels and images.
Origin[edit]
The origin is the position of the kernel which is above (conceptually) the current output pixel. This could be outside of the actual kernel, though usually it corresponds to one of the kernel elements. For a symmetric kernel, the origin is usually the center element.
Convolution[edit]
Convolution is the process of adding each element of the image to its local neighbors, weighted by the kernel. This is related to a form of mathematical convolution. The matrix operation being performed - convolution - is not traditional matrix multiplication, despite being similarly denoted by *.
For example, if we have two three-by-three matrices, the first a kernel, and the second an image piece, convolution is the process of flipping both the rows and columns of the kernel and then multiplying locally similar entries and summing. The element at coordinates [2, 2] (that is, the central element) of the resulting image would be a weighted combination of all the entries of the image matrix, with weights given by the kernel:
The other entries would be similarly weighted, where we position the center of the kernel on each of the boundary points of the image, and compute a weighted sum.
The values of a given pixel in the output image are calculated by multiplying each kernel value by the corresponding input image pixel values. This can be described algorithmically with the following pseudo-code:
- *corresponding input image pixels are found relative to the kernel's origin.
If the kernel is symmetric then place the center (origin) of the kernel on the current pixel. The kernel will overlap the neighboring pixels around the origin. Each kernel element should be multiplied with the pixel value it overlaps with and all of the obtained values should be summed. This resultant sum will be the new value for the current pixel currently overlapped with the center of the kernel.
If the kernel is not symmetric, it has to be flipped both around its horizontal and vertical axis before calculating the convolution as above.[1]
The general form for matrix convolution is
Edge Handling[edit]
Extend Edge-Handling
Kernel convolution usually requires values from pixels outside of the image boundaries. There are a variety of methods for handling image edges.
- Extend
- The nearest border pixels are conceptually extended as far as necessary to provide values for the convolution. Corner pixels are extended in 90° wedges. Other edge pixels are extended in lines.
- Wrap
- The image is conceptually wrapped (or tiled) and values are taken from the opposite edge or corner.
- Mirror
- The image is conceptually mirrored at the edges. For example, attempting to read a pixel 3 units outside an edge reads one 3 units inside the edge instead.
- Crop
- Any pixel in the output image which would require values from beyond the edge is skipped. This method can result in the output image being slightly smaller, with the edges having been cropped.
- Kernel Crop
- Any pixel in the kernel that extends past the input image isn't used and the normalizing is adjusted to compensate.
Normalization[edit]
Normalization is defined as the division of each element in the kernel by the sum of all kernel elements, so that the sum of the elements of a normalized kernel is one. This will ensure the average pixel in the modified image is as bright as the average pixel in the original image.
References[edit]
- ^http://www.songho.ca/dsp/convolution/convolution2d_example.html
- Ludwig, Jamie (n.d.). Image Convolution(pdf). Portland State University.
- Lecarme, Olivier; Delvare, Karine (January 2013). The Book of GIMP: A Complete Guide to Nearly Everything. No Starch Press. p. 429. ISBN978-1593273835.
- Gumster, Jason van; Shimonski, Robert (March 2012). GIMP Bible. Wiley. pp. 438–442. ISBN978-0470523971.
- Shapiro, Linda G.; Stockman, George C. (February 2001). Computer Vision. Prentice Hall. pp. 53–54. ISBN978-0130307965.
External links[edit]
Retrieved from 'https://en.wikipedia.org/w/index.php?title=Kernel_(image_processing)&oldid=916563764'