HW 5, Problems 5.7
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 Max filter?
(b) 7x7 ?
(c) 9x9 ?

Answer

Median filter is given by f(x, y) = Max (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.

In[27]:=

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

[Graphics:HTMLFiles/index_4.gif]

Out[32]=

⁃DensityGraphics⁃

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.

<br />Take[data, {23, 27}, {26, 34}]//MatrixForm

( 0     0     0     0     0     0     0     0     0   )            0     255   ... 255   255   255   255   255   255   0            0     255   255   255   255   255   255   255   0

3x3 Filter

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

In[33]:=

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

Out[35]//MatrixForm=

( 1   1   1 )            1   1   1            1   1   1

Filter the image with Median 3x3 and display result

In[36]:=

nImage3 = nma`filterMax[data, F3] ; nma`imshow[Round[N[nImage3]], "Max 3x3"]

startingRow = 2endingRow = 255 startingCol=2 endingCol=255

ncol= 256 nRow= 256 n=3

Dimension of new image is = {254, 254}

[Graphics:HTMLFiles/index_15.gif]

Out[37]=

⁃DensityGraphics⁃

Show the top edge of the white bar BEFORE processing

In[38]:=

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

[Graphics:HTMLFiles/index_18.gif]

Out[38]=

⁃DensityGraphics⁃

Show the top edge of the white bar AFTER processing

In[39]:=

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

[Graphics:HTMLFiles/index_21.gif]

Out[39]=

⁃DensityGraphics⁃

Look at the data before:

In[40]:=

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

Out[40]//MatrixForm=

( 0     0     0     0     0     0     0     0     0   )            0     255   ... 255   255   255   255   255   255   0            0     255   255   255   255   255   255   255   0

Look at the data after filtering

In[41]:=

<br />Take[Round[N[nImage3]], {19, 27}, {23, 35}]//MatrixForm<br />

Out[41]//MatrixForm=

( 0     0     0     0     0     0     0     0     0     0     0     0     0    ... 255   0     0            0     0     255   255   255   255   255   255   255   255   255   0     0

So we see that the white bar is now is wider, it is 9 pixels wide.  And will be 4 rows longer, it will be 214 pixels high

7x7 Filter

In[42]:=

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

startingRow = 4endingRow = 253 startingCol=4 endingCol=253

ncol= 256 nRow= 256 n=7

Dimension of new image is = {250, 250}

[Graphics:HTMLFiles/index_31.gif]


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

In[45]:=

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

[Graphics:HTMLFiles/index_33.gif]

Out[45]=

⁃DensityGraphics⁃

In[54]:=

Take[Round[N[nImage7]], {13, 23}, {20, 36}]//MatrixForm

Out[54]//MatrixForm=

( 0     0     0     0     0     0     0     0     0     0     0     0     0     0      ...  0     255   255   255   255   255   255   255   255   255   255   255   255   255   0     0     0

So we see that the white bar is now is wider, it is 13 pixels wide. and will be 12 rows longer, so 222 pixels high

9x9 Filter

In[55]:=

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

startingRow = 5endingRow = 252 startingCol=5 endingCol=252

ncol= 256 nRow= 256 n=9

Dimension of new image is = {248, 248}

[Graphics:HTMLFiles/index_41.gif]

Out[57]=

⁃DensityGraphics⁃

In[58]:=

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

[Graphics:HTMLFiles/index_44.gif]

Out[58]=

⁃DensityGraphics⁃

In[67]:=

Take[Round[N[nImage9]], {13, 20}, {17, 34}]//MatrixForm

Out[67]//MatrixForm=

( 0     0     0     0     0     0     0     0     0     0     0     0     0     0      ...  0     255   255   255   255   255   255   255   255   255   255   255   255   255   255   255   1

So we see that the white bar is now is wider, it is 15 pixels wide. and will be 16 rows longer, so 226 pixels high

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 ends of the top of the first white strips.

In[68]:=

ListPlot3D[Take[data, {12, 40}, {15, 65}], PlotLabel"original data"] ListPlo ... Plot3D[Take[nImage9, {12, 40}, {15, 65}], PlotLabel"9x9 data"] 

[Graphics:HTMLFiles/index_49.gif]

Out[68]=

⁃SurfaceGraphics⁃

[Graphics:HTMLFiles/index_51.gif]

Out[69]=

⁃SurfaceGraphics⁃

[Graphics:HTMLFiles/index_53.gif]

Out[70]=

⁃SurfaceGraphics⁃

[Graphics:HTMLFiles/index_55.gif]

Out[71]=

⁃SurfaceGraphics⁃


Created by Mathematica  (November 16, 2004)