Image Processing Reference

In-Depth Information

Fig. 10.3
Image scaling using forward mapping. Notice the black pattern, which is a result of the

inherent problem related to forward mapping

10.2.1 Backward Mapping

The solution is to avoid forward mapping and instead use
backward mapping
. Back-

ward mapping maps from
g(x
,y
)
to
f(x,y)
. That is, it goes through the
output

image
,
g(x
,y
)
, one pixel at a time (using two for-loops) and for each position

(x
,y
)
it uses the
inverse transformation
to calculate
(x, y)
. That is, it finds out

where in the input image a pixel must come from in order to be mapped to
(x
,y
)
.

The principle is illustrated in Fig.
10.2
(b). The inverse transformation is found by

matrix inversion of the transformation matrix as

⎡

⎤

⎡

⎤

⎡

⎤

−

1

x

y

1

x

y

1

a
1
a
2
a
3

b
1
b
2
b
3

001

⎣

⎦
=

⎣

⎦

⎣

⎦

·

(10.10)

For scaling, rotation and shearing the inverse matrices look like the following:

⎡

⎣

⎤

⎦
,

⎡

⎣

⎤

⎦

1
/S
x
00

0
/S
y

cos
θ

sin
θ

0

−

Scaling:

0

Rotation:

sin
θ

cos
θ

0

0

0

1

0

0

1

⎡

⎤

1

−

B
x

0

1

⎣

⎦

Shearing:

−

B
y

1

0

1

−

B
x
B
y

0

0

1

−

B
x
B
y

So, if we want to implement a program that as input takes an image f(x,y) and

as output gives a scaled image g(x',y'), then it could look something like this in

C-code:

Image_Width_Output

=

Image_Width_Input

∗

Sx ;

∗

Image_Height_Output

=

Image_Height_Input

Sy ;