The B-Spline Kernels for Blurring

For the project, I suggest you use the B-Spline kernels for blurring.

The B-Spline kernels were mentioned quickly in class, and the discussion in the book is actually for the continuous cubic case (and its not obvious how to connect this to the discrete case). The discussion of B-Splines in the book for curves (in Chapter 15) also is hard to connect to the discrete filters (although, the actually are the same things).

B-Splines are obtained by repeated convolutions of the unit box.

The discrete unit box is: ` (1/2) [1 1] `

If we convolve that with itself, we get: ` (1/4) [1 4 1] `

And if we keep doing it, we get the series (omitting the leading fraction):

```1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
```

and so on. Note that the center of the kernel might be in between samples.

As far as naming these things go:

In the project, I called the "1 2 1" kernel the "3" blur kernel since it is three samples long. By this naming, "5" would be 1 4 6 4 1.

A different naming, that is more consistent with the book would be to call the unit box 0. In this naming scheme "1 2 1" would be 1, and so on. Or you could call the unit box 1 (since its 1 repetition of the unit box).

To be honest, the connection between the discrete case and the continuous case is subtle, and I've never really worked it out completely.

In 2D

Because the B-Splines are seperable (by definition, actually - we define the 2D case to be the convolution in each direction of the 1D B-Splines), knowing the 1D case is good enough.

For completeness, the "3" case (1 2 1) gives:

```1 2 1
2 4 2
1 2 1
```

That I would also call "3" (since it is a 3x3 kernel).