<< Chapter < Page | Chapter >> Page > |
Consider the signal $x$ that is zero everywhere but at the instants $-1$ , $0$ , and $1$ where it has values $1$ , $0.5$ , and $0.25$ , respectively. At every instant $n$ , $x(n)$ can be expressed as $1\delta (n+1)+0.5\delta (n)+0.25\delta (n-1)$ . By linearity, the output can be obtained by composition of carefully translated and weighted impulseresponses: $y(n)=1h(n+1)+0.5h(n)+0.25h(n-1)$ .
To generalize the example [link] we can define the operation of convolution .
The operation of convolution can be fully understood by the explicit construction of some examples ofconvolution product. The module Discrete-Time Convolution gives the graphic construction of an examples and it offers pointers toother examples.
The properties of the convolution operation are well illustrated in themodule Properties of Convolution . The most interesting of such properties is the extension:
PropertyIf $x(n)$ is extended over ${M}_{1}$ samples, and $h(n)$ is extended over ${M}_{2}$ samples, then the convolution product $y(n)$ is extended over ${M}_{1}+{M}_{2}-1$ samples.
Therefore, the signal convolution product is longer than both the input signal and the impulse response.
Another interesting property is the commutativity of the convolutionproduct, such that the input signal and the impulse response can change their roles without affecting the outputsignal.
The Fourier Transform of the impulse response is called Frequency Response and it is represented with $H(\omega )$ . The Fourier transform of the system output is obtained by multiplication of the Fourier transform of theinput with the frequency response, i.e., $Y(\omega )=H(\omega )X(\omega )$ .
The frequency response shapes, in a multiplicative fashion, the input-signal spectrum or, in other words, it performs some filtering by emphasizing some frequency components and attenuating some others. A filtering can alsooperate on the phases of the spectral components, by delaying them of different amounts.
Filtering can be performed in the time domain (or space domain), by the operation of convolution, or in the frequency domain by multiplication of the frequency response.
Take the impulse response that is
zero everywhere but at the instants
$-1$ ,
$0$ , and
$1$ where it has values
$1$ ,
$0.5$ , and
$0.25$ ,
respectively. Redefine the filtering operation
filtra()
of the
Sound Chooser presented in
the module
Media Representation in
Processing . In this case filtering is operated in
the time domain by convolution.
void filtra(float[]DATAF, float[] DATA, float WC, float RO) {//WC and R0 are useless, here kept only to avoid rewriting other
//parts of codefor(int i = 2; i<DATA.length-1; i++){
DATAF[i]= DATA[i+1] + 0.5*DATA[i]+ 0.25*DATA[i-1];}
}
The notion of causality is quite intuitive and it corresponds to the experience of stimulating a system andgetting back a response only at future time instants. For discrete-time LTI systems, this happens when the impulseresponse is zero for negative (discrete) time instants. Causal LTI systems can produce with no appreciabledelay an output signal sample-by-sample , because the convolution operator acts only on present andpast values of the input signal. In [link] the impulse response is not causal, but this is not a problem because the whole input signal isalready available, and the filter can process the whole block of samples.
The notions of impulse response, convolution, frequency response, and filtering naturally extend from 1D to 2D, thusgiving the fundamental concepts of image processing.
As in the 1D case, the Fourier transform of the impulse response iscalled Frequency response and it is indicated by $H({\omega}_{\mathrm{X}}, {\omega}_{\mathrm{Y}})$ . The Fourier transform of the system output is obtained by Fourier-transforming the input and multiplying theresult by the frequency response. $Y({\omega}_{\mathrm{X}}, {\omega}_{\mathrm{Y}})=H({\omega}_{\mathrm{X}}, {\omega}_{\mathrm{Y}})X({\omega}_{\mathrm{X}}, {\omega}_{\mathrm{Y}})$ .
Consider the Processing code of the blurring example and find the lines that implement the convolution operation.
for(int y=0; y<height; y++) {
for(int x=0; x<width/2; x++) {
float sum = 0;for(int k=-n2; k<=n2; k++) {
for(int j=-m2; j<=m2; j++) {
// Reflect x-j to not exceed array boundaryint xp = x-j;
int yp = y-k;//... omissis ...
//auxiliary code to deal with image boundariessum = sum + kernel[j+m2][k+n2]* red(get(xp, yp));
}}
output[x][y] = int(sum);}
}
Notification Switch
Would you like to follow the 'Media processing in processing' conversation and receive update notifications?