HW 5, Problems 5.6
EECS 203A, UCI, Fall 2004

by Nasser Abbasi

Question

TextBook: Digital Image Processing, 2nd edition. By Gonzalez and Woods.

The white bars in the test pattern shown below are 7 pixels wide and 210 pixels high. The separation between bars is 17 pixels. What would this image look like after application of 
(a) 3x3 Median filter?
(b) 7x7 Median?
(c) 9x9 Median?

Answer

Median filter is given by f(x, y) = median(g(x, y)where g(x, y)is the image data under the filter.

Load the original Image and display it first. I downloaded the image from the text book website, and used InfranView to get the image information to find how many pixels the whole image is, then read in into Mathematica to display it.

Clear["Global`*"];
nma`cd;
nRow = 256; 
nCol = 256;
data = 
        nma`imread["Prob5.01.raw", 256, 
          256];
nma`imshow[data, "problem 5.1 image"]

In the original image,the vertical white bars look like this (displaying the top end of the white bar) we see that the white bar top starts at row number 24,we see that the strip is 7 pixels wide.

\(\(\(
\)\(Take[data, {23, 27}, {26, 34}] // MatrixForm\)\)\)

3x3 Filter

Now construct each ARM filter, and apply them to the above image

F[n_] := Table[1, {i, 1, n}, {j, 1, n}]
F3 = F[3];
MatrixForm[F3]

Filter the image with Median 3x3 and display result

nImage3 = 
        nma`filterMedian[data, F3];

    nma`imshow[Round[N[nImage3]], "Median 3x3"]

Show the top edge of the white bar BEFORE processing

nma`imshow[Round[N[Take[data, {23, 27}, {26, 34}]]], ""]

Show the top edge of the white bar AFTER processing

nma`imshow[
      Round[N[Take[nImage3, {21, 27}, {23, 34}]]], ""]

After applying the 3x3 filter, the white bar would blur to the following
Look at the data before:

Take[Round[N[data]], {23, 27}, {26, 34}] // MatrixForm

Look at the data after filtering

\(\(\(
\)\(\(Take[Round[N[nImage3]], {22, 27}, {25, 33}] // 
      MatrixForm\)\(
\)
    \)\)\)

So we see that the white bar is now about the same size as before. The corners have had a blocky looking shape to them.

7x7 Filter

F7 = F[7];
nImage7 = nma`filterMedian[data, F7];
nma`imshow[
      Round[N[nImage7]], "Median 7x7"]

Now show the top of the white strip. Look now how much more thin it is

nma`imshow[
      Round[N[Take[nImage7, {17, 30}, {19, 35}]]], ""]

Take[Round[N[nImage7]], {19, 25}, {23, 33}] // MatrixForm

We see now that the boxy look to the edges is more apparent.

9x9 Filter

F9 = F[9];
nImage9 = nma`filterMedian[data, F9];
 nma`imshow[
      Round[N[nImage9]], "Median 9x9"]

nma`imshow[
      Round[N[Take[nImage9, {15, 26}, {18, 35}]]], ""]

Take[Round[N[nImage9]], {18, 30}, {21, 31}] // MatrixForm

We see that now the white bar edges at the top is becoming more sharp and pointed.

3D plots

I'll now display the 3 images in 3D to better illustrate the filter result. I will only plot the region near the end of the top of the first white strip.

ListPlot3D[Take[data, {12, 40}, {15, 65}], 
      PlotLabel -> "original data"]
ListPlot3D[Take[nImage3, {12, 40}, {15, 65}], 
      PlotLabel -> "3x3 data"]
ListPlot3D[Take[nImage7, {12, 40}, {15, 65}], 
      PlotLabel -> "7x7 data"]
\(\(\(ListPlot3D[Take[nImage9, {12, 40}, {15, 65}], 
      PlotLabel -> "9x9 data"]\)\(
\)\(
\)
    \)\)