1 / 37

95.4501

95.4501. Filters. What’s a Filter?. A filter is a matrix of weights centered on a specific pixel in an image and used to produce a weighted average as follows. The center weight is multiplied with the pixel , the other weights are multiplied with corresponding neighbor pixels .

zaza
Download Presentation

95.4501

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 95.4501 Filters

  2. What’s a Filter? • A filter is a matrix of weights centered on a specific pixel in an image and used to produce a weighted average as follows. • The center weight is multiplied with the pixel, the other weights are multiplied with corresponding neighbor pixels. • The results are added and divided by the sum of the weights (or, avoid the divide by using normalized weights; i.e., pre-divided). [ 0 0 0 ][ 0 1 0 ][ 0 0 0 ] 3x3 identity filter

  3. What’s a Filter? • This filtering operation applied to each pixel of an image is called a convolution (if the filter is symmetrical) or correlation otherwise. • More complex filters, that can use fancier functions, exist as well.

  4. How filters Get Used: Let Compiler Loop Unroll If the sampler can be indexed via image sized texture coordinates (otherwise, *pixelSize). float3 fillterResult= float4 (0.0, 0.0, 0.0);for (inti = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) {fillterResult+= sampler (uv.xy + float2 (i,j) ).xyz *filterWeight [i,j]; }} Filter result is the answer: assuming normalized weights

  5. How filters Get Used: Unroll Loop Yourself If the sampler can be indexed via image sized texture coordinates (otherwise, *pixelSize). float3 fillterResult= sampler (uv.xy + float2 (-1,-1)).xyz * filterWeight [-1,-1] + sampler (uv.xy + float2 (-1, 0)).xyz * filterWeight [-1, 0] + sampler (uv.xy + float2 (-1,+1)).xyz * filterWeight [-1,+1] + sampler (uv.xy + float2 ( 0,-1)).xyz * filterWeight [ 0,-1] + sampler (uv.xy + float2 ( 0, 0)).xyz * filterWeight [ 0, 0] + sampler (uv.xy + float2 ( 0,+1)).xyz * filterWeight [ 0,+1] + sampler (uv.xy + float2 (+1,-1)).xyz * filterWeight [+1,-1] + sampler (uv.xy + float2 (+1, 0)).xyz * filterWeight [+1, 0] + sampler (uv.xy + float2 (+1,+1)).xyz * filterWeight [+1,+1]; Filter result is the answer: assuming normalized weights

  6. A Few Observations • An odd size filter looks cleaner but even size works too (consistently applying right and down, for example)... • sum of normalized weights  1  brighter image • sum of normalized weights  1  darker image [x, y+1] Weight 0.25 [x+1, y+1] Weight 0.25 right and up for OpenGL right and down for DirectX [x, y] [x+1, y] Weight 0.25 Weight 0.25

  7. A Few Observations • Indexing off the end is can be handled with • 0 weight • automatically via a clamping sampler • Filtered results are sometimes clamped to the bounds of the application; e.g., 0 and 1 for color.

  8. A Blur Filter (Minimal Blur) from LODEV.org [ 0 1 0 ][ 1 1 1 ][ 0 1 0 ] 1 5 Use normalizing factor1/5 = 0.2 3x3 blur filter

  9. A Blur Filter (More Noticeable Blur) [ 0 0 1 0 0 ][ 0 1 1 1 0 ] [ 1 1 1 1 1 ] [ 0 1 1 1 0 ][ 0 0 1 0 0 ] from LODEV.org 1 13 Use normalizing factor1/13 = 0.077 5x5 blur filter

  10. A 45 Degree Motion Blur Filter [ 1 0 0 0 0 0 0 0 0 ][ 0 1 0 0 0 0 0 0 0 ] [ 0 0 1 0 0 0 0 0 0 ] [ 0 0 0 1 0 0 0 0 0 ] [ 0 0 0 0 1 0 0 0 0 ] [ 0 0 0 0 0 1 0 0 0 ][ 0 0 0 0 0 0 1 0 0][ 0 0 0 0 0 0 0 1 0 ][ 0 0 0 0 0 0 0 0 1 ] from LODEV.org 1 9 Use normalizing factor1/9 = 0.111 9x9 motion blur filter

  11. A Horizontal Edge Finding Filter [ 0 0 0 0 0 ][ 0 0 0 0 0 ] [-1-1 2 0 0 ] [ 0 0 0 0 0 ][ 0 0 0 0 0 ] from LODEV.org dark since weights sum to 0 5x5 horizontal edge finding filter deliberately non-symmetric just to see

  12. A Vertical Edge Finding Filter [ 0 0 -1 0 0 ][ 0 0 -1 0 0 ] [ 0 0 4 0 0 ] [ 0 0 -1 0 0 ][ 0 0 -1 0 0 ] from LODEV.org dark since weights sum to 0 5x5 vertical edge finding filter

  13. A 45 Degree Edge Finding Filter [-1 0 0 0 0 ][ 0 -2 0 0 0 ] [ 0 0 6 0 0 ] [ 0 0 0 -2 0 ][ 0 0 0 0 -1 ] from LODEV.org dark since weights sum to 0 5x5 45 degree edge finding filter

  14. An Edge Detection Filter from LODEV.org [-1 -1 -1][-1 8 -1][-1 -1 -1] dark since weights sum to 0 3x3 edge detection filter

  15. A Sharpening Filter from LODEV.org [-1 -1 -1][-1 9 -1][-1 -1 -1] note that sum is 1 3x3 sharpening filter

  16. A More Subtle Sharpening Filter [-1 -1-1 -1-1][-1 2 2 2 -1] [-1 2 8 2 -1] [-1 2 2 2 -1][-1 -1-1 -1-1] from LODEV.org 1 8 Use normalizing factor 1/8 = 0.125 5x5 subtle shapening filter

  17. An Excessive Sharpening Filter from LODEV.org [1 1 1][1 -7 1][1 1 1] note that sum is 1 3x3 excessive sharpening filter

  18. A 45 Degree Embossing Filter from LODEV.org [-1 -1 0][-1 0 1][ 0 1 1] 0.5 + 3x3 45 degree embossing filter

  19. A 45 Degree Embossing GRAY SCALED Filter from LODEV.org [-1 -1 0][-1 0 1][0 1 1] NO CHANGE IN FILTER BUT MAKE GREEN AND BLUE = RED 0.5 + 3x3 45 degree embossing filter

  20. A More Exaggerated Emboss Filter [-1 -1-1 -1 0][-1 -1 -1 0 1] [-1 -1 0 1 1] [-1 0 1 1 1][ 0 1 1 1 1] from LODEV.org 0.5 + 5x5 exaggerated emboss filter

  21. A Mean Filter (Average or blur removes PEPPER) from LODEV.org [ 1 1 1 ][ 1 1 1 ][ 1 1 1 ] 1 9 Use normalizing factor 1/9 = 0.111 3x3 mean filter removes PEPPER by bluring Also called a BOX FILTER

  22. A Median Filter (Uses Middle in Sorted Result) from LODEV.org [ 1 1 1 ][ 1 1 1 ][ 1 1 1 ] 1 9 the middle value after x-sorting and y-sorting Slightly better lookingde-PEPPERING and blurring (I can’t see it)

  23. A Median Filter 3x3 5x5 9x9 15x15

  24. Gaussian Filters • Based on the gaussian distribution

  25. A Crude Approximation of A Gaussian Filter 1 80

  26. Another One Source:Stephen Chenney University of Wisconsin

  27. A More Exact Gaussian Filter For  = 0.84

  28. Gaussian Filter Uses • Noise reduction blur...

  29. Poisson Filter (Randomized Points) • Provides random sample points where each point is at least distance r apart...

  30. Algorithm To Build Random 2D Samples • Provide image sizenxn, the minimum distancerbetween samples (e.g., r = 1.8 pixels), and the maximum number of attemptskper sample (e.g., k = 30). • Initialize a 2D nxn grid with -1, a list of samples initially empty, and a stack of unprocessed indices. • Randomly choose a sample x0, add x0 to samples, and 0 to indices. continued on next slide

  31. Algorithm To Build Random 2D Samples While indices is not emptyRemove i from indices.for (j = 0; j < k; j++) { p = generate random point between radius r and 2r around xi. • if (p is further than r from each point in samples) { • Add p to samples and its index to indices }} Wilf: There’s a better way to present this (see filter tutorial)... Fast Poisson Disk Sampling in Arbitrary Dimensions, Bridson, R., ACM SIGGRAPH 2007 Sketches Program

  32. Can Find Prebuilt Poisson Filters on Internet float3 poissonSample (sampler texture, float2 uv, float2 pixelSize, float discRadius) { float2 offsets = {float2 (...), float2 (...), ...};float average = tex2D (texture, uv); for (int tap = 0; tap < 12; tap++) { average += tex2D (texture, uv +offsets [tap] * (discRadius * pixelSize);} return average / 13.0; } next slide Heat and Haze Post-Processing Effects, Oat and Tatarchuk, Game Programming Gems 4, 2004

  33. Rest of poissonSampleShader Function float2 offsets = { float2 (-0.326212, -0.40581), float2 (-0.840144, -0.07358), float2 (-0.695914, 0.457137), float2 (-0.203345, 0.620716), float2 (0.96234, -0.194983), float2 (0.473434, -0.480026), float2 (0.519456, 0.767022), float2 (0.185461, -0.893124), float2 (0.507431, 0.064425), float2 (0.89642, 0.412458), float2 (-0.32194, -0.932615), float2 (-0.791559, -0.59771), };

  34. Engineering Terminology • Relates the filter capability to what happens in the frequency domain (fourier transforms) • Low-pass filter lets low frequencies through which eliminates speckles and sharp discontinuities. • High-pass filter lets high frequencies through, an edge detector.

  35. Source:StephenChenneyUniversity of Wisconsin Box Filter • Box filters by averaging neighbors (so it smooths) • In frequency domain, keeps low frequencies and attenuates high frequencies (so it’s a low-pass filter) Spatial domain: box frequency domain: sinc

  36. Bartlett Filter • Triangle shaped filter in spatial domain (attenuates high frequencies less than a gaussian filter). • In frequency domain, product of two box filters (so attenuates high frequencies more than a box). spatial domain: triangle frequency domain: sinc2 Source:Stephen Chenney University of Wisconsin

  37. Conclusion • A filter is a matrix of weights centered on a specific pixel in an image and used to produce some sort of weighted average. • A host of different effects result from weighting the filters differently...

More Related