Presentation is loading. Please wait.

Presentation is loading. Please wait.

L24. More on Image File Processing

Similar presentations


Presentation on theme: "L24. More on Image File Processing"— Presentation transcript:

1 L24. More on Image File Processing
Filtering Noise Edge Detection

2 Pictures as Arrays 0 <= A(i,j) <= 255
A black and white picture can be encoded as a 2D Array Typical: 0 <= A(i,j) <= 255 (black) (white) Values in between correspond to different levels of grayness.

3 Just a Bunch of Numbers 1458-by-2084 150 149 152 153 152 155

4 Dirt! 1458-by-2084 Note how the “dirty pixels” look out of place
Note how the “dirty pixels” look out of place

5 Can We Filter Out the “Noise”?

6 Idea 1458-by-2084 Assign “typical” neighborhood gray values to
? ? ? ? Assign “typical” neighborhood gray values to “dirty pixels”

7 Getting Precise “Typical neighborhood gray values” Could use Median Or
Mean radius 1 radius 3 We’ll look at “Median Filtering” first…

8 Median Filtering Visit each pixel.
Replace its gray value by the median of the gray values in the “neighborhood”.

9 Using a radius 1 “Neighborhood”
6 7 6 7 6 7 Before After

10 How to Visit Every Pixel
m = 9 n = 18 for i=1:m for j=1:n Compute new gray value for pixel (i,j). end

11 Replace with the median of the values under the window.
Original: i = 1 j = 1 Filtered: Replace with the median of the values under the window.

12 Replace with the median of the values under the window.
Original: i = 1 j = 2 Filtered: Replace with the median of the values under the window.

13 Replace with the median of the values under the window.
Original: i = 1 j = 3 Filtered: Replace with the median of the values under the window.

14 Replace with the median of the values under the window.
Original: i = 1 j = n Filtered: Replace with the median of the values under the window.

15 Replace with the median of the values under the window.
Original: i = 2 j = 1 Filtered: Replace with the median of the values under the window.

16 Replace with the median of the values under the window.
Original: i = 2 j = 2 Filtered: Replace with the median of the values under the window.

17 Replace with the median of the values under the window.
Original: i = m j = n Filtered: Replace with the median of the values under the window.

18 What We Need… (1) A function that computes the median
value in a 2-dimensional array C: m = medVal(C) (2) A function that builds the filtered image by using median values of radius r neighborhoods: B = medFilter(A,r)

19 If n is even, then use : med = ( x(m) + x(m+1) )/2
Computing Medians x : x = sort(x) x : n = length(x); % n = 7 m = ceil(n/2); % m = 4 med = x(m); % med = 36 If n is even, then use : med = ( x(m) + x(m+1) )/2

20 Median of a 2D Array function med = medVal(C) [p,q] = size(C); x = [];
for k=1:p x = [x C(k,:)]; end Compute median of x and assign to med.

21 Medians vs Means A = Median = 154 Mean = 154.2

22 Medians vs Means A = Median = 154 Mean = 148.2

23 Back to Filtering… m = 9 n = 18 for i=1:m for j=1:n
Compute new gray value for pixel (i,j). end

24 Window Inside… m = 9 n = 18 New gray value for pixel (7,4) =
medVal( A(6:8,3:5) )

25 Window Partly Outside…
m = 9 n = 18 New gray value for pixel (7,1) = medVal( A(6:8,1:2) )

26 Window Partly Outside…
m = 9 n = 18 New gray value for pixel (9,18) = medVal( A(8:9,17:18) )

27 % B from A via median filtering % with radius r neighborhoods.
function B = medFilter(A,r) % B from A via median filtering % with radius r neighborhoods. [m,n] = size(A); B = uint8(zeros(m,n)); for i=1:m for j=1:n C = pixel (i,j) neighborhood B(i,j) = medVal(C); end

28 The Pixel (i,j) Neighborhood
iMin = max(1,i-r) iMax = min(m,i+r) jMin = max(1,j-r) jMax = min(n,j+r) C = A(iMin:iMax,jMin:jMax) m A r = 1 r = 2 n

29 B = medFilter(A)

30 Original

31 What About Using the Mean instead of the Median?
Replace each gray value with the average gray value in the radius r neighborhood.

32 Mean Filter with r = 3

33 Mean Filter with r = 10

34 Why it Fails The mean does not capture representative values. 85 86
The mean does not capture representative values. 85 86 87 88

35 And Median Filters Leave Edges (Pretty Much) Alone
Inside the box, the 200’s stay at 200 and the 100’s stay at 100.

36 Finding Edges

37 What is an Edge? Near an edge, grayness values change abruptly.

38 The Rate-of-Change-Array
Suppose A is an image array with integer values between 0 and 255 B(i,j) be the maximum difference between A(i,j) and any of its eight neighbors.

39 Example 59 90 58 60 56 62 65 57 81 Rate-of-change at
middle pixel is 30

40 % B is the corresponding % Rate-Of-Change array
function B = Edges(P) % P is a jpeg file % B is the corresponding % Rate-Of-Change array A = rgb2gray(imread(P)); [m,n] = size(A); B = uint8(zeros(m,n)); for i=2:m-1 for j = 2:n-1 B(i,j) = ????? end

41 Recipe for B(i,j) % The 3-by-3 subarray that includes
% A(i,j) and its 8 neighbors… Neighbors = A(i-1:i+1,j-1:j+1); % Subtract A(i,j) from each entry… Diff = Neighbors – A(i,j)); % Take absolute value of each entry.. posDiff = abs(Diff); % Compute largest value in each column… colMax = max(posDiff); % Compute the max of the column max’s… B(I,j) = max(colMax)

42 Rate-of-Change Array to Image
B = Edges('Tower.jpg'); % Compute 0-1 array that identifies % those B entries bigger than 20: importantPixels = B > 20; % Display those pixels with maximum % brightness C = uint8( 255*importantPixels ); imshow(C) B>0 is a 0-1 array, the ones are located where B(i,j)> 20.

43 Threshhold = 40

44 Threshhold = 20

45 Threshhold = 30


Download ppt "L24. More on Image File Processing"

Similar presentations


Ads by Google