Images, filtering, convolution and edge detection
Contents
Images as a functions
Images can be represented as a function:
We think of an image as a function, \(f\) or \(I\), from \(\mathbb{R}^2\) to \(\mathbb{R}\):
- \(f(x, y)\) gives the intensity or value at position \((x,y)\).
A color image is just three functions “stacked” together. We can write this as “vector-valued function”:
\begin{equation*}
f(x, y) =
\begin{bmatrix}
r(x, y) \\
g(x, y) \\
b(x, y)
\end{bmatrix}
\end{equation*}
In computers images are represented as a set of numbers, not continuous functions:
In computer vision we typically operate on digital(discrete) images:
- Sample the 2D space on regular grid
- Quantize each sample (round to “nearest integer”)
Noise
Noise is just another function that is combined with the original function to get a new one:
\begin{equation*}
I’(x, y) = I(x, y) + \eta(x, y)
\end{equation*}
Types:
- Impulse (salt): random occurrences of white pixels
- Pepper: random black pixels
- Salt and pepper: random occurrences of black and white pixels
- Gaussian noise: variations in intensity drawn from a Gaussian normal distribution
To apply a noise it’s enough just to add it to the initial image:
noise = np.random.normal(mean, variance ** 0.5, image.shape) output = image + noise
Effect of \(\sigma\) (standard deviation) on Gaussian noise. Just to remind: \(variance = \sigma^2\).