## Description

## Exercise 1 2D Image Filtering

a. Write a new member function Image::filter 2d that takes an odd

integer n, and an n × n single-precision floating point matrix K. The

function should return a new image that is of size

(w() − n + 1) × (h() − n + 1)

and filtered by the kernel K.

Hint: If n is even you may take n as the largest odd number smaller than

n. Make sure to clamp the filter results to the range [0, 255]. The size of the

output is smaller so that you do not need to worry about the image borders.

## Exercise 2 Image Derivatives

a. Write a new member function Image::deriv x that takes computes

the image derivative in the x direction using a filter of the form

−1 0 1

−2 0 2

−1 0 1

.

The results should be returned in a newly allocated array of type short

which can store negative values.

b. Write a new member function Image::deriv y that takes computes

the image derivative in the y direction using a filter of the form

−1 −2 −1

0 0 0

1 2 1

.

The results should be returned in a newly allocated array of type short

which can store negative values.

1

## Exercise 3 Geometric Transforms

a. Write a new member function Image::warp affine that takes a twoby-two transform matrix A and a two-by-one translation vector t,

and an Image pointer out. After the function call finishes the image pointed by out should contain the result of applying the affine

transform

x

0 = Ax + t =

a11 a12

a21 a22

x +

t1

t2

with nearest neighbor sampling.

b. Add an option to perform bilinear sampling to the function Image::warp affine.

Hint: You must not change the size of the image out. Assume that the

matrix and vector entries are stored in the double-precision floating point

format and the matrix is stored in the column major order (Its entries are

stored in memory in the order [a11, a21, a12, a22]).

2 CENG 391 Homework 2