Image Manipulation in MATLAB Due 11/1 at 5:00 PM

Similar documents
Beginner s Matlab Tutorial

SYSTEMS OF EQUATIONS AND MATRICES WITH THE TI-89. by Joseph Collison

Matrix Multiplication

Introduction to Matrices

CS1112 Spring 2014 Project 4. Objectives. 3 Pixelation for Identity Protection. due Thursday, 3/27, at 11pm

Operation Count; Numerical Linear Algebra

Solution to Homework 2

MATLAB Functions. function [Out_1,Out_2,,Out_N] = function_name(in_1,in_2,,in_m)

VISUAL ALGEBRA FOR COLLEGE STUDENTS. Laurie J. Burton Western Oregon University

A Robust and Lossless Information Embedding in Image Based on DCT and Scrambling Algorithms

Armstrong Atlantic State University Engineering Studies MATLAB Marina Image Processing Primer

8 Square matrices continued: Determinants

Introduction to Matrices for Engineers

MassArt Studio Foundation: Visual Language Digital Media Cookbook, Fall 2013

Data Storage 3.1. Foundations of Computer Science Cengage Learning

Lecture 2 Mathcad Basics

1 Shapes of Cubic Functions

The Image Deblurring Problem

K80TTQ1EP-??,VO.L,XU0H5BY,_71ZVPKOE678_X,N2Y-8HI4VS,,6Z28DDW5N7ADY013

Similar matrices and Jordan form

MATRIX ALGEBRA AND SYSTEMS OF EQUATIONS. + + x 2. x n. a 11 a 12 a 1n b 1 a 21 a 22 a 2n b 2 a 31 a 32 a 3n b 3. a m1 a m2 a mn b m

Chapter 2. Point transformation. Look up Table (LUT) Fundamentals of Image processing

MATRIX ALGEBRA AND SYSTEMS OF EQUATIONS

Classroom Tips and Techniques: The Student Precalculus Package - Commands and Tutors. Content of the Precalculus Subpackage

MATHEMATICS FOR ENGINEERS BASIC MATRIX THEORY TUTORIAL 2

Abstract: We describe the beautiful LU factorization of a square matrix (or how to write Gaussian elimination in terms of matrix multiplication).

SIGNAL PROCESSING & SIMULATION NEWSLETTER

Using MATLAB to Measure the Diameter of an Object within an Image

6. Cholesky factorization

LINEAR ALGEBRA. September 23, 2010

MestRe-C User Guide Megan Bragg 04/14/05

2x + y = 3. Since the second equation is precisely the same as the first equation, it is enough to find x and y satisfying the system

Auto-Tuning Using Fourier Coefficients

Matrices 2. Solving Square Systems of Linear Equations; Inverse Matrices

A Quick Algebra Review

Chapter 17. Orthogonal Matrices and Symmetries of Space

MBA Jump Start Program

A Concrete Introduction. to the Abstract Concepts. of Integers and Algebra using Algebra Tiles

Torgerson s Classical MDS derivation: 1: Determining Coordinates from Euclidean Distances

LAB 6 - GRAVITATIONAL AND PASSIVE FORCES

ADVANCED APPLICATIONS OF ELECTRICAL ENGINEERING

Typical Linear Equation Set and Corresponding Matrices

Linear Algebra and TI 89

Fireworks CS4 Tutorial Part 1: Intro

Question 2: How do you solve a matrix equation using the matrix inverse?

Data Mining: Algorithms and Applications Matrix Math Review

Video-Conferencing System

Data Storage. Chapter 3. Objectives. 3-1 Data Types. Data Inside the Computer. After studying this chapter, students should be able to:

MASKS & CHANNELS WORKING WITH MASKS AND CHANNELS

Name: Section Registered In:

Linear Programming. March 14, 2014

Introduction to Matrix Algebra

Correlation and Convolution Class Notes for CMSC 426, Fall 2005 David Jacobs

This activity will show you how to draw graphs of algebraic functions in Excel.

Lecture Notes 2: Matrices as Systems of Linear Equations

Publisher 2010 Cheat Sheet

Vector Math Computer Graphics Scott D. Anderson

[1] Diagonal factorization

How long is the vector? >> length(x) >> d=size(x) % What are the entries in the matrix d?

9.4. The Scalar Product. Introduction. Prerequisites. Learning Style. Learning Outcomes

LAB 6: GRAVITATIONAL AND PASSIVE FORCES

Solving simultaneous equations using the inverse matrix

Color Histogram Normalization using Matlab and Applications in CBIR. László Csink, Szabolcs Sergyán Budapest Tech SSIP 05, Szeged

Updates to Graphing with Excel

COLLEGE ALGEBRA. Paul Dawkins

A Quick Start Guide to Using PowerPoint For Image-based Presentations

Arithmetic and Algebra of Matrices

Drawing a histogram using Excel

Notes on Determinant

Introduction to MATLAB (Basics) Reference from: Azernikov Sergei

Digital Imaging and Multimedia. Filters. Ahmed Elgammal Dept. of Computer Science Rutgers University

MATH Fundamental Mathematics IV

December 4, 2013 MATH 171 BASIC LINEAR ALGEBRA B. KITCHENS

1 Review of Least Squares Solutions to Overdetermined Systems

Making TIFF and EPS files from Drawing, Word Processing, PowerPoint and Graphing Programs

SOLVING COMPLEX SYSTEMS USING SPREADSHEETS: A MATRIX DECOMPOSITION APPROACH

OA3-10 Patterns in Addition Tables

Rotation about an arbitrary axis and reflection through an arbitrary plane

Using Microsoft Picture Manager

Analysis of System Performance IN2072 Chapter M Matlab Tutorial

SECTION 2.5: FINDING ZEROS OF POLYNOMIAL FUNCTIONS

AMATH 352 Lecture 3 MATLAB Tutorial Starting MATLAB Entering Variables

If you know exactly how you want your business forms to look and don t mind

Lecture 5: Singular Value Decomposition SVD (1)

Comparison of different image compression formats. ECE 533 Project Report Paula Aguilera

Lecture 3: Finding integer solutions to systems of linear equations

CS3220 Lecture Notes: QR factorization and orthogonal transformations

EXCEL SOLVER TUTORIAL

Bindel, Spring 2012 Intro to Scientific Computing (CS 3220) Week 3: Wednesday, Feb 8

Imaging Systems Laboratory II. Laboratory 4: Basic Lens Design in OSLO April 2 & 4, 2002

Nonlinear Iterative Partial Least Squares Method

w w w. g e o s o f t. c o m

the points are called control points approximating curve

Petrel TIPS&TRICKS from SCM

Part 1 Expressions, Equations, and Inequalities: Simplifying and Solving

2.3. Finding polynomial functions. An Introduction:

The Characteristic Polynomial

Transcription:

Image Manipulation in MATLAB Due 11/1 at 5:00 PM 1 Introduction Digital images are just matrices of pixels, and any type of matrix operation can be applied to a matrix containing image data. In this project you will explore some ways to manipulate images using MATLAB. We ll start off with transformation matrices, and move on to image compression. 2 Basic MATLAB commands MATLAB has some nice built in functions for reading and writing image files the first command we ll be using is imread, which reads in an image file saved in the current directory. imread works with most popular image file formats. To view an image in a matlab figure, use imagesc. imagesc is similar to image, but for our purposes will work more consistently. The following code will read in an image with file name photo1.jpg, save it as the variable X, and display the image in a matlab figure window. Make sure you run the code from the same folder that contains the image. Code1.m in the project folder shows how to display the image. After reading in an image like this, X(:,:,1) is a 2-D matrix with intensity values for the red channel, X(:,:,2) for the green and X(:,:,3) for the blue. When images are read in using imread, MATLAB stores the data as integers. If we want to perform mathematical operations on the image data using floating point numbers, the integers must be converted to floats as well. If you just read in an image as X, you can use X = double(x); to perform the floating point conversion. Note that at this point, imagesc will no longer work properly on X, since the values in X aren t integers anymore. If you want to write image data to an image file, you can use imwrite. Note that if you converted the image data to the double format, you ll need to convert back to integer values. The command to do this is uint8. The following code shows how to read in an image, convert to double, and write to a.jpg file. You ll want to build your image manipulation code around this template if you wish to write your output to an image file. Code3.m shows a framework for doing this. 1

3 Image Manipulation Matrix multiplication allows us to transform a vector in many ways. The following matrix takes the entries of a vector and shifts them down one position, cycling the last entry around to the top. 0 0 0 0 1 1 5 2 0 1 0 0 0 3 0 0 1 0 0 4 = 1 2 3 0 0 0 1 0 5 4 If you notice, the rows in the matrix were transformed in the same way that the product was, if you consider it starting off as the identity matrix. Each of the rows were shifted down one, and the last row cycled around to the top. This is called a Transformation Matrix, and it is obtained by performing the desired transformation on each column of the identity matrix. In this case, column 1 turns into column 2, column 2 turns into column 3 etc. This transformation matrix works on matrices too. 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 6 11 16 21 2 7 12 17 22 3 8 13 18 23 4 9 14 19 24 5 10 15 20 25 = 5 10 15 20 25 1 6 11 16 21 2 7 12 17 22 3 8 13 18 23 4 9 14 19 24 Notice how it cycled the rows around in a matrix the same way it did in the vector. Since an image is just a matrix, we can transform them using a linear transformation. The following image was transformed using a 256 256 version of the transformation matrix above, shifting the image down by 50 pixels. code6.m produced the shifted image above. Rows can be transformed too, just by multiplying by the transformation matrix on the right side. As an example: 0 0 0 0 1 [ ] 1 2 3 4 5 0 1 0 0 0 0 0 1 0 0 = [ 2 3 4 5 1 ] 0 0 0 1 0 2

However, the reordering is not the same as before the transpose of the transformation matrix must be used to shift the elements so that the last element is first. 0 1 0 0 0 [ ] 0 0 1 0 0 1 2 3 4 5 0 0 0 1 0 0 0 0 0 1 = [ 5 1 2 3 4 ] Just for fun: code7.m preforms the shift above, but animates it through the entire image. 4 Image Compression 4.1 The Discrete Cosine Transform You can think of the discrete Cosine transform (DCT) as decomposing a vector into a linear combination of cosine functions with different frequencies. If the data in a vector are smooth, then the low frequency components will dominate the linear combination. If the data are not smooth (discontinuous, jagged, rapidly increasing or decreasing), then there will be more weight placed on the higher frequency components. If something is smooth, that is it doesn t wiggle around very much, then most of the information can be retained by only looking at the first few cosine modes. Think about Taylor series, smooth functions can be approximated locally pretty well by low order Taylor polynomials. The idea is very similar with a cosine transform, except instead of using increasingly higher order (wigglier) polynomial terms we re using increasingly higher frequency (wigglier) cosine functions to represent a given set of data. There are several ways to define the DCT matrix, for this assignment use: ( 2 π(i 1 C i,j = n cos 2 )(j 1 2 ) ) n Where C is an n n matrix, and i and j represent the row and column index respectively. There are several ways to construct this matrix, the easiest way is to use nested for loops. If you get stuck, use code2.m as a guideline. To apply this transform matrix to a vector just multiply. So if y is the transformed version of x, we would obtain it by doing y = Cx. Since C is square, the 1-D DCT is an operation that takes in a vector of length n and returns another vector of length n. For 1-D data, the output is a vector containing weights for the different frequency components; the higher the weight the more important that frequency component. This is just the 1-D DCT matrix. To transform our image data, we will need the 2-D transform. Thankfully it s very easy to compute the 2-D DCT using the 1-D matrix. Let X g be the grayscale version of the image data, then the 2-D DCT for the image X g is: Y = CX g C T X g is a matrix, who s (i, j) entry represents the grayscale level at pixel position (i, j). In our case, the values range from 0 to 255, with 0 being black and 255 being white. 3

Intuitively, you can think of CX g as applying applying the 1-D DCT to the columns of X g, and X g C T as applying the 1-D DCT to the rows of X g. So CX g C T applies the 1-D transform to both the rows and the columns of X g. Our DCT matrix has the special property that it is equal to its transpose. So for our DCT matrix C, C T = C Now we can define the 2-D transformed image as: Y = CX g C If we want to get our original image back from the DCT, we ll need to know the inverse of S. Our matrix S also has the property that it is its own inverse. So we have, C 1 = C This is useful, since inverses are often difficult to compute. 100 90 50 80 70 100 60 50 150 40 30 200 20 10 250 50 100 150 200 250 Figure 1: DCT coefficients for an image (values in the matrix Y ). Values in the upper left are weights on low frequency cosine components while values in the lower right are weights on high frequency cosine components. Since the values in the upper left are significantly larger than those in the lower right, we can see that low frequencies dominate the overall image. 4.2 Compression JPEG is a type of lossy compression, which means that the compressed file contains less information than the original. Since human eyes are better at seeing lower frequency components, we can afford to toss out the highest frequency components of our transformed image. The more uniform an image, the more data we can throw away without causing a noticeable loss in quality. More complicated images can still be compressed, but heavy compression is more noticeable. Thankfully the DCT can sort out which components of the image are represented by low frequencies, which are the ones we need to keep. 4

The information corresponding to the highest frequencies is stored in the lower right of the transformed matrix, while the lowest is stored in the upper left. Therefore, we want to save data in the upper left, and delete data in the lower right. Code5.m will zero out the matrix below the off diagonal. Adjusting the value of p moves the diagonal up and down the matrix, affecting how much data are retained. This illustration shows how the off diagonal moves with changes in p. After deleting the high frequency data, the inverse 2-D DCT must be applied to return the transformed image back to normal space (right now it will look nothing like the original photograph). Since none of the zeros need to be stored, this process could allow for a significant reduction in file size. 5 Tasks Note: Write-up all answers, and save it as a pdf. There should be enough exposition to describe the problem to someone who has not read this assignment. Students are encouraged to work in groups of up to 3. The project is due on D2L at 5:00 PM on November 1. 1. Write a MATLAB function to read in the files photo1.jpg and photo2.jpg and store them as matrices of doubles. Convert the color arrays into a grayscale matrices formed by the linear combination of 30% red, 59% green, and 11% blue. Include these grayscale images in your writeup. 2. The matrix from photo1.jpg is not square. We can, however, still apply matrices to shift the pixels. Find a matrix that will perform a horizontal shift of 240 pixels to photo1.jpg and include the shifted image in your write up. Hint: We saw with n n matrices that to perform a horizontal shift we multiply our matrix by a transformation matrix on the right. The transformation matrix on the right was obtained by transforming the columns of the n n identity in the same way we wanted to columns of the image matrix to be transformed. For a non-square matrix X, we can take the same approach, but we have to start with the correct identity matrix. Think about the dimensions of the matrix you want to transform and find the matrix I R such that XI R = X. Manipulate the columns of I R to obtain the transformation matrix. 3. How could you perform a horizontal and vertical shift? That is, what matrix operations would need to be applied to to get an image to wrap around both horizontally and vertically? Apply transformations to the original matrix from photo1.jpg that result in both a horizontal and vertical shift. This matrix isn t square, so think about the dimensions for the appropriate transformation matrices. Shift the image 240 pixels horizontally and 100 pixels vertically. 4. Using what you learned about transformation matrices, determine what matrix would be required to flip an image upside down. Using that transformation, flip photo2.jpg upside down. 5

5. What should transposing an image matrix do? Try it with photo2.jpg. Does it look the way you expected? 6. Use matrix operations to fix the distorted mount2.jpg, and reconnect it to mount1.jpg. Hint: When viewing the image using imagesc, the axis labels are the pixel numbers. 7. Determine what steps need to be taken to undo the 2-D DCT. Remember that our DCT is defined by Y = CX g C, and also the special properties of C. You can easily check to see if your inverse transform works by applying it to Y and viewing it with imagesc. 8. Perform our simplified JPEG-type compression on the image of Albus the cat, photo2.jpg ˆ Read an image into MATLAB and store as a matrix of doubles ˆ Convert the 3-D RGB matrix to a 2-D grayscale matrix ˆ Perform the 2-D discrete cosine transform on the grayscale image data ˆ Delete some of the less important values in the transformed matrix using the included algorithm ˆ Perform the inverse discrete cosine transform ˆ View the image or write to a file. Compress the image with several different values of p. Include sample images for compression values that don t cause an obvious drop in quality, as well as some that do. (Something like the 4 images at the top of this project writeup) 9. You should be able to make p pretty small before noticing a significant loss in quality. Explain why you think this might be the case. The point of image compression is to reduce storage requirements; compare the number of non-zero entries in the transformed image matrix (Y, not X g ) to a qualitative impression of compressed image quality. What value of p do you think provides a good balance? (no correct answer, just explain) Note Include all of your code in an appendix. Make sure to comment your code clearly, so it s very obvious which problem the code was for. Output not supported by code in the appendix will not be counted. 6 Using Mathematica You can do all of the tasks in this project using Mathematica as well. You can use the functions Import and Export to read and write image files. Table will allow you to construct the DCT matrix. The documentation for FourierDCT has an example of reading in an image and storing as an array. You may not use FourierDCT. You must construct your own DCT matrix using the definition listed previously. Do not copy code from the Mathematica documentation or other sources online, as that would be plagiarism. 6