Description
(1) (4 points) Working with numbers in matrices.
(a) Create a 4 × 4 matrix of numbers sampled from a standard Normal distribution. It is highly
unlikely, but if your random matrix only has positive or negative values, generate a new one
with both positive and negative values. The probability of this happening is < 0.001, so if it
does happen to you make sure you’re generating normal values. Display the values.
(b) Extract the values that are positive and put them in a vector. Display the values. Do not
use a loop.
(c) Use the find function to extract the row and column indices of the positive values. You may
need to use Google or the MATLAB help to figure this out. Display these values.
(d) Create a 4 × 4 matrix that has values of 0 where your original matrix was non-positive and
1 where it was positive. Display the values.
(2) (3 points) Calculating Euclidean distance. The Euclidean distance between two vectors, x =
[x1, x2, . . . , xn] and y = [y1, y2, . . . , yn] is defined as
d(x, y) = p
(x1 − y1)
2 + (x2 − y2)
2 + . . . + (xn − yn)
2.
So the distance between x = [1, 2] and y = [3, 5] is p
(1 − 3)2 + (2 − 5)2 =
√
13 (note that is in
2D). We will use Euclidean distance many times in this class to see how close a pixel magnitude in
a image is to some value. For your matrix in problem 1a, create a new matrix where each entry is
the Euclidean distance from the entry in the first row/first column. Do this without using a loop.
(3) (7 points) Reading in a ppm file and differentiating between image display options in MATLAB.
(a) (3 points) Use Google or the MATLAB help to read in the img_001.ppm image that was
distributed with this assignment. You cannot use a downloaded MATLAB function to do
1
this, but must use a built in MATLAB function. After reading in the image, display the
dimension of the image and describe what each dimension represents. What is the range of
values in the image?
(b) (2 points) Use Google or the MATLAB help to learn about the differences between imshow,
image and imagesc. For each one describe how it differs from the other 2, including when it
is optimal to use that specific function to display an image. Make 3 separate figures, where
each one displays img_001.ppm using each of these commands. Note: Do not use a multipanel
plot for this exercise.
(c) (2 points) Using a multipanel plot (1 × 3) and imagesc() to display each of the 605 × 700
images, separately in grayscale. Use a proper plot title to describe what the image is showing.
I’m looking for more than 1, 2 and 3. I’d like the meaning of the image. You may need to
google how to display in grayscale. How is imagesc working differently here than it did in
the previous part (aside from the fact that I had you change it to grayscale)? Tip, the
axis(’square’) command may make the plot look a little nicer.
(4) (10 points) Filtering an image. We will learn numerous ways to smooth an image and to practice
manipulating matrices, you will mean filter the image from the previous problem. Specifically, use
the red channel portion of the image (img_001.ppm). Importantly please change the values to
double precision array using the double(). If you don’t your new image will only have integer
values and they should be real number values. The following image describes how the mean filter
works. The left hand side is the starting image and right hand side is the filtered image. For now,
we’ll ignore the edges and simply put 0s for the edges and fill in the rest. For each pixel (entry in
the matrix) construct a 3×3 neighborhood around the pixel. The center of this neighborhood is the
target in the new matrix (where your value will go) and the value is the mean of the 9 values in the
neighborhood. The image illustrates the first two pixels. You may not use any built in MATLAB
filtering functions or convolution functions for this problem, but must code it from scratch using
a loop (unless you can think of a way to avoid the loop). Filter the image and print out the first
5 entries in the first 5 rows (if the image is called img_filt, then use img_filt(1,1:5)). Also
make a 1 × 2 panel plot where the left panel is the original image and the right panel is the filtered
image.
5 6 2 7 2 9
1 1 2 7 4 8
3 4 2 7 8 9
4 2 5 7 8 8
1 2 1 4 3 5
2 3 8 9 7 6
0 0 0 0 0 0
0 2.9 4.2 7 4 0
0 4 2 7 8 0
0 2 5 7 8 0
0 2 1 4 3 0
0 0 0 0 0 0
Original Image Filtered Image
mean([5,6,2,1,1,2,3,4,2]) mean([6,2,7,1,2,7,4,2,7])])
2
(5) (4 points) In this problem you will make a 3 dimensional plot using the imagesc command.
The result should be a word commonly used to greet people. The first two dimensions are x and y
and describe the location of a pixel (2D unit of an image) while the third dimension can be thought
of as a pixel magnitude. Step 1 is to create the grid of x and y coordinates. Step 2 will create the
the pixel magnitude.
(a) Create a and b as vectors that go from -3 to 3 in increments of 0.1.
(b) You’ll be evaluating a function over the values of a and b in all pairwise combinations. Use
the meshgrid command, [A, B]=meshgrid(a,b);. Print the size of A to the screen and using
imagesc create a 1 × 2 panel plot that shows A on the left and B on the right. Describe what
meshgrid did in one or two sentences. Don’t just say it created a mesh grid 🙂 Explain what
it is doing. It might help to look at the output from [testA, testB]=meshgrid(1:2, 1:3)
as well.
(c) Create Z according to Z = exp−A2−B2/2
cos(4A) + exp−3((A+0.5)2+B2/2). Change values in
Z that are greater than 0.001 to 0.001 and less than -0.001 to -0.001. Plot the result using
imagesc. If you don’t see a commonly used word to greet people, you’ve made a mistake.
(d) What are the 3 dimensions in this image? Specifically, describe them and give their ranges.
3